使用 avconv 烧入字幕?

use*_*811 4 ffmpeg video-conversion libav

我有一个 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

slh*_*hck 5

基于文本的字幕

ffmpeg 有一个subtitles过滤器,可以将 SRT 文件刻录到视频流中。你需要编译 ffmpeg --enable-libass。我不认为 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
Run Code Online (Sandbox Code Playgroud)

然后,将它们烧掉。

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
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 上面的命令假设流0:00: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
Run Code Online (Sandbox Code Playgroud)

这也在FFmpeg Wiki 上进行了解释。

如果您的字幕与原始电影的尺寸不同(例如因为视频流被缩小但字幕没有),您可以尝试使用-canvas_size选项来设置大小。