首页 > 其他分享 >根据视频生成可以头尾衔接的循环视频

根据视频生成可以头尾衔接的循环视频

时间:2024-10-11 12:45:06浏览次数:7  
标签:头尾 视频 None int 图像 哈希 汉明 衔接

最近手头有一个视频,基本上是一个部分重复循环的,我想把循环的一段提取出来造成动态壁纸,但怎奈何不会用 pr,只能用 ffmpeg 配合 pillow 搞了……

实现的关键在于找到可以首位相接的两帧画面,这就要求两个画面有极高的相似度。判断画面相似度首先需要对图像进行量化,一般有两种方案,一种是提取特征向量,一种是计算哈希。考虑到我手头视频的特征,我选择了比较简单的哈希。

开始之前,需要安装必要的包以及 ffmpeg,执行

pip install ffmpeg-python Pillow numpy imagehash

!Notice 简略起见,以下代码不重要部分折叠,具体实现参照文末链接

首先需要把视频分离成帧,存入数组:

def extract_frames(input_video) -> Generator[np.ndarray, None, None]:
    # 一个生成器,生成每一帧的数据存入 numpy 数组
    ...

图像的哈希算法有多种,比如均值哈希(aHash)、感知哈希(pHash)以及差异哈希(dHash),各有优劣,但选择哪一种对接下来的算法影响不大,我这里以 pHash 为例。以上图像哈希算法在 imagehash 中均有提供,由于本篇主要讨论循环视频生成,哈希算法的具体原理就不研究了(肯定不是因为我不会)。

def generate_hashes(input_video: str) -> Generator[int, None, None]:
    for frame in extract_frames(input_video):
        # 将 numpy 数组转换为 PIL 图像
        pil_image: ImageHash = Image.fromarray(frame)

        # 生成 pHash 值
        phash_value = int(str(phash(pil_image)), 16)

        yield phash_value

图像哈希越相似,图像就越相似。两个哈希值的相似度可以用汉明距离表示,汉明距离表两个二进制数差异的位数,可以通过异或和中 \(1\) 的个数计算。

def hamming_distance(hash1: int, hash2: int) -> int:
    return bin(hash1 ^ hash2).count('1')

接下来遍历每一帧的哈希找到距离最近的两帧即可。遍历过程如果有确定起始或结束帧可以直接遍历,复杂度 \(\mathcal{O}(n)\);如果没有固定起始帧,根据汉明权重(也就是与 \(0\) 的汉明距离)排序后遍历即可,复杂度 \(\mathcal{O}(n\log n)\)。

最后完整代码在github gist

标签:头尾,视频,None,int,图像,哈希,汉明,衔接
From: https://www.cnblogs.com/expector/p/18458134

相关文章

  • 第二十一篇:你知道直播,小区视频点播等是怎么实现的吗?(组播协议)
    你知道直播,小区视频点播等是怎么实现的吗?其实现就是运用了组播!信息从信息源发送给组播成员,肯定不能全网无选择的传播,那不是组播,那就是广播了,路由器不支持广播,却支持组播!为了让信息更快的到达组播成员,需要建立组播路由和组播成员管理。1、组播协议由两部分协议组成1)组成员......
  • CR视频批量剪辑软件短视频去重搬运过豆+去水印批量(免费版)
    在这个短视频盛行的时代,一款功能全面、操作简便的视频编辑工具显得尤为重要。我们很高兴向您介绍这款集成了众多实用功能的视频处理神器,它几乎能满足您所有的视频编辑需求。无论您是专业创作者还是业余爱好者,这款工具都将成为您视频制作过程中的得力助手。让我们一起来详......
  • 思通数科AI视频监控卫士在旅游景区景点的深度应用
    在人工智能技术的推动下,各行各业都在寻求通过AI实现业务的转型与升级。思通数科AI视频卫士,作为一套前沿的AI视频监控解决方案,正成为旅游景区景点安全监控转型过程中的重要助力。人流管理与安全防护景区游客流量大且集中,思通数科AI视频监控卫士可以实时监测人群密集区域,利用人群......
  • 如何替换公司网站的图片和视频
    要替换公司网站上的图片和视频,你可以按照以下步骤操作:备份现有资源:在替换任何内容之前,确保先备份当前网站上的图片和视频文件。这有助于防止意外丢失重要数据。准备新资源:确保新的图片和视频已经准备好,并且符合网站的设计要求和尺寸规范。对于图片,检查分辨率是否足够......
  • 轻松原创!短剧,带货视频AI自动批量混剪工具!
    今天再分享这个批量剪辑神器,非常适合短剧和带货短视频的制作,轻松过原创,提供了从视频分割、合成、混剪到格式转换的多项功能。以下是它的主要功能:视频分割与提取按时长或段数分割按镜头转场变化分割按语音内容自动分割提取无声视频或音频视频合成自动合成文......
  • 轻松原创!短剧,带货视频AI自动批量混剪工具!
    今天再分享这个批量剪辑神器,非常适合短剧和带货短视频的制作,轻松过原创,提供了从视频分割、合成、混剪到格式转换的多项功能。以下是它的主要功能:视频分割与提取按时长或段数分割按镜头转场变化分割按语音内容自动分割提取无声视频或音频视频合成自动合成文......
  • 轻松原创!短剧,带货视频AI自动批量混剪工具!
    今天再分享这个批量剪辑神器,非常适合短剧和带货短视频的制作,轻松过原创,提供了从视频分割、合成、混剪到格式转换的多项功能。以下是它的主要功能:视频分割与提取按时长或段数分割按镜头转场变化分割按语音内容自动分割提取无声视频或音频视频合成自动合成文......
  • 当前仍可用的爬取Youtube视频方法
    importyt_dlpimporthttp.cookiejarimporttimeimportloggingimportosimportrandom#Setuplogginglogging.basicConfig(level=logging.INFO,format='%(asctime)s-%(levelname)s-%(message)s')defload_cookies_from_netscape(cooki......
  • 【视频笔记】408新增知识点信号——里昂视频
    文章目录**2.信号****3.信号的实现**4.信号的处理**①忽略信号****②执行信号的默认操作****③捕获井处理信号**几个Linux支持的典型信号:**5.信号的产生**①**通过终端按键(键盘)产生信号**例如,`Ctrl+C`发送2号信号SIGINT、`Ctrl+\`发送3号信号SIGQUIT②**程序异常时*......
  • 使用ffmpeg修复本地视频文件(mp4)播放时进度条无法拖动的问题
    右击视频文件查看属性,在详细信息页查看视频时长,显示为空,推测进度条无法拖动的原因是时间轴损坏于是采用了以下解决办法将视频分离出来,命名为video.mp4ffmpeg-i视频名称.mp4-map0:v-vcodeccopy-bsf:vh264_mp4toannexbvideo.mp4将音频分离出来,命名为audio.wavffm......