我想大家都知道从 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
是一个变量名,将通过 一次一个地分配给当前目录中的每个视频文件bash
。bash
将自动将 转换*.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"
。