将不同长度的视频和音频合并为批量

问题描述:

我现在正在浏览电视剧并编辑文件以符合我的喜好。我有一套有我想要的视频,一套有音频。我有一个批处理文件,可以从文件夹“A”中的每个文件获取视频,并从文件夹“B”中的每个文件获取音频,并将其输出到名为“output”的文件夹。但是对于这个特定的系列,这只是我需要完成的一半。将不同长度的视频和音频合并为批量

在文件的每个情节中的“B”文件夹中的结束还有一些额外的东西。我想要做的是从“A”获取音频和视频,从“B”获取音频,将它们合并成一个文件,然后拿“A”和“B”文件,比较时间戳,并添加从“B”到输出文件的额外视频。

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

对不起,长时间啰嗦。感谢您的帮助和指导。

+0

如果您准备好转码,可以完成此操作。如果是这样,我会发布一条命令。 – Mulvya

+0

我没有任何问题转码。这两个文件夹都有mkv格式的视频。很确定他们都是X264。我现在不在家里仔细检查。 – user2981223

+0

Mulvya,我只是想知道你是否可以发布命令?注释会很棒。无论哪种方式,我都很擅长编写代码并弄清楚它的功能。谢谢! – user2981223

我假定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 

-i A.mp4 -i B.mp4 - 第一,我们提供两个输入的ffmpeg。

-filter_complex - 如果我们希望有选择地将过滤器应用于多个输入或以某种相互依赖的方式处理它们,则通过-filter_complex设置过滤器图。将其整个论证用引号括起来是最安全的。

[1][0]scale2ref[b][a] - 所述scale2ref滤波器缩放B视频是大小为A的视频,这是参考相同。然后将这两个输出传递给覆盖过滤器。由于B现在与A的尺寸相同,所以A完全覆盖了基本视频B.当A终止时,B显示出通过;添加eof_action以执行此操作 - 默认行为是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的索引移动到其前端,以便在网络流媒体播放过程中快速播放。如果文件不能通过网络流式传输,可以跳过。

+0

非常感谢!我会在稍后尝试。我很感激! – user2981223

+0

您能否澄清地图代码的作用以及每个命令的用途?我几乎不熟悉你使用的所有代码,所以你愿意给我更多的细节。 – user2981223

+0

你是绝对惊人的 – user2981223