Den 03.12.2025 23:44, skrev Andrew Randrianasulu:
ср, 3 дек. 2025 г., 23:07 Terje J. Hanssen <[email protected]>:
Den 03.12.2025 17:05, skrev Andrew Randrianasulu:
ср, 3 дек. 2025 г., 18:18 Terje J. Hanssen <[email protected]>:
Den 02.12.2025 21:18, skrev Andrew Randrianasulu:
вт, 2 дек. 2025 г., 22:45 Terje J. Hanssen
<[email protected]>:
Den 02.12.2025 15:48, skrev Andrew Randrianasulu:
On Tue, Dec 2, 2025 at 5:11 PM Terje J. Hanssen via ffmpeg-user
<[email protected]> <mailto:[email protected]> wrote:
Hello list members
Any ideas and suggestions to how to get ffmpeg vulkan video
transcoding
to work?
All my attempts so far are unsuccessful and finish with Conversion
failed!
Below is one code line with verbose output.
Terje J. Hanssen
--------
My system and hardware
Kernel: 6.12.59-1-longterm arch: x86_64 bits: 64
Desktop: GNOME v: 49.1 Distro: openSUSE Tumbleweed-Slowroll
20251106
Graphics: Device-1: Intel DG2 [Arc A750] driver: i915 v: kernel
with
Vulkan v. 25.2.6, Mesa v. 25.2.6 and system ffmpeg-8 v. 8.0 (from
Packman)
I can verify the following ffmpeg Vulkan video support:
ffmpeg -hide_banner -encoders | grep vulkan
V....D av1_vulkan AV1 (Vulkan) (codec av1)
V....D ffv1_vulkan FFmpeg video codec #1 (Vulkan)
(codec ffv1)
V....D h264_vulkan H.264/AVC (Vulkan) (codec h264)
V....D hevc_vulkan H.265/HEVC (Vulkan) (codec hevc)
And by enabling both Vulkan video decode and encode support in the
ANV
driver via the following environment variable
export ANV_DEBUG="video-decode,video-encode"
I can verify the following Vulkan Video Encode support:
vulkaninfo | grep -i encode
VK_KHR_video_encode_h264 : extension
revision 14
VK_KHR_video_encode_h265 : extension
revision 14
VK_KHR_video_encode_queue : extension
revision 12
queueFlags = QUEUE_VIDEO_DECODE_BIT_KHR |
QUEUE_VIDEO_ENCODE_BIT_KHR
VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR
VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR
--------
ffmpeg -hide_banner -v verbose -init_hw_device "vulkan=vk:0"
-hwaccel
vulkan -hwaccel_output_format vulkan -i hdv09_04.m2t -c:v
h264_vulkan -y
hdv09_04_h264_vulkan.mp4
I *suspect* mpeg2 decoding is not supported by Vulkan video ? Unless
someone reesurrect Mesa shaders that used to work at some point as
vulkan compute shaders ?
Try different (h264, h265, vp9, av1) input file ?
What I can tell is that ffmpeg vulkan decoding
benchmarks using mpeg2 seemingly has worked better for a
long time according to
https://trac.ffmpeg.org/wiki/HWAccelIntro#Vulkan
ffmpeg -hide_banner -init_hw_device "vulkan=vk:0"
-hwaccel vulkan -hwaccel_output_format vulkan -i
hdv09_04.m2t -f null - -benchmark
.........snip
[mpegts @ 0x563c726901c0] PES packet size mismatch.88
bitrate=N/A speed= 145x elapsed=0:00:01.50
[mpegts @ 0x563c726901c0] Packet corrupt (stream = 1,
dts = 258142320).
[mpeg2video @ 0x563c72653500] ac-tex damaged at 10 61
[mpeg2video @ 0x563c72653500] Warning MVs not available
[mpeg2video @ 0x563c72653500] concealing 630 DC, 630 AC,
630 MV errors in P frame
[vist#0:0/mpeg2video @ 0x563c726e3b00] [dec:mpeg2video @
0x563c726d4e40] corrupt decoded frame
[out#0/null @ 0x563c726d5140] video:2422KiB
audio:44770KiB subtitle:0KiB other streams:0KiB global
headers:0KiB muxing overhead: unknown
frame= 5963 fps=3635 q=-0.0 Lsize=N/A time=00:03:58.77
bitrate=N/A speed= 146x elapsed=0:00:01.64
bench: utime=19.196s stime=0.323s rtime=1.641s
bench: maxrss=185604KiB
Strange, may be some software decoding fallback patch now
gets broken in ffmpeg? URL dies not list MPEG2 as Vulkan
decodeable ...
Do you have older ffmpeg (7.0, 7.1) around?
I reinstalled ffmpeg-7 v. 7.1 (Packman version) and retested
the same mpeg2video (hdv1080i50.m2t) video file using the
Vulkan decoding benchmark.
First, the normal output seemingly looks better than the
previous ffmpeg-8 test:
ffmpeg -hide_banner -init_hw_device "vulkan=vk:0" -hwaccel
vulkan -hwaccel_output_format vulkan -i hdv09_04.m2t -f null
- -benchmark
.....snip
[mpegts @ 0x55b810d2c180] PES packet size mismatch.00
bitrate=N/A speed= 148x
[mpegts @ 0x55b810d2c180] Packet corrupt (stream = 1, dts =
258142320).
[mpeg2video @ 0x55b810cf0940] ac-tex damaged at 10 61
[mpeg2video @ 0x55b810cf0940] Warning MVs not available
[mpeg2video @ 0x55b810cf0940] concealing 630 DC, 630 AC, 630
MV errors in P frame
[vist#0:0/mpeg2video @ 0x55b811857440] [dec:mpeg2video @
0x55b8118595c0] corrupt decoded frame
[out#0/null @ 0x55b811864f80] video:2562KiB audio:44770KiB
subtitle:0KiB other streams:0KiB global headers:0KiB muxing
overhead: unknown
frame= 5963 fps=3693 q=-0.0 Lsize=N/A time=00:03:58.77
bitrate=N/A speed= 148x
Looking at speed I think ffmpeg 7.1 just demuxes, without even
trying to decode? Can you test with some light -c:v like again
mpeg2 or mpeg4 ?
This is using ffmpeg-7. Please correct my code lines. I can try
again using ffmpeg-8
ffmpeg -hide_banner -init_hw_device "vulkan=vk:0" -hwaccel vulkan
-hwaccel_output_format vulkan -i hdv09_04.m2t -c:v h264_vulkan
hdv09_04_h264_vulkan.mp4
...............
Impossible to convert between the formats supported by the filter
'Parsed_null_0' and the filter 'auto_scale_0'
may be try to add -noautoscale ?
I think it might fail without hwdownload,format=yuv420p filters
in this case ... But I suspect it will abort earlier?
May be ffmpeg 8.0 (at least as build for SuSE ) just complain at
decoding moment, instead of just silently demuxing without
decoding anything?
What happen if you set hwaccel to none or vaapi ? I guess ot
should decode in sw or via vaapi in such cases, so there will be
more realistic decoding benchmark.
I think it should be -hwaccel none" , not just hwaccel.
Just try to drop that part of cmd line? Ffmpeg should use software
decoder in this case ....
I have cleaned away some previous output and testet again with same
errors below:
Try -noautoscale
ffmpeg -hide_banner -init_hw_device "vulkan=vk:0" -hwaccel vulkan
-hwaccel_output_format vulkan -i hdv09_04.m2t -noautoscale -y -c:v
h264_vulkan hdv09_04_h264_vulkan.mp4
.........
Impossible to convert between the formats supported by the filter
'Parsed_null_0' and the filter 'auto_scale_0'
[vf#0:0 @ 0x561882873200] Error reinitializing filters!
[vf#0:0 @ 0x561882873200] Task finished with error code: -38 (Function
not implemented)
[vf#0:0 @ 0x561882873200] Terminating thread with return code -38
(Function not implemented)
[vost#0:0/h264_vulkan @ 0x5618828af640] Could not open encoder before EOF
[vost#0:0/h264_vulkan @ 0x5618828af640] Task finished with error code:
-22 (Invalid argument)
[vost#0:0/h264_vulkan @ 0x5618828af640] Terminating thread with return
code -22 (Invalid argument)
[out#0/mp4 @ 0x561882938cc0] Nothing was written into output file,
because at least one of its streams received no packets.
frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A
[aac @ 0x5618828a3880] Qavg: 435.976
Conversion failed!
---------
Try -hwaccel none
ffmpeg -hide_banner -init_hw_device "vulkan=vk:0" -hwaccel none -i
hdv09_04.m2t -vf "hwdownload,format=yuv420p" -c:v h264_vulkan
hdv09_04_h264_vulkan.mp4
.........
Impossible to convert between the formats supported by the filter 'graph
-1 input from stream 0:0' and the filter 'auto_scale_0'
[vf#0:0 @ 0x55cf0b990dc0] Error reinitializing filters!
[vf#0:0 @ 0x55cf0b990dc0] Task finished with error code: -38 (Function
not implemented)
[vf#0:0 @ 0x55cf0b990dc0] Terminating thread with return code -38
(Function not implemented)
[vost#0:0/h264_vulkan @ 0x55cf0c535100] Could not open encoder before EOF
[vost#0:0/h264_vulkan @ 0x55cf0c535100] Task finished with error code:
-22 (Invalid argument)
[vost#0:0/h264_vulkan @ 0x55cf0c535100] Terminating thread with return
code -22 (Invalid argument)
[out#0/mp4 @ 0x55cf0b9d2880] Nothing was written into output file,
because at least one of its streams received no packets.
frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A
[aac @ 0x55cf0b9ce900] Qavg: 431.170
Conversion failed!
-------------
Just try to drop the -hwaccel part of cmd line? Ffmpeg should use
software decoder in this case ....
ffmpeg -hide_banner -init_hw_device "vulkan=vk:0" -i hdv09_04.m2t -vf
"hwdownload,format=yuv420p" -c:v h264_vulkan hdv09_04_h264_vulkan.mp4
......
Impossible to convert between the formats supported by the filter 'graph
-1 input from stream 0:0' and the filter 'auto_scale_0'
[vf#0:0 @ 0x55bbd08acbc0] Error reinitializing filters!
[vf#0:0 @ 0x55bbd08acbc0] Task finished with error code: -38 (Function
not implemented)
[vf#0:0 @ 0x55bbd08acbc0] Terminating thread with return code -38
(Function not implemented)
[vost#0:0/h264_vulkan @ 0x55bbd0972240] Could not open encoder before EOF
[vost#0:0/h264_vulkan @ 0x55bbd0972240] Task finished with error code:
-22 (Invalid argument)
[vost#0:0/h264_vulkan @ 0x55bbd0972240] Terminating thread with return
code -22 (Invalid argument)
[out#0/mp4 @ 0x55bbd145fd80] Nothing was written into output file,
because at least one of its streams received no packets.
frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A
[aac @ 0x55bbd096fac0] Qavg: 430.072
Conversion failed!
----------------
try to drop the "-init_hw_device "vulkan=vk:0"-hwaccel part" of cmd
line? Ffmpeg should use software decoder in this case ....
ffmpeg -hide_banner -i hdv09_04.m2t -vf "hwdownload,format=yuv420p" -c:v
h264_vulkan hdv09_04_h264_vulkan.mp4
..........
Impossible to convert between the formats supported by the filter 'graph
-1 input from stream 0:0' and the filter 'auto_scale_0'
[vf#0:0 @ 0x55ce82016ec0] Error reinitializing filters!
[vf#0:0 @ 0x55ce82016ec0] Task finished with error code: -38 (Function
not implemented)
[vf#0:0 @ 0x55ce82016ec0] Terminating thread with return code -38
(Function not implemented)
[vost#0:0/h264_vulkan @ 0x55ce821dc780] Could not open encoder before EOF
[vost#0:0/h264_vulkan @ 0x55ce821dc780] Task finished with error code:
-22 (Invalid argument)
[vost#0:0/h264_vulkan @ 0x55ce821dc780] Terminating thread with return
code -22 (Invalid argument)
[out#0/mp4 @ 0x55ce82041940] Nothing was written into output file,
because at least one of its streams received no packets.
frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A
[aac @ 0x55ce82045040] Qavg: 432.921
Conversion failed!
----------------
I have just partly tested with
"hwupload_vulkan,format=yuv420p,auto_scale_0,hwdownload,format=yuv420p"
with(out) "-pix_fmt yuv420p/" /according to a google-ai search for
....
vulkan Impossible to convert between the formats supported by the filter
'Parsed_null_0' and the filter 'auto_scale_0'
/Link 'Parsed_null_0.default' -> 'auto_scale_0.default':
src: yuv420p
dst: yuv420p
The error message "Impossible to convert between the formats supported
by the filter 'Parsed_null_0' and the filter 'auto_scale_0'" typically
occurs when using hardware acceleration (hwaccel) with FFmpeg and a
software filter is implicitly called, or when there is a mismatch in the
expected and actual pixel formats, even if both are ostensibly yuv420p.
The core issue is that hardware decoders/encoders often only support a
limited set of pixel formats or require explicit instructions (filters)
to move data between the GPU and CPU memory spaces.
Common Causes and Solutions
Missing hwupload or hwdownload filters:
When using hardware acceleration, the video frames reside in the GPU's
memory. If a software filter (like an implicit auto_scale) is used, the
data needs to be transferred to system RAM (CPU accessible) using
hwdownload and potentially back to the GPU using hwupload.
This is a common requirement when mixing hardware and software filters.
Solution:
Explicitly add hwupload and hwdownload to your filter chain in your
FFmpeg command. The exact filter name depends on the specific hardware
(e.g., hwupload_vulkan, hwupload_cuda, etc.).
Example (Conceptual with Vulkan):
ffmpeg -hwaccel vulkan -i input.mp4 -vf
"hwupload_vulkan,format=yuv420p,auto_scale_0,hwdownload,format=yuv420p"
-c:v <vulkan_encoder> output.mp4
(Note: the specific filter names might need adjustment based on
your FFmpeg version and hardware)
Implicit Scaling:
The error mentions auto_scale_0, which implies FFmpeg is trying to
automatically scale the video for some reason (perhaps the output
resolution is different from the input, or another filter requires a
specific resolution). Hardware scaling filters should be used instead of
the generic software scale filter when staying on the GPU.
Solution:
Use the hardware-accelerated scaling filter relevant to your platform
(e.g., scale_vulkan, scale_cuda, scale_qsv) and ensure the output
resolution is explicitly defined if needed.
Incorrect Pixel Format Specification:
Specifying -pix_fmt yuv420p manually might conflict with the default
pixel format the hardware decoder or encoder is using (which is often
nv12 or p010le for 10-bit content when using hardware acceleration).
Even if the name is the same, the memory layout on the GPU can be different.
Solution:
Try removing the -pix_fmt yuv420p argument and let FFmpeg automatically
negotiate the best format, or explicitly set the pixel format compatible
with your hardware (e.g., -pix_fmt nv12).
Driver Issues:
Ensure you have the latest drivers for your graphics card that fully
support the Vulkan video extensions.
Steps to Fix
To provide a precise command fix, the original FFmpeg command you are
using is needed. In the meantime, the general approach is:
Remove redundant -pix_fmt flags.
Ensure all filters in the chain are compatible with the hardware
context or use explicit hwupload/hwdownload to move data.
Use hardware-specific filters (like scale_vulkan or similar)
instead of generic filters if possible./
-----------------------------
--------
My previous VAAPI example (25/5-2025)
ffmpeg -hide_banner -init_hw_device vaapi -i hdv09_04.m2t -vf
format=nv12,hwupload -c:v hevc_vaapi -y hdv09_04_hevc_vaapi_nv12.mp4
......
[mpegts @ 0x5562fa5b1a80] PES packet size mismatch0:03:54.80
bitrate=11682.6kbits/s speed=23.5x
[mpegts @ 0x5562fa5b1a80] Packet corrupt (stream = 1, dts =
258142320).
[mpeg2video @ 0x5562fa5f5840] ac-tex damaged at 10 61
[mpeg2video @ 0x5562fa5f5840] Warning MVs not available
[mpeg2video @ 0x5562fa5f5840] concealing 630 DC, 630 AC, 630 MV
errors in P frame
[vist#0:0/mpeg2video @ 0x5562fa5e4280] [dec:mpeg2video @
0x5562fa750f80] corrupt decoded frame
[out#0/mp4 @ 0x5562fa721b40] video:335894KiB audio:3774KiB
subtitle:0KiB other streams:0KiB global headers:0KiB muxing
overhead: 0.048351%
frame= 5963 fps=586 q=-0.0 Lsize= 339832KiB time=00:03:58.77
bitrate=11659.1kbits/s speed=23.5x
[aac @ 0x5562fa5e7640] Qavg: 488.890
Yeah, 586 fps sounds more accurate ...
It sort of sad even h264 does not transcode via Vulkan only. You
can try to isolate was it (vulkan) decoder or vulkan encoder
problem by forcing hwaccel to none while keeping -c:v at Vulkan
encoder. Look out for hwdownload/hwupload and format filters,
they still not inserted automatically, as far as I can see.
Sorry if it sounds like too much work, as you noted this is a bit
of bleeding edge so surprises happen.
------
I have tried some other input files, here one mp4 that
doesn't have the same errors, but also terminate with
Conversion failed!
ffmpeg -hide_banner -init_hw_device "vulkan=vk:0"
-hwaccel vulkan -hwaccel_output_format vulkan -i
mp4-example-video-download-full-hd-1920x1080.mp4 -c:v
h264_vulkan -y
mp4-example-video-download-full-hd-1920x1080_h264_vulkan.mp4
..........snip
[h264_vulkan @ 0x556fed400d40] Unable to perform query:
VK_ERROR_DEVICE_LOST!psed=0:00:01.00
wow, never saw this one! I am afraid something in kernel
driver or ANV driver was upset ... With less Intel
developers around I am not sure if such error will be
diagnosed quickly ....
You probably can try mesa3d issue tracker, may be it will
get some developer attention this way ...
_______________________________________________
ffmpeg-user mailing list -- [email protected]
To unsubscribe send an email to [email protected]