我有一堆内容各异的 .mkv 文件,所以我不知道它们的音频、字幕、章节和附件内容。共同点:它们都有一个视频轨道。
我想批量替换视频轨道仅有的用重新编码的版本,保持文件的其余部分(包括音频、字幕、章节和附件)完好无损。最简单的方法是什么?之前的问题总是对文件的其他内容做出假设,因此并不适用 - 此外,需要批处理模式。
如果其中一种更适合这项工作,那么可以使用 x264、ffmpeg 或 avconv。
答案1
单个示例
用于ffmpeg
重新编码视频流并流复制其他一切:
ffmpeg -i original.mkv -map 0 -c copy -c:v libx264 output.mkv
查看各种编码指南了解您想要的任何格式的信息。
来自第一个输入的所有流(标记为
0
且在本例中为唯一输入)都映射为-map 0
。否则默认流选择每种类型仅映射一个流。例如,如果您的输入有多个音频流,则使用-map 0
将映射所有流,而不是仅映射一个。
猛击for 循环“
对当前目录中的所有 MKV 文件执行与上述相同的操作,并将其输出到名为的目录中outputdir
:
mkdir outputdir
for i in *.mkv; do ffmpeg -i "$i" -map 0 -c copy -c:v libx264 outputdir/"${i%.mkv}.mkv"; done
- 奇怪的
"${i%.mkv}.mkv"
是使用参数扩展。对于您来说,您可以简单地使用"$i"
,但如果您的输入容器格式与输出容器格式不同,则它很有用。例如,如果没有参数扩展,并且您的输入是 MKV 而输出是 MP4,那么输出最终将被命名为output.mkv.mp4
。