最近在使用FFMPEG如下命令解码MP4时发现比较奇怪的现象:解码264码流打包的MP4出现最前两帧是一样的,解码后的yuv比编码yuv多一帧;解码265码流打包的MP4出现解码后的yuv比编码yuv少一帧的问题(具体哪一帧不确定)。
ffmpeg.exe -i name.mp4 name_dec.yuv
经过查找资料和尝试,在我的使用中,针对264和265打包的MP4分别使用如下方法可解决该问题。
-
针对264打包的MP4加上-vsync passthrough可避免多帧的问题。
ffmpeg.exe -i name.mp4 -vsync passthrough name_dec.yuv
-
针对265打包的MP4需要先从MP4中抽取265裸流,然后解码265裸流可避免多帧的问题。当然264也可以这样处理,但是在解码264打包的MP4时上面的方法要更简单一些。
ffmpeg -i name.mp4 -vcodec copy -bsf hevc_mp4toannexb name.h265 ffmpeg -i name.h265 name_dec.yuv
以上是我的解决办法,经过测试发现解码得到的yuv帧数与编码时输入的yuv帧数、画面都是一致的。如果仍然不能解决你遇到的问题,欢迎留言探讨。