чт, 20 июн. 2024 г., 01:02 Terje J. Hanssen <[email protected]>:
On 6/19/24 02:44, Andrew Randrianasulu wrote:
------------ skip
-------------
In short, I have tested the same SD-DV 576i and HDV 1080i video files as with SVT-AV1 (CPU based) in another resent post.
ffmpeg -hide_banner -hwaccel qsv -qsv_device /dev/dri/renderD128 -i dv01_07.dv -c:v av1_qsv -preset 4 dv01_07_av1_qsv_pr4.webm frame= 2832 fps=2106 q=-0.0 Lsize= 10554KiB time=00:01:53.24 bitrate= 763.5kbits/s speed=84.2x
fmpeg -hide_banner -hwaccel qsv -qsv_device /dev/dri/renderD128 -i hdv09_04.m2t -c:v av1_qsv -preset 4 hdv09_04.m2t_av1_qsv_pr4.webm frame= 5913 fps=700 q=-0.0 Lsize= 48022KiB time=00:03:58.77 bitrate=1647.6kbits/s dup=0 drop=4 speed=28.3x
....skip
A warning output in both command lines is:
[vist#0:0/dvvideo @ 0x556a3f679100] WARNING: defaulting hwaccel_output_format to qsv for compatibility with old commandlines. This behaviour is DEPRECATED and will be removed in the future. Please explicitly set "-hwaccel_output_format qsv".
I tried to add this without success, so suggestion is welcome !?
I got this succesful now and avoided this warning, see command lines below
And possibly suggestions regarding the more seriously errors "Cannot allocate memory" that arised from the second command transcoding the hdv file?
well, you tried to add -extra_hw_frames 16 for example to your ffmpeg line? I think mpeg2 is not most popular input codec nowadays ....
Yes, thank you. This worked, see below (not unlike previous extending the bufsize for transcoding to mpg(2) for DVD)
.I attach also the "complete" ffmpeg output FWIW for both files, though skipping repeated error lines:
ffmpeg -hide_banner -hwaccel qsv -qsv_device /dev/dri/renderD128 -i dv01_07.dv -c:v av1_qsv -preset 4 dv01_07_av1_qsv_pr4.webm ........skip
frame= 2832 fps=2106 q=-0.0 Lsize= 10554KiB time=00:01:53.24 bitrate=
763.5kbits/s speed=84.2x
bitrate= 763.5kbits/s
sounds a bit low even for av1, so may be try to set -b to some higher value as suggested?
As suggested where? bitrate= 763.5kbits/s was for SD-DV which was viewable and not quite bad in my eyes.
guess my guess was outdated (based on xvid days?) sorry!
====
av1_qsv @ 0x556a3f653040] Using the constant quantization parameter (CQP) by default. Please use the global_quality option and other options for a quality-based mode or the b option and other options for a bitrate-based mode if the default is not the desired choice. ====
To make a direct speed performance comparison between this GPU -Hwaccel AV1_QSV encoding and my previou CPU based SVT-AV1 encoding, I have used the same ffmpeg command line parameters and preset 4, and iterated similar bitrate and file size as follows:
SD-DV -> AV1 ------------
SVT-AV1: ffmpeg -hide_banner -i dv01_07.dv -c:v libsvtav1 -preset 4 -crf 35 -c:a libvorbis dv01_07_svt-av1_pr4.webm frame= 2832 fps= 50 q=35.0 Lsize= 24159KiB time=00:01:53.24 bitrate=1747.7kbits/s speed= 2x
AV1_QSV: ffmpeg -hide_banner -hwaccel_output_format qsv -qsv_device /dev/dri/renderD128 -i dv01_07.dv -c:v av1_qsv -preset 4 -b:v 1570k -crf 35 -c:a libvorbis dv01_07_av1_qsv_pr4_b1570k.webm frame= 2832 fps=1891 q=-0.0 Lsize= 24166KiB time=00:01:53.24 bitrate=1748.2kbits/s speed=75.6x
That is, AV1_QSV DV transcoding speed 75.6x/2x ~ 38x or fps 1891/50 ~ 38 faster than corresponding with SVT-AV1.
File sizes:
389M dv01_07.dv 24M dv01_07_svt-av1_pr4.webm 24M dv01_07_av1_qsv_pr4_b1557k.webm
HDV -> AV1 ----------
SVT-AV1: ffmpeg -hide_banner -i hdv09_04.m2t -c:v libsvtav1 -preset 4 -crf 35 -c:a libvorbis hdv09_04_svt-av1_pr4.webm frame= 5963 fps= 24 q=35.0 Lsize= 113663KiB time=00:03:58.77 bitrate=3899.6kbits/s speed=0.948x
AV1_QSV: ffmpeg -hide_banner -hwaccel_output_format qsv -qsv_device /dev/dri/renderD128 -extra_hw_frames 16 -i hdv09_04.m2t -c:v av1_qsv -preset 4 -b:v 3700k hdv09_04_av1_qsv_pr4_bv3700k.webm frame= 5963 fps=482 q=-0.0 Lsize= 113271KiB time=00:03:58.77 bitrate=3886.1kbits/s speed=19.3x
That is, AV1_QSV HDV transcoding speed 19.3x/0.948x ~ 20x or fps 482/24 ~ 20 faster than corresponding with SVT-AV1
impressive!
File sizes:
745M hdv09_04.m2t 111M hdv09_04_svt-av1_pr4.webm 111M hdv09_04_av1_qsv_pr4_bv3700k.webm
------------------
I also hope quality is "good enough" for final/delivery transcode ...
FFmpeg output for the latest QSV_AV1 transcoding follows. As seen the error messages messages are gone, though not quite clean as there are still some "disturbing" mpeg2video messages.
SD-DV -> AV1 ---------- ffmpeg -hide_banner -hwaccel_output_format qsv -qsv_device /dev/dri/renderD128 -i dv01_07.dv -c:v av1_qsv -preset 4 -b:v 1570k -crf 35 -c:a libvorbis dv01_07_av1_qsv_pr4_b1570k.webm
libva info: VA-API version 1.21.0 libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so libva info: Found init function __vaDriverInit_1_20 libva info: va_openDriver() returns 0 libva info: VA-API version 1.21.0 libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so libva info: Found init function __vaDriverInit_1_20 libva info: va_openDriver() returns 0 [dv @ 0x5614ce553080] Estimating duration from bitrate, this may be inaccurate Input #0, dv, from 'dv01_07.dv': Metadata: timecode : 01:09:35:09 Duration: 00:01:53.28, start: 0.000000, bitrate: 28800 kb/s Stream #0:0: Video: dvvideo, yuv420p, 720x576 [SAR 16:15 DAR 4:3], 28800 kb/s, 60k fps, 25 tbr, 60k tbn Stream #0:1: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s [out#0/webm @ 0x5614ce3ea640] Codec AVOption crf (Select the quality for constant quality mode) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream. Stream mapping: Stream #0:0 -> #0:0 (dvvideo (native) -> av1 (av1_qsv)) Stream #0:1 -> #0:1 (pcm_s16le (native) -> vorbis (libvorbis)) Press [q] to stop, [?] for help Output #0, webm, to 'dv01_07_av1_qsv_pr4_b1570k.webm': Metadata: timecode : 01:09:35:09 encoder : Lavf61.1.100 Stream #0:0: Video: av1, nv12(bottom coded first (swapped)), 720x576 [SAR 16:15 DAR 4:3], q=2-31, 1570 kb/s, 25 fps, 1k tbn Metadata: encoder : Lavc61.3.100 av1_qsv Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp Metadata: encoder : Lavc61.3.100 libvorbis [out#0/webm @ 0x5614ce3ea640] video:22613KiB audio:1495KiB subtitle:0KiB other streams:0KiB global headers:4KiB muxing overhead: 0.244968% frame= 2832 fps=1891 q=-0.0 Lsize= 24166KiB time=00:01:53.24 bitrate=1748.2kbits/s speed=75.6x
HDV->AV1 --------- ffmpeg -hide_banner -hwaccel_output_format qsv -qsv_device /dev/dri/renderD128 -extra_hw_frames 16 -i hdv09_04.m2t -c:v av1_qsv -preset 4 -b:v 3700k hdv09_04_av1_qsv_pr4_bv3700k.webm
libva info: VA-API version 1.21.0 libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so libva info: Found init function __vaDriverInit_1_20 libva info: va_openDriver() returns 0 libva info: VA-API version 1.21.0 libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so libva info: Found init function __vaDriverInit_1_20 libva info: va_openDriver() returns 0 [mpeg2video @ 0x5607564ea600] Invalid frame dimensions 0x0. Last message repeated 3 times [mpegts @ 0x56075643ee00] PES packet size mismatch [mpegts @ 0x56075643ee00] Packet corrupt (stream = 1, dts = 258142320). [mpegts @ 0x56075643ee00] Could not find codec parameters for stream 2 (Unknown: none ([160][0][0][0] / 0x00A0)): unknown codec Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options [mpegts @ 0x56075643ee00] Could not find codec parameters for stream 3 (Unknown: none ([161][0][0][0] / 0x00A1)): unknown codec Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options Input #0, mpegts, from 'hdv09_04.m2t': Duration: 00:03:59.06, start: 2629.496000, bitrate: 26110 kb/s Program 100 Stream #0:0[0x810]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, bt709, top first), 1440x1080 [SAR 4:3 DAR 16:9], 25000 kb/s, 25 fps, 25 tbr, 90k tbn Side data: cpb: bitrate max/min/avg: 25000000/0/0 buffer size: 7340032 vbv_delay: N/A Stream #0:1[0x814]: Audio: mp2 (mp3float) ([3][0][0][0] / 0x0003), 48000 Hz, stereo, fltp, 384 kb/s Stream #0:2[0x815]: Unknown: none ([160][0][0][0] / 0x00A0) Stream #0:3[0x811]: Unknown: none ([161][0][0][0] / 0x00A1) Stream mapping: Stream #0:0 -> #0:0 (mpeg2video (native) -> av1 (av1_qsv)) Stream #0:1 -> #0:1 (mp2 (native) -> opus (libopus)) Press [q] to stop, [?] for help [libopus @ 0x560756595f80] No bit rate set. Defaulting to 96000 bps. Output #0, webm, to 'hdv09_04_av1_qsv_pr4_bv3700k.webm': Metadata: encoder : Lavf61.1.100 Stream #0:0: Video: av1, nv12(tv, bt709, top coded first (swapped)), 1440x1080 [SAR 4:3 DAR 16:9], q=2-31, 3700 kb/s, 25 fps, 1k tbn Metadata: encoder : Lavc61.3.100 av1_qsv Stream #0:1: Audio: opus, 48000 Hz, stereo, s16, 96 kb/s Metadata: encoder : Lavc61.3.100 libopus [mpegts @ 0x56075643ee00] PES packet size mismatch0:03:51.36 bitrate=3834.3kbits/s speed=19.3x [mpegts @ 0x56075643ee00] Packet corrupt (stream = 1, dts = 258142320). [mpeg2video @ 0x560756595500] ac-tex damaged at 10 61 [mpeg2video @ 0x560756595500] Warning MVs not available [mpeg2video @ 0x560756595500] concealing 630 DC, 630 AC, 630 MV errors in P frame [vist#0:0/mpeg2video @ 0x5607564f6940] [dec:mpeg2video @ 0x560756440480] corrupt decoded frame [out#0/webm @ 0x5607565b2040] video:110669KiB audio:2490KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.098391% frame= 5963 fps=482 q=-0.0 Lsize= 113271KiB time=00:03:58.77 bitrate=3886.1kbits/s speed=19.3x
so, may be after whole setup was verified to function correctly at least in bare ffmpeg we can iterate back to vaapi for creating cingg profile ? (if I understand correctly qsv adds additional layer/library on top of vaapi driver - not something I wish to deal with in appimage packaging ....)