[FFmpeg-user] Trouble selecting a pixel format/colorspace while trying to encode a video using ffmpeg and HW accelerated vaapi or qsv interfaces

Dennis Mungai dmngaie at gmail.com
Thu Dec 8 22:05:17 EET 2022


On Thu, 8 Dec 2022 at 22:32, <caetano at vision.ime.usp.br> wrote:

> I'm having trouble selecting a pixel format/colorspace while trying to
> encode a video using ffmpeg and HW accelerated vaapi or qsv interfaces. I
> have an i7-1165G7 with integrated graphics and I'm using ffmpeg 5.1.1 with
> ubuntu
>
> I'm able to select the pixel format/colorspace with the SW encoder, for
> instance, if I use the following command:
>
> ====
> ffmpeg -f x11grab -draw_mouse 0 -framerate 20 -probesize 42M -video_size
> 1920x1200 -thread_queue_size 1000 -vcodec rawvideo -i ":0.0" -an -c:v hevc
> -preset veryslow -global_quality 17 -look_ahead 1 -y /tmp/output.mkv
> ====
>
> I get the correct pixel format and with ffprobe I have the following:
>
> ====
> Input #0, matroska,webm, from '/tmp/output.mkv':
>   Metadata:
>     ENCODER         : Lavf59.27.100
>   Duration: 00:00:02.90, start: 0.000000, bitrate: 92 kb/s
>   Stream #0:0: Video: hevc (Rext), gbrp(pc, gbr/unknown/unknown,
> progressive), 1920x1200, 20 fps, 20 tbr, 1k tbn
>     Metadata:
>       ENCODER         : Lavc59.37.100 libx265
>       DURATION        : 00:00:02.900000000
> ====
>
> The video from the above example is correctly encoded and colors are
> exactly what I need them to be.
>
> On the other hand, when I try to use the HW encoder, the pixel format is
> wrong. For instance:
>
> ====
> ffmpeg -init_hw_device qsv=hw -filter_hw_device hw -v verbose -f x11grab
> -draw_mouse 0 -framerate 20 -probesize 42M -video_size 1920x1200
> -thread_queue_size 1000 -vcodec rawvideo -i ":0.0" -an -vf
> 'hwupload=extra_hw_frames=64,scale_qsv=format=bgra' -c:v hevc_qsv -preset
> veryslow -global_quality 17 -look_ahead 1 -y /tmp/output.mkv
> ====
>
> ffprobe generates:
>
> ====
> Input #0, matroska,webm, from '/tmp/output.mkv':
>   Metadata:
>     ENCODER         : Lavf59.27.100
>   Duration: 00:00:04.40, start: 0.000000, bitrate: 55 kb/s
>   Stream #0:0: Video: hevc (Main), yuvj420p(pc, gbr/unknown/unknown,
> progressive), 1920x1200 [SAR 1:1 DAR 8:5], 20 fps, 20 tbr, 1k tbn
>     Metadata:
>       ENCODER         : Lavc59.37.100 hevc_qsv
>       DURATION        : 00:00:04.400000000
> ====
>
> As you can see, in the first example, libx265 SW encoder based, the output
> is generated with the "gbrp" colorspace while in the second example,
> hevc_qsv HW encoder based, the output is generated with the "yuvj420p"
> pixel format.
>
> QUESTION: How can I properly control the pixel format/colorspace of the
> generated output using the HW based encoders such as QSV or VAAPI with
> my i7-1165G7 integrated graphics card ? I would like a format that is 24 or
> 32bits instead of the 12bits I'm getting
>
>
Hey there,

I'd recommend using the vpp_qsv filter instead.

Please provide the output of:

ffmpeg -h filter=vpp_qsv

And I'll generate a command line you can use to test and report back.


More information about the ffmpeg-user mailing list