我有一个 MKV 格式的视频文件。我喜欢这个视频的质量,但我不喜欢 FLAC 格式的音频,因为我觉得它占用了太多空间。
它是一个双音频文件——一部带有日语和英语音频的动漫——并且里面还有几个字幕流。
这是我使用的命令:
ffmpeg -i "01.mkv" -c:v copy -c:a ac3 -c:s copy "test.mkv"
但是它只获取第一个音频和第一个字幕字符串。我需要有关多个流的映射选项的帮助。
答案1
答案2
我相信您需要指定音频和字幕流的映射以确保全部复制其中的一部分,而不是第一个。为此,您需要-map 0:a? -map 0:s? -map 0:v
在-c:v
这应该使你的命令
ffmpeg -i "01.mkv" -map 0:a? -map 0:s? -map 0:v -c:v copy -c:a ac3 -c:s copy "test.mkv"
map 命令用于告诉它您确实希望将那些内容拉到输出。-map 0:a:1
将指定仅复制音频流编号 1,同时-map 0:a?
应该有效地对其进行通配符处理并复制它们全部。
答案3
只需使用“-map 0 -scodec copy”,而不必使用所有这些选项手动指定 [v]ideo、[a]udio 和 [s]ubtitles。对我来说很管用。
来自文档:
例如,将第一个输入文件中的所有流映射到输出
ffmpeg -i INPUT -map 0 输出
我用来将 H.265 视频转换为 H.264(保留音频和字幕)的命令是:
ffmpeg -i 源.mkv -vcodec h264 -acodec 复制 -scodec 复制 -map 0 输出.mkv
尝试一下!
答案4
代码
ffmpeg -i "01.mkv" -map 0:a? -map 0:s? -map 0:v -c:v copy -c:a ac3 -c:s copy "test.mkv"
只在我只有一个源时才有效!如果我的视频在一个文件“01.mkv”中,音频在另一个文件“02.ac3”中,2 个字幕在另一个文件“subs.mkv”中,我需要做类似的事情
ffmpeg -i "01.mkv" -i "02.ac3" -i "subs.mkv" -i "subs.mkv" -map 0:v -map 1:a -map 2:s:0 -map 3:s:1 -c:v copy -c:a copy -c:s copy "test.mkv"
否则文件会损坏。请注意,“subs.mkv”被故意列为输入 2 次,因为列出 1 次然后使用
-map 2:s:0 -map 2:s:1
损坏文件!