|
本帖最后由 yellowolf 于 20-3-31 11:07 编辑
最近几天逛了github上的tsmuxer项目,看大神如何解决字幕的同步问题。貌似逐渐失同步的根源在于音频/字幕与视频不是等长的,原因之一是不同编码的帧长度不是整数倍关系,之二就令人发指了,有时某段m2ts的音频能比视频多出来几个帧。m2ts文件中各个媒体流处于打包状态,有PTS辅助指示时间,即使出现重叠,播放器也能根据PTS保证多余帧不断地被消除。其实严格地说来,此时音频、字幕并未严格与视频同步,而是可能存在一定的误差(但极小,可能只有一个帧)。但demux完成流数据被解包以后,失去了PTS辅助同步机制,同步位置完全依靠流的帧数决定。如果重复帧(不管是二进制重复还是PTS重复)没有被正确处理,就会导致后面的所有帧被顺移。每多一段m2ts,这个顺移就会被累计,到电影后面就会形成明显的不同步。所以看起来demux保持同步的关键在于音频、字幕的时长要尽量参考视频时长,每段m2ts结尾处要根据累计时间误差舍弃或不舍弃多余的帧。 |
|