这儿牛人多啊,来问一下 |
|
顶
0 |
|
|
2楼 为什么ffmpeg用-ss和-t参数来截视频片段,然后封装为mp4格式,出现音画不同步的问题? ----------------------------------------------- 因为ffmpeg是分别截取video和audio的,video因为关键帧的缘故精确度受限较大,audio则能切割得精确得多,所以造成了这样的情况 |
|
|
3楼 其实我想说的是,不用其他工具,只用ffmpeg能做吗?ffmpeg很多参数的吧,而且这问题只在mp4封装上出现,mkv上就第1帧是静止1段时间等待音频而后就同步的,我想让mp4也能像mkv那样的做法,参数复杂点也行,最重要的是我只能用命令行的ffmpeg |
|
|
4楼 楼上说的办法很好,我以前也考虑过,这样不用让播放器或容器去支持什么audio delay, video delay之类的东西。不过这个需要改ffmpeg代码,官方应该不会采用这种东西,所以只能自己写自己编译了。 |
|
|
5楼 其实不需改动ffmpeg的代码吧 经过我的不断查找,终于发现了一个参数可以做到音画的同步,就是类似于mkv封装的做法,开始时暂停一会儿等待关键帧再音画同步播放的做法,当然这不太完美,但总算是做到了,就是-copyinkf参数(copy initial non-keyframes),就加上这个参数就可以了,很简单 |
|
|
7楼 这会出现什么问题呢?难道会花屏吗?我不知道怎样可以压个只有初始帧是IDR的视频,我真的不熟悉这些视频技术的名词。。。 不过这参数倒也是有一点问题的,当-ss参数放在-i输入文件之前(因为这样不用等待视频寻道),-copyinkf就失效了,一样不同步 |
|
|
8楼 ffmpeg -i "%~1" -vcodec libx264 -x264opts keyint=infinite:scenecut=0 -acodec copy -y "%~dpn1_.mp4" |
|
|
9楼 我现在压制了一个第一帧是IDR的视频来测试,但截取再二次转换过后播放没发现有什么问题,截取的时间和秒数都很正确,也没什么花屏或不同步之类的问题 现在我知道你说的意思了(不知道是否准确),这个IDR帧后面的帧都是要依据其参考的,这种视频要拖动时间是很慢的,因为要从IDR帧到指定时间的所有帧都要重新处理,我觉得你说的问题就是第二次编码后加copyinkf后即使加ss参数也会总是从IDR帧开始播放,而不是从指定时间开始播放... 但我测试后,这样的问题并没有发生,除了编码时慢一些外(因为要重新处理IDR帧到指定时间的帧),其他都很好,没任何问题 |
|
|
10楼 参数意思只是先这样编码出那样一个视频而已 |
|
|