【问题标题】:How to benchmark the decoding of the frame by ffmpeg?如何通过ffmpeg对帧的解码进行基准测试?
【发布时间】: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


    【解决方案1】:

    空复用器

    如果您想要一种简单的解码基准测试方法,请使用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
    

    请参阅man time 了解更多信息。

    -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 -
    

    【讨论】:

    • 解释不同时间之间的差异可能是值得的——“真实”时间可能不是最有用的比较,因为它取决于系统负载、可用内核等。
    • 忽略流的更简单方法是-an 忽略音频流,或-vn 忽略视频流。
    • @PeterCordes 我更喜欢-map,因为它更灵活,您可以选择(或排除)特定的流。
    • 当然,它有它的用途。但对我来说,到目前为止最常见的是“忽略音频”或“忽略视频”,-an 打字速度更快,我不需要知道哪个流号是音频,哪个是视频。 (例如,使用-f md5 比较两个文件以查看它们是否具有相同的音频或视频比特流,即使它们的复用方式不同)。
    猜你喜欢
    • 2014-09-20
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2011-01-21
    相关资源
    最近更新 更多