我找到了这个帖子: Handbrake 设置可将 MKV 转换为 MP4,同时保留原始质量
我可以使用以下代码将 .MKV“转换”为 .MP4:
for %%a in ("*.mkv") do D:\Programme\Converter\ffmpeg\bin\ffmpeg.exe -i "%%a" -c:v copy -c:a copy "%%~na .mp4"
pause
唯一的问题是,有 2 个音频通道。德语和英语。使用上面的代码,它只复制德语(第一种)语言。但不复制第二种音频语言。我该怎么做?
目前我只能将 .MKV 转换为德语版的 .MP4。但我希望能够将 VLC 播放器的语言从德语切换为英语。
感谢您的帮助!
编辑: 我在这里找到了该帖子: http://ffmpeg.gusari.org/viewtopic.php?f=25&t=611
我根据这些信息进行了测试。我将上面的代码更改为以下代码:
for %%a in ("*.mkv") do D:\Programme\Converter\ffmpeg\bin\ffmpeg.exe -i "%%a" -map 0:0 -map 0:1 -map 0:2 -c:v copy -c:a:0 copy -c:a:1 copy "%%~na.mp4"
pause
我这里做错了什么吗?我怎么才能添加德语/英语字幕呢?如果我在那里添加字幕映射,而我的 .MKV 根本没有字幕,这会是个问题吗?我只想创建一个 .bat 文件,将 .MKV 转换为 2 个音轨和 2 个字幕。这样我就可以“重新混合”(或转换未知)我的所有 .MKV 文件到 .MP4 而不会丢失任何信息。
目前,我的 .MKV 没有字幕,所以这并不重要。但最好为将来做好准备,对吧?
所以请告诉我我是否做对了,也许还可以告诉我如何添加字幕。这是我第一次使用 FFmpeg。刚刚下载了它,从未听说过它。从来没有真正使用过 CMD 来实现它。
答案1
ffmpeg 不会自动映射所有轨道;默认流选择只会将一个音频、一个视频和一个字幕轨道映射到输出。如果您想要地图所有流,使用-map 0
。如果你想能够选择什么要进行映射,您必须先解析输入文件(ffmpeg -i input.mkv
)并使用一些脚本来构建最终的转换命令。ffprobe 对此很有帮助。请参阅FFmpeg Wiki:FFprobe 技巧举些例子。
您可以-c copy
指定流复制所有流,无论其类型如何。您还可以分别索引视频和音频流,因此您的命令可以缩短为:
ffmpeg -i input.mkv -c copy -map 0 output.mp4
答案2
有一个名为VCT的开源程序: https://sourceforge.net/projects/videoconvertertranscoder/?source=directory
这是 ffmpeg 的 GUI。您也可以手动编辑 ffmpeg 命令。它有一个名为的选项卡转码您可以在其中将 MKV 重新打包为 MP4,但此选项卡没有添加字幕的选项。
如果您想将 MKV 重新打包为 MP4 并同时添加字幕,请按以下步骤操作:
- 去转变选项卡并选择您的输入文件
- 在视频容器选择复制以及音频编解码器也可以选择复制
- 点击添加字幕并选择您的外部 SRT 文件
- 在ffmpeg命令文本框中替换字幕部分-c:s srt“”和-c:s mov_文本“”
- 点击添加至批次列表然后点击开始 编码将在一两分钟内完成。
当然,如果你不介意编码两次,而且不喜欢输入命令,你也可以这样做:
- 选择标签转码并将文件拖到输入文件.., 点击开始,一分钟之内就搞定。
- 然后选择新编码的 MP4 并视频容器选择复制以及音频编解码器点击复制。
- 点击添加至批次列表然后点击开始。编码将在一分钟内完成。
答案3
好吧,我正在使用这样的 .bat 文件:
for %%a in ("*.mkv") do D:\Programme\Converter\ffmpeg\bin\ffmpeg.exe -i "%%a" -c:v copy -c:a copy "%%~na.mp4"
但我收到了一条错误消息,但 .MP4 仍然正常工作。这里有一个日志文件:pastie.org/private/9lqyvhyotnh1o4gp6rg5g
问题是,我的旧索尼电视在观看 .MP4 时有时会卡住,我无法告诉您这只是电视上的“播放器”还是转换后的文件本身的问题。GUI 看起来不错。但是,如果您想连续转换 20 个文件,则需要单击很多次。.bat 文件会自动执行此操作,并将所有这些文件放在一个文件夹中。
也许有人知道为什么我会收到错误消息,以及这个脚本是否有错:)