c - 如何通过 ffmpeg 对帧的解码进行基准测试?

标签 c video ffmpeg benchmarking

[我做了什么]

我正在尝试通过以下方式测量不同 ffmpeg 解码器的性能

  • 在 ffmpeg.c 中计算函数 avcodec_decode_video2(..) 的调用时间并按以下方式运行 ffmpeg 二进制文件

~/bin/ffmpeg -benchmark_all -loglevel debug -threads 0 -i ~/Documents/video-input.h264 -c:v libx265 -x265-params crf=25 video-output.hevc

  • 并通过计时相同函数在 ffplay.c 中花费的时间并按以下方式运行 ffplay 二进制文件

~/bin/ffplay ~/Documents/video-input.h264

据我所知,无论我是转换视频还是播放视频,调用该函数的平均时间应该是相同的,因为我只是测量解码该视频的帧需要多长时间。这是一种错误的做法吗?如果我不正确,请告诉我。我得到的结果对我来说很奇怪 - 与 ffplay 二进制文件相比,对上述函数的调用在 ffmpeg 二进制文件中花费了两倍的时间。我尝试使用 -threads 0 和不使用它来运行 ffmpeg 二进制文件,但结果仍然相同(是 ffplay 的两倍)。难道是因为 ffplay 二进制文件只是利用了更多的线程?当我尝试使用 -threads 1 时,ffmpeg 花费的时间大约是 ffplay 的 10 倍(这对我来说很有意义,因为之前它使用多个线程,现在它只使用 1 个)

在我问我的问题之前,我想让你知道我是视频处理和视频编码/解码过程的初学者。

[我的问题]

我想知道什么是衡量解码帧(使用 1 个线程)需要多长时间的准确方法?我是否应该只测量使用 ffmpeg 二进制而不是 ffplay 二进制调用 avcodec_decode_video2(..) 函数需要多长时间?这样结果会更准确吗? 我还尝试启用 -benchmark_all -loglevel debug 选项,但如果 0.0 应该表示时间,那么下面的消息 bench: 64537 decode_video 0.0 似乎不是很有帮助。 (不确定其他数字是什么意思)。

最佳答案

空混合器

如果您想要一种简单的基准解码方法,请使用 null muxer :

ffmpeg -i input -f null -

定时解码

Linux 和 macOS 用户可以添加 time 命令:

$ time ffmpeg -i input -f null -
[...]
real    0m5.343s
user    0m20.290s
sys     0m0.230s

有关详细信息,请参阅人工时间

-benchmark 选项

可以添加-benchmark选项来输出CPU时间和最大内存消耗:

$ time ffmpeg -i input -benchmark -f null -
[...]
bench: utime=7.314s
bench: maxrss=72280kB

选择流

如果你只想解码一个特定的流,那么使用 map option :

ffmpeg -i input -map 0:a:0 -f null -

线程

如果你想,你可以用一个线程解码:

ffmpeg -threads 1 -i input -f null -

并非所有解码器都具有线程功能,有些解码器具有多个。您可以检查解码器详细信息,例如 ffmpeg -h decoder=h264

选择解码器

一种格式可以有多个解码器。如果你不想依赖默认的,你可以命名解码器:

ffmpeg -c:v vp8 -i input -f null -
ffmpeg -c:v libvpx -i input -f null -

关于c - 如何通过 ffmpeg 对帧的解码进行基准测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37287533/

相关文章:

ffmpeg - 如何调整视频大小 720 :1280 Bigger Height, 宽度和裁剪为 1280 :720 using ffmpeg?

wpf - 在 WPF 中呈现非托管视频帧的最有效方法是什么?

c - 从 C 内部运行 csh

c - 我的代码是否导致太多套接字没有得到释放

apache-flex - 如何在swfloader中播放YouTube视频?

javascript - 从视频创建的 Canvas 在保存时出现 "Tainted canvases may not be exported."错误

css - 模糊网站背景的 mp4 视频

c++ - 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

c - 重用 strtok 为 null

android - 如何在录制时从(n Android)手机上传视频