我正在编写一个程序,需要能够将一个非常短的媒体文件放在一个较长的媒体文件的中间。我想为此使用 ffmpeg。我知道您可以将长文件分成两半,然后将这 3 个文件连接在一起(长视频的前半部分 > 短视频 > 长视频的后半部分)。我尝试使用 concat 过滤器执行此操作,但这需要很长时间,因为我们托管的 kubernetes 提供商没有 GPU 资源选项。
我意识到,由于第一个和最后一个剪辑的格式始终完全相同(因为它们是从同一个源文件拆分而来的),我只需转换中间非常短的剪辑即可匹配两个部分。然后,所有 3 个剪辑都将采用该格式,我只需使用 concat 重新合并器即可。
短片也是由 ffmpeg 通过在音频片段上反复循环播放同一个单帧而生成的。因此,如果我的想法可行,ffmpeg 只需对音频和单个循环帧进行转码。这比从头开始对整个长片和短片进行转码要好得多。
我怎样才能让 ffmpeg 重新编码一个视频来匹配另一个确切地所以我可以将它们合并在一起吗?
答案1
正如@Rotem 在评论中所说,您可以使用ffprobe
适当的脚本分析原始视频的属性,但这(可能)还不够。
如果不转码整个视频流,就无法在任意时间戳正确剪切视频流(至少使用 ffmpeg 是不可能的),您只能在关键帧边界上执行此操作。因此,您还必须分析关键帧的位置并根据该位置选择剪切时间戳(有关详细信息,请参阅此主题:如何使用 FFmpeg 获取给定时间戳之前最近关键帧的时间戳?)