Ann*_*y G 4 c video benchmarking ffmpeg
[ 我做了什么 ]
我试图通过测量不同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
~/bin/ffplay ~/Documents/video-input.h264
根据我的理解,无论是转换视频还是播放视频,调用该函数的平均时间应该相同,因为我只测量解码该视频帧所需的时间.这是错误的做法吗?如果我不对,请告诉我.我得到的结果对我来说很奇怪 - 与ffplay二进制文件相比,对ffmpeg二进制文件的调用需要两倍.我曾尝试使用-threads 0和不使用ffmpeg二进制文件,但结果仍然相同(是ffplay的两倍).可能是因为ffplay二进制文件只是使用更多的线程?当我尝试使用时-threads 1,ffmpeg大约需要ffplay的10倍(这对我来说是有意义的,因为它之前使用了几个线程,现在它只使用1)
在我提出问题之前,我想让您知道我是视频处理和视频编码/解码过程的初学者.
[我的问题]
我想知道什么是一种准确的方法来衡量解码一个帧所需的时间(使用1个线程)?我应该只测量avcodec_decode_video2(..)使用ffmpeg二进制文件调用函数所需的时间,而不是ffplay二进制文件吗?结果会更准确吗?我也尝试启用-benchmark_all -loglevel debug选项,但bench: 64537 decode_video 0.0如果0.0应该意味着时间,似乎以下消息不是很有帮助.(不确定其他数字的含义).
llo*_*gan 15
如果您想要一种简单的基准解码方法,请使用null muxer:
ffmpeg -i input -f null -
Run Code Online (Sandbox Code Playgroud)
Linux和macOS用户可以添加time命令:
$ time ffmpeg -i input -f null -
[...]
real 0m5.343s
user 0m20.290s
sys 0m0.230s
Run Code Online (Sandbox Code Playgroud)
有关详情man time,请参阅.
-benchmark 选项该-benchmark选项可以添加到输出CPU时间和最大内存消耗:
$ time ffmpeg -i input -benchmark -f null -
[...]
bench: utime=7.314s
bench: maxrss=72280kB
Run Code Online (Sandbox Code Playgroud)
如果您只想解码特定的流,请使用map选项:
ffmpeg -i input -map 0:a:0 -f null -
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以使用一个线程进行解码:
ffmpeg -threads 1 -i input -f null -
Run Code Online (Sandbox Code Playgroud)
并非所有解码器都具有线程功能,而且有些解码器有几个.您可以检查解码器详细信息,例如ffmpeg -h decoder=h264.
可以有几种解码器可用于格式.如果您不想依赖默认值,可以命名解码器:
ffmpeg -c:v vp8 -i input -f null -
ffmpeg -c:v libvpx -i input -f null -
Run Code Online (Sandbox Code Playgroud)