Ffmpeg 有没有一种方法可以对语言管理的多个音频和子流进行编码

Ffmpeg 有没有一种方法可以对语言管理的多个音频和子流进行编码,ffmpeg,mp4,mkv,Ffmpeg,Mp4,Mkv,所以,我有一个满是.mkv的文件夹,我有一行程序可以将它们全部转换成mp4 这些新文件现在有多个音频和字幕流,一个英文、一个ger、一个jap,对于相同的字幕,是否有一种方法可以方便地指定使用f.e.德语音频和burn-eng字幕。 我的一行: for /R %f IN (*.mkv) DO ffmpeg -i "%f" -c copy "%~nf.mp4" 我将如何修改这一班轮工作。 我发现使用-vf subtitles=foo.ass可以硬编码字幕,

所以,我有一个满是.mkv的文件夹,我有一行程序可以将它们全部转换成mp4 这些新文件现在有多个音频和字幕流,一个英文、一个ger、一个jap,对于相同的字幕,是否有一种方法可以方便地指定使用f.e.德语音频和burn-eng字幕。 我的一行:

for /R %f IN (*.mkv) DO ffmpeg -i "%f" -c copy "%~nf.mp4"
我将如何修改这一班轮工作。 我发现使用-vf subtitles=foo.ass可以硬编码字幕,但是如何从文件中选择一个音频和/或字幕流? 我该如何选择f.e.音频流而非字幕流

我发现了,那是因为

-map 0:V -map 0:a:m:language:ger -map 0:s
我可以得到一个文件,其中只有德语音频文件,但现在我需要同样的字幕,只包括英语的

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

要刻录字幕,必须提供文件名,还可以提供流索引。您可以使用
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
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