我有一个 mkv 文件,想用 将其转换为 DVD 兼容的 mpg 文件avconv
。我怎样才能从同一个 mkv 文件中刻录一个字幕流?
avconv -i input.mkv -map 0:0 -map 0:1 -target pal-dvd -aspect 16:9 -q:v 1 -acodec mp2 -ac 2 -ab 128k output.mpg
答案1
基于文本的字幕
ffmpeg 有一个subtitles
筛选可以将 SRT 文件刻录到视频流中。--enable-libass
不过你需要编译 ffmpeg。我不认为 Libav 有类似的东西,至少看过可用过滤器。
您首先需要提取字幕。-map 0:s:0
选择第一个字幕流作为输出,并-c:s:0
为其选择编解码器 - 以确保它真的是 SRT。
ffmpeg -i input.mkv -an -vn -map 0:s:0 -c:s:0 srt subtitles.srt
然后,把它们烧掉。
ffmpeg -i input.mkv -map 0:0 -map 0:1 -target pal-dvd -aspect 16:9 -q:v 1 \
-c:a mp2 -ac 2 -b:a 128k -filter:v subtitles=subtitles.srt output.mpg
笔记:
上述命令假设输入中的流
0:0
和0:1
分别是视频和音频流。如果您只想阻止字幕包含在输出文件中,那么您也可以添加-sn
以完全禁用它们。您必须更改
-ab
为-b:a
,因为前者对于 ffmpeg 来说是一个不存在的选项。
基于图像的字幕
如果您的输入有基于图像的字幕,如 HDMV PG(似乎 MakeMKV 正在创建这些字幕,而其他工具无法提取它们),您可以尝试使用覆盖过滤器将它们刻录进去:
ffmpeg -i input.mkv -filter_complex "[0:v][0:s]overlay[v]" -map [v] -map 0:a \
-target pal-dvd -aspect 16:9 -q:v 1 -c:a mp2 -ac 2 -b:a 128k output.mpg
这也解释了在 FFmpeg Wiki 上。
如果你的字幕与原始电影的尺寸不同(例如,因为视频流缩小了,但字幕没有缩小),你可以尝试使用选项-canvas_size
设置尺寸。