记一次奇怪的音画不同步问题(ts转mp4)

一、缘起

最近在网上下载了一个 ts 格式的视频文件,使用播放器播放没有任何问题,传到 bilibili 后出现音画不同步的现象,具体表现为声音比画面快几秒。起初以为是 ts 格式的问题,于是决定转码试一下。然而问题并没有我想得那么简单...

二、使用ShanaEncoder 转码

使用 ShanaEncoder 将文件转为 mp4 后,用播放器播放没有问题,传到B站后发现刚开始播放的时候是正常的,播放一分钟后就出现音画不同步的现象,暂停或拖动进度条后恢复正常。这实在是有点让人摸不着头脑。无奈之下,决定用火狐浏览器(之前一直是用chrome浏览器)试一下,发现居然播放正常!难道是浏览器的问题?

三、尝试关闭硬件加速

用 google 搜索了一番,果然有人反应 chrome 音画不同步的问题。有人说关闭浏览器的硬件加速可以解决问题。可我试了之后发现依然不行。期间我也试过播放其它视频,一切正常,说明不是浏览器的问题。

为了找到问题,我又多次调整次编码参数,并传到B站测试效果,问题依旧(后来发现直接把视频拖到浏览器就可以测试了,不用上传)。

四、使用 handbreke 转码

多番折腾无果。决定试用 handbreke 试一下,这是一款开源的转码工具,多年之前我曾用它解决过音画不同步的问题,或许这一次也能解决。果然,用 handbreke 转码后播放正常,用 mediaInfo查看文件信息,发现总时长减少了5秒左右。于是明白了问题出在时间戳上。问题看似解决了,但我并不想止步于此。handbreke 虽然好用,但它的效率没有 ShanaEncoder 高,参数也没后者丰富。所以我还是要搞懂 handbreke 是怎么解决音画不同步的问题的。

五、问题解决

于是开始用 ffmpeg 时间戳 为关键词在 google 进行搜索,多方查找之后终于在一篇文章中找到了答案:

视频处理遇到的一些问题记一次奇怪的音画不同步问题(ts转mp4)http://vicviz.com/h5-video-bo-fang-mp4yin-hua-bu-tong-bu/文中有一句关键的话:

在 ffmpeg 添加 -async 1 参数

抱着试试看的态度在 ShanaEncoder 中加入了这个参数。果然,问题解决!但与我想象中不同,总时长并未改变,看来handbreke 还做了一些其它操作,让时间也减少了。不过,这些都不重要了!

至此,困扰我两天的问题终于解决了!感谢前辈们留下的宝贵经验!

关于 async 参数的含义请查看这篇文章:Easily fix async video with ffmpeg | Lzone Blog

附:

音画不同步的视频链接:阿里云盘分享

有人想研究的话可以拿去研究。

上一篇:Python 编程高手之路 深度之眼


下一篇:webdriver +浏览器驱动