0

我遇到的问题是当使用 ffmpeg 使用 libx264 对 YUV 进行编码时,我没有在 -vstats 输出中获得所有帧信息。它提出了 ffmpeg 有多可靠的问题,因此任何基于 ffmpeg 的“编解码器基准”审查都可以信任吗?

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

RAW YUV -> 用帧号对每一帧进行条形码编码 -> 条形码 YUV

条形码 YUV -> 编码(例如使用 libx264)-> MKV -> 解码为 YUV

我可以使用每帧中的条形码比较两个输出('Barcoded YUV' & 'Decoded to 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

我认为这也是一个错误,任何足够聪明的人都可能想关注这个跟踪器: http ://roundup.ffmpeg.org/issue2248

4

1 回答 1

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 标准错误输出'bitrate=':8365.8

以下是我的作品的链接:

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

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

于 2010-09-29T16:28:35.700 回答