我有几个 MKV 文件的文件夹。每个文件夹包含带有英文音轨和良好视频质量的系列剧集,同一集带有波斯语配音音轨(也是英文),但视频轨道质量很差。我想使用批处理文件从同一目录中的“series S01E01 eng.mkv”等文件中获取视频和英文音轨,从“series S01E01 Far.mkv”中获取波斯语音轨,并将波斯语音轨设置为默认音轨,并创建“series S01E01 DUB.mkv”,然后创建下一集直至结束。
不幸的是,我找不到一个程序或批处理文件来为所有剧集完成这项工作,手动处理超过 houndred 文件需要几个小时。我该怎么办?任何可以执行此操作或批处理的程序都会非常有帮助。谢谢
答案1
您可以使用 ffmpeg 通过几个步骤完成此操作。
- 用于
ffmpeg -i filename.mkv
列出文件信息 - 从输出中,您将看到列出的包含的流,记下您想要的流的编号,我们希望所需的流在所有文件中的编号相同,请检查几个。否则,编写该过程的脚本将不会简单。
- 假设你需要提取流 0 和流 2,其中 0 是视频,2 是所需音频,然后
ffmpeg -i filename.mkv -c copy -map 0:0 filename.mp4
&ffmpeg -i filename.mkv -c copy -map 0:2 filename.m4a
- 然后您可以将这些分离的流写入新文件
ffmpeg -i filename.mp4 -i filename.m4a -c:v copy -c:a copy filename.new.mkv
- 将所有想要的视频和音频文件复制到一个新目录,然后只要它们的名称相同(扩展名不同),您就可以将它们合并回您想要的文件中。
显然您想自动执行此操作,在 Windows 的批处理文件中,您可以使用 %% 作为替换,这应该是合并,从命令行仅使用一个 % 进行替换。
for %%a in ("*.mp4") do ffmpeg -i "%%~na.mp4" -i "%%~na.m4a" -c:v copy -c:a copy "%%~na.new.mkv"
如果你确定每个文件中的流都是相同的,那么你可以使用类似的替换来编写单独的视频和音频文件。注意:如果你想用该行编写批处理文件,则只有一个 % 使用 %%
for %a in ("*.mkv") do ffmpeg -i "%~na.mkv" -map 0:2 -c copy "%~na.m4a"
&for %a in ("*.mkv") do ffmpeg -i "%~na.mkv" -map 0:0 -c copy "%~na.mp4"