Ffmpeg 大量组合不同长度的视频和音频

Ffmpeg 大量组合不同长度的视频和音频,ffmpeg,Ffmpeg,我现在正在看一部电视连续剧,并根据自己的喜好编辑文件。我有一套有我想要的视频,还有一套有音频。我有一个可以运行的批处理文件,它从文件夹“a”中的每个文件获取视频,从文件夹“B”中的每个文件获取音频,并将其输出到名为“output”的文件夹。但对于这个特定的系列,这只是我需要完成的工作的一半 在“B”文件夹中每一集文件的结尾都有一些额外的内容。我想做的是从“A”和“B”中获取音频和视频,将它们合并到一个文件中,同时获取“A”和“B”文件,比较时间戳,并将“B”中的额外视频添加到输出文件中 让我换一

我现在正在看一部电视连续剧,并根据自己的喜好编辑文件。我有一套有我想要的视频,还有一套有音频。我有一个可以运行的批处理文件,它从文件夹“a”中的每个文件获取视频,从文件夹“B”中的每个文件获取音频,并将其输出到名为“output”的文件夹。但对于这个特定的系列,这只是我需要完成的工作的一半

在“B”文件夹中每一集文件的结尾都有一些额外的内容。我想做的是从“A”和“B”中获取音频和视频,将它们合并到一个文件中,同时获取“A”和“B”文件,比较时间戳,并将“B”中的额外视频添加到输出文件中

让我换一种说法。假设“A”是1080p,带有日语音频,长度为20分钟。假设“B”是720p,带英语音频,长23分钟。我想要整个1080p视频,两个音轨,加上720p视频拼接到末端。两个文件都从同一个位置开始,因此同步不是问题。问题是每一集的时间差都是不同的。所以有些剧集长3分钟,有些只有30秒。有没有办法让ffmpeg或其他工具查看时间上的差异,并将多余的内容添加到输出文件中


对不起,说得太多了。感谢您的帮助和指导。

我假设A和B同时启动,因此不需要初始同步过程。并且具有相同的帧率。A具有所需的视频1080p,B在末尾具有音频+附加功能

ffmpeg -i A.mp4 -i B.mp4
  -filter_complex
      "[1][0]scale2ref[b][a];[b][a]overlay=eof_action=pass[v]"
  -map "[v]" -map 0:a -map 1:a -crf 18 -c:a copy -movflags +faststart out.mp4
-ia.mp4-ib.mp4
-首先,我们向ffmpeg提供两个输入

-filter\u complex
-如果我们希望有选择地将过滤器应用于多个输入或以某种相互依赖的方式处理它们,则通过
-filter\u complex
设置一个filtergraph。最安全的做法是将其全部论点用引号括起来

[1][0]scale2ref[b][a]
-scale2ref过滤器将b视频缩放为与a视频相同的大小,a视频是参考。然后,这两个输出都被传递到覆盖过滤器

[b][a]overlay=eof_action=pass[v]
-a覆盖在放大的b上。由于b现在与a大小相同,a完全覆盖了基本视频b。当a终止时,b显示通过;添加eof_操作以强制执行此操作-默认行为是重复A的最后一帧,直到B结束。此筛选器的输出标记为
[v]

-map“[v]”-map 0:a-map 1:a
-ffmpeg必须明确告知要在输出中包括哪些流,否则它将自动选择它们。这在这种情况下是不合适的。叠加结果包括在内,两个音轨也包括在内

-c:v libx264
-因为我们输出到MP4,默认编码器是libx264,所以这里没有指定它,但了解它可能对将来的使用很有用

-crf 18
-建议的libx264编码模式为crf。较小的值可以更好地保持源质量,但会生成较大的文件。18到28是一个很好的范围

-c:a copy
-映射的音频流被复制,即无需重新压缩


-movflags+faststart
-处理完成后,ffmpeg会将生成的MP4的索引移动到其前端,以便在web流媒体播放期间快速开始播放。如果文件无法通过网络传输,则可以跳过此操作。

如果您准备好进行转码,则可以完成此操作。如果是这样的话,我会发布一个命令。我对转码没有问题。两个文件夹都有mkv格式的视频。很确定它们都是x264。我现在不在家仔细检查。穆尔维亚,我只是想知道你是否可以发布命令?有了注解就太棒了。不管是哪种方式,我都很乐意接受代码并弄清楚它的功能。谢谢B的720部分必须升级到1080p,好吗?我没问题!非常感谢!我稍后会试试这个。我很感激!你能解释一下地图代码的作用和每个命令的用途吗?我对你使用的所有代码都不熟悉,所以你愿意给我的细节越多越好。你真是太棒了