有没有办法对语言管理的多个音频和子流进行编码

Is there a way to encode multiple audio and sub streams managed by language

所以,我有一个装满 .mkv 的文件夹,我有一个可以将它们全部转换为 mp4 的衬垫 这些新文件现在有多个音频和字幕流,一个 eng,一个 ger 一个 jap 和相同的字幕,有没有一种方法可以让我轻松指定使用 f.e。德语音频和刻录 eng 字幕。 我的一条线:

for /R %f IN (*.mkv) DO ffmpeg -i "%f" -c copy "%~nf.mp4"

我要如何修改这个 Liner 才能使其正常工作。 我发现使用 -vf subtitles=foo.ass 我可以对字幕进行硬编码,但是我如何 select 从文件中包含一个音频和/或字幕流? 我会如何 select f.e。音频流但 none 字幕流

我发现,

-map 0:V -map 0:a:m:language:ger -map 0:s

我可以获得一个只有德语音频文件的文件,但现在我需要同样的字幕,只包含英语的

I can get a file with which only has the german audio files, but now i need the same for the subtitles, to only include the english ones

ffmpeg -i input.mkv -map 0:v -map 0:a:m:language:ger -map 0:s:m:language:eng -c copy output.mkv

要刻录字幕,您必须提供文件名,以及可选的流索引。您可以使用ffprobe来确定所需字幕语言的字幕索引:

ffprobe -v error -select_streams s -show_entries tags=language -of default=nw=1:nk=1 input.mkv

示例输出:

ger
eng

所以 ger 是索引 #0 而 eng 是索引 #1。

最终 ffmpeg 命令:

ffmpeg -i input.mkv -filter_complex "subtitles=f=input.mkv:si=1[v]" -map "[v]" -map 0:a:m:language:ger -c:a copy -movflags +faststart output.mp4