使用 ffmpeg 调整 PGS 字幕的大小/更改宽高比

使用 ffmpeg 调整 PGS 字幕的大小/更改宽高比

我有一些已重新编码的蓝光片段。它们被加了黑框,所以现在的分辨率为 1920x816、1920x804 等。这导致了字幕的一些问题。

在某些视频播放器(尤其是 VLC)中,字幕看起来比应有的位置更挤且更高,而我宁愿它们不是这样。我看这是因为基于图片的 PGS 字幕是为 1920x1080(16:9)分辨率的视频编码的,而不是 1920x816(2.35:1)分辨率的,因此应用程序会将它们的大小调整为视频的分辨率,从而导致外观扭曲。

我注意到 ffmpeg 中有一个用于字幕的 -canvas_size 选项,我认为它可能会解决我的问题,但使用后似乎没有效果。使用的命令:

ffmpeg -canvas_size 1920x816 -i 输入.mks -c:s 复制输出.sup

答案1

您还需要重新编码字幕才能使该canvas-size选项生效:

ffmpeg -canvas_size 1920x816 -fix_sub_duration -i in.mkv \
    -map 0
    -vf crop=1920:816:0:128,scale=1280:-2 \
    -c:s dvdsub \
    -c:a ac3 \
    -c:v libx264 -preset medium -crf 20 -profile:v main -level 4.1 \
    out.mkv

该选项-fix_sub_duration对于某些字幕编解码器是必需的,尤其是 DVB 字幕,因为原始数据包中的持续时间只是粗略估计,并且结束实际上是由空字幕帧标记的。

此选项通过等待同一流中的下一个数据包并调整第一个数据包的持续时间以避免重叠来工作。如果在必要时未能使用此选项,则可能由于非单调时间戳而导致持续时间过长和多路复用失败。

此选项的副作用是它会延迟所有流的输出,直到下一个字幕包被解码,这可能会大大增加内存消耗和延迟。

相关内容