2010-09-27 70 views
0

我遇到的问题是使用ffmpeg编码使用libx264的YUV我没有在-vstats输出中获取所有帧信息。它提出了ffmpeg的可靠性问题,因此可以信任基于ffmpeg的任何'编解码器基准'评论?ffmpeg vstats问题,遗漏框架和误导性信息!

我正在分析编解码器以确定它们的性能。我使用ffmpeg及其-vstats选项逐帧查看编码的电影。该方法使用:

RAW YUV - >条形码每个帧与帧号 - >条形码YUV

条形码YUV - >编码的(例如,用libx264) - > MKV - >解码,以YUV

我可以使用每个帧中的条码来比较​​两个输出('条码YUV'&'解码为YUV')。然后,我可以使用PSNR等比较原始帧和编码帧。

使用libx264和libdirac进行编码时,会丢失一些帧信息。其他编解码器,如mpeg2video甚至libvpx,都没有这个问题。

我发现前40到50帧缺少libx264 vstats。从那以后,我证明了缺失的信息实际上是最后的40到50帧。

它看起来像ffmpeg基于vstats中的信息计算平均比特率。但是,由于缺少帧,平均比特率比应该低。

下面是链接到平均比特率错误例如:

http://dl.dropbox.com/u/6743276/ffmpeg_probs/ffmpeg_av_bitrate_error.png

http://dl.dropbox.com/u/6743276/ffmpeg_probs/ffmpeg_av_bitrate_error.xlsx

下面是对PSNR链路& f_size图表:

http://dl.dropbox.com/u/6743276/ffmpeg_probs/frame_mismatch.png

下面是链接到输出&命令行选项:

http://dl.dropbox.com/u/6743276/ffmpeg_probs/stderr.txt

我想这也是一个bug,任何人都足够聪明去解决问题可能要遵循这个跟踪器: http://roundup.ffmpeg.org/issue2248

回答

0

我刚刚发现了一些令我非常红的脸!相当恼火,但没关系:)

一个ffmpeg用户指出,ffprobe应该输出更多的帧信息,它做了。这里是一个链接到他的窍门儿:

http://forums.creativecow.net/thread/291/71

利用这一点,我发现:

实际平均比特率(ffprobe数据):8355.2776056338
实际平均比特率(ffmpeg的vstats数据):8406.23275471698
Ffmpeg -vstats avg_br:7816。3
转载上述内容:7816.32168421053
ffmpeg的标准错误输出 '比特率=':8365.8

下面是我的工作方式的链接了:

http://dl.dropbox.com/u/6743276/ffmpeg_probs/ffprobe_vs_ffmpeg-vstats.xlsx

我发现是我应该已经使用ffmpeg标准错误输出的平均比特率信息,它看起来是最可靠的!