【发布时间】:2016-09-14 05:27:06
【问题描述】:
[我做了什么]
我正在尝试通过
来衡量不同 ffmpeg 解码器的性能- 计时调用函数
avcodec_decode_video2(..)占用 ffmpeg.c 并按以下方式运行 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
据我了解,无论是转换视频还是播放视频,调用该函数的平均时间都应该相同,因为我只是测量解码该视频帧所需的时间。这是一种错误的做法吗?如果我不正确,请告诉我。我得到的结果对我来说很奇怪——在 ffmpeg 二进制文件中调用上述函数的时间是 ffplay 二进制文件的两倍。我尝试使用 -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 似乎不是很有帮助。 (不确定其他数字是什么意思)。
【问题讨论】:
标签: c video ffmpeg benchmarking