Table of Contents
ffmpeg - Hardware Acceleration using GPU - Benchmark
Null muxer
A simple way to benchmark decoding is to use the null muxer:
ffmpeg -i input -f null -
NOTE: The following parts of the command forces a null file:
-f null -
Timing decoding
Linux and macOS users can add the time command:
time ffmpeg -i input -f null -
returns:
[...] real 0m3.115s user 0m0.223s sys 0m0.244s
NOTE: See man time for more info.
Benchmark option
The -benchmark option can be added to output CPU time and maximum memory consumption:
time ffmpeg -i input -benchmark -f null -
returns:
[...] bench: utime=0.154s stime=0.196s rtime=3.000s bench: maxrss=365256kB
Choosing streams
If you want to just decode a particular stream then use the map option:
ffmpeg -i input -map 0:a:0 -f null -
NOTE: Another approach to ignore streams is to use:
- -an to ignore audio streams.
- -vn to ignore video streams.
Threads
You can decode with one thread if you want to:
ffmpeg -threads 1 -i input -f null -
NOTE: Not all decoders have threading capabilities and some have several.
You can check decoder details such as
ffmpeg -h decoder=h264
Choosing a decoder
There can be several decoders available for a format.
You can name the decoder if you do not want to rely on the default:
ffmpeg -c:v vp8 -i input -f null - ffmpeg -c:v libvpx -i input -f null -
Example
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i input.mp4 -c:v hevc_vaapi -q:v 28 -f null - -benchmark
returns:
... bench: utime=0.156s stime=0.195s rtime=3.003s bench: maxrss=358944kB
NOTE: maxrss indicates the maximum RAM used during the ffmpeg execution.
- utime: user time.
- utime is the sum of processing time across all threads. Since they may operate in parallel, utime can exceed rtime.
- stime: system time.
- rtime: real time.