gpt4 book ai didi

ffmpeg - 批量合并不同长度的视频和音频

转载 作者:行者123 更新时间:2023-12-04 23:26:43 24 4
gpt4 key购买 nike

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

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

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

抱歉啰嗦了。感谢您的任何帮助和指导。

最佳答案

我假设 A 和 B 同时启动,因此不需要初始同步 channel 。并且具有相同的帧率。 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]overlay=eof_action=pass[v] - A 覆盖在放大后的 B 之上。由于 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 的索引移到其前面,以便在网络流式传输期间,快速开始播放。如果文件不会通过网络流式传输,则可以跳过。

关于ffmpeg - 批量合并不同长度的视频和音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43647629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com