我正在使用 MakeMKV 创建我的 BluRay 光盘的数字副本,并创建了一个脚本来对生成的 MKV 文件进行一些处理:
- 重新采样(如果需要,还可以缩小)视频
- 将单个音轨转换为 AAC 和 AC3(对于我想要的每种语言)并丢弃“输入”音轨
- 复制特定语言的所有字幕
- 复制章节标记
我想扩展脚本以在单个 PGS 字幕轨道中刻录。但是,当我添加适当的覆盖过滤器时,字幕中刻录的结果不同步。
通常,该脚本用于mkvextract
提取相关的视频和音频轨道并将ffmpeg
其转换为新轨道。转换后,所有输出轨道都使用合并mkvmerge
。
对于字幕处理,我使用mkvextract
将正确的字幕轨道提取到.sup
文件并将其作为附加输入传递给ffmpeg
:
ffmpeg -i ./title_t00/in/title_t00.mkv.h264 \
-i ./title_t00/in/title_t00.mkv.en.sup \
-codec:v libx264 \
-filter_complex "[0:v][1:s]overlay[v1]; [v1]scale=w=-2:h=480:flags=gauss[v2]"\
-map "[v2]" \
-sws_flags gauss \
-crf 10 \
./title_t00/out/title_t00.mkv.h264
过滤器从第一个输入中获取视频轨道,从第二个输入中获取字幕轨道,然后将两者叠加。这会产生一个新的视频流v1
,该视频流通过scale
过滤器并保存结果。
如前所述,叠加层有效,但字幕不同步。有什么方法可以正确同步它们吗?
或者是否有某种魔法ffmpeg
可以一次完成所有操作?