ffmpeg 烧录 dvb_subtitle 字幕与声音不同步问题解决办法 时间: 2020-08-14 14:08 分类: JAVA 最近想提取一些港剧`ts`文件里面的`dvb_subtitle`字幕出来,但是发现网上那种`ProjectX`软件提取的方法已经不管用了。 `ProjectX`提取出来的字幕图片字体以及大小不一,并且很明显所有的文字周围都加了额外的`小点像素`,这应该是一种防`OCR`的手段,因此目前大家所看到的的 TVB 港剧字幕大多都是比较模糊的那种。 并且还有个问题是提取出的字幕时间轴是错的,这个问题不难解决,生成`srt`文件后重新调轴就是。无法`OCR`,只能按照图片手工打字校正了。 但是手动校正这个工作真的是太无聊耗时间了,因此还是决定直接将`dvb_subtitle`烧录进视频吧,虽然字幕模糊点算了。 使用`overlay`滤镜烧录完之后发现港剧大多数字幕都有延迟问题,也就是声音比字幕早。 那么问题来了,字幕无法`OCR`成可编辑调轴的字幕文件格式,如何使其与视频同步呢? 最终找到如下解决办法: ``` ffmpeg -i xxx.ts -itsoffset -0.5 -i xxx.ts -filter_complex "movie=logo.png[logo],[0:v][1:s:2]overlay=0:H-h[vv],[vv][logo]overlay=main_w-overlay_w-5:main_h-overlay_h-5:enable='lt(mod(t,1800),30)'" -c:v libx264 -c:a libfdk_aac -af volume=2 -level 4.2 -crf 18 -preset veryfast out.mp4 ``` 说明: 可以看到`xxx.ts`输入了两次,`-itsoffset -0.5`作用是使第二个输入的`xxx.ts`所有流延迟 0.5 秒输入,然后`filter_complex`滤镜中音视频流我们选择第一个输入的`xxx.ts`,而字幕流我们选择第二个输入的`xxx.ts`中的字幕流。 这样一来音视频是正常播放,而字幕就提前了 0.5 秒,这样一来就解决了字幕延迟问题。 同理,字幕超前将`itsoffset`改为正数即可。 标签: 无