我想知道如何使用 ffmpeg 将带有多个字幕和音轨的 mkv 文件转换为 mp4,其中一个字幕轨道是硬编码的,而一个音轨是选定的?它应该是一个命令,而不需要从原始 mkv 中提取轨道(如果可能的话)。
我到目前为止尝试过的是:
ffmpeg -i File.mkv -map 0:s:1 -map 0:v -map 0:a:1 -c:a aac -c:v copy output.mp4
但是字幕没有被硬编码到文件中,只是被多路复用到 mp4 容器中,如果可能的话(也许文件最终以 mp4 扩展名结尾,但它仍然是 mkv)。
ffmpeg -i File.mkv
Input #0, matroska,webm, from 'File.mkv':
Metadata:
encoder : libebml v1.2.1 + libmatroska v1.1.1
creation_time : 2018-08-11T22:02:55.000000Z
Duration: 00:24:57.22, start: 0.000000, bitrate: 2271 kb/s
Stream #0:0: Video: h264 (High), yuv420p(progressive), 640x480 [SAR 1:1 DAR 4:3], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Metadata:
title : A Day in Ichinoseki
Stream #0:1(eng): Audio: aac (LC), 48000 Hz, 5.1, fltp (default)
Metadata:
title : English
Stream #0:2(jpn): Audio: aac (LC), 48000 Hz, stereo, fltp
Metadata:
title : Japanese
Stream #0:3(eng): Subtitle: ass (default)
Metadata:
title : English (Translation Only)
Stream #0:4(eng): Subtitle: ass
Metadata:
title : English
Stream #0:5: Attachment: ttf
Metadata:
filename : OpenSans-Semibold_0.ttf
mimetype : application/x-truetype-font
At least one output file must be specified
附言:我曾经知道一个命令,它可以给我一个 mkv 流的简单摘要,可以与 ffmpeg 命令逐字使用,但我忘记了它。
答案1
要使用 mkv 作为源嵌入字幕,请使用:
ffmpeg -i video.mkv -vf subtitles=video.mkv:si=1 out.mp4
将 id 替换si=1
为您要硬编码的字幕流编号。您可以使用 进行检查ffprobe
。