如何用ffmpeg批量复用音频和视频轨道文件

如何用ffmpeg批量复用音频和视频轨道文件

我想大家都知道从 Youtube 下载 480p 和 1080p 视频的问题,并且许多下载程序可用的唯一方法是分别下载视频和音轨,然后将它们混合到一个容器中。

有一个 ffmpeg 代码可以将 .m4a 和 .m4v 轨道逐个复用到一个 .mp4 容器中

这是代码:

ffmpeg -i "file name.m4v" -i "file name.m4a" -acodec copy -vcodec copy "file name.mp4"

但是如何批量复用许多 .m4a 和 .m4v 文件?

提前致谢...

答案1

使用 for 循环。此示例是 forbash并使用bash变量操作,但它可以适用于其他 unix/linux 类型的 shell。

笔记:这假设您是包含文件的目录,并且视频和音频文件具有相同的名称,仅扩展名不同(.m4v - 视频,.m4a - 音频)。

for v in *.m4v; do ffmpeg -i "${v}" -i "${v//.m4v/.m4a}" -acodec copy -vcodec copy "${v//.m4v/.mp4}"; done

解释

for v in *.m4v对每个以“.m4v”结尾的文件执行以下操作。v是一个变量名,将通过 一次一个地分配给当前目录中的每个视频文件bashbash将自动将 转换*.m4v为当前目录中的 .m4v 文件列表并将它们输入到 for 循环中。 您无需手动输入文件名。

变量v在每次循环迭代中保存不同的视频文件名,例如"video_file_1.m4v",然后"video_file_2.m4v"等等。${v//pattern/replacement}指示bash查找出现的pattern并将它们替换为replacement。例如,${v//.m4v/.mp4}将文件名转换"video_file_1.m4v""video_file_1.mp4"

相关内容