Generic way to deal with different pixel formats in a HW context
Hi, I want to run this command: ffmpeg -hwaccel_device 0 -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -vf scale_cuda=-1:-1 -c:v h264_nvenc -f null - If my input file has a pixel format of yuv420p then the command works fine, but if the file has gbrp the conversion fails: ffmpeg version git-2024-11-08-3330b733d3 Copyright (c) 2000-2024 the FFmpeg developers built with gcc 14 (GCC) configuration: --disable-debug --disable-shared --disable-doc --enable-gpl --enable-version3 --enable-runtime-cpudetect --enable-avfilter --enable-zlib --enable-libklvanc --enable-fontconfig --enable-libass --enable-libfdk-aac --enable-libfribidi --enable-libfreetype --enable-libharfbuzz --enable-libmp3lame --enable-libopus --enable-libsoxr --enable-libsrt --enable-librist --enable-libtwolame --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzimg --enable-libzmq --enable-nonfree --enable-opengl --enable-openssl --enable-libsvtav1 --enable-librav1e --enable-libdav1d --enable-cuvid --enable-nvenc --enable-nvdec --enable-libpulse --enable-vulkan --enable-libplacebo --enable-libshaderc --enable-libvpl --enable-pic libavutil 59. 46.100 / 59. 46.100 libavcodec 61. 24.100 / 61. 24.100 libavformat 61. 9.100 / 61. 9.100 libavdevice 61. 4.100 / 61. 4.100 libavfilter 10. 6.101 / 10. 6.101 libswscale 8. 9.101 / 8. 9.101 libswresample 5. 4.100 / 5. 4.100 libpostproc 58. 4.100 / 58. 4.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'tests/assets/media_mix/short_audio.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2mp41 encoder : Lavf59.31.100 Duration: 00:00:10.00, start: 0.000000, bitrate: 2623 kb/s Stream #0:0[0x1](und): Video: hevc (Rext) (hev1 / 0x31766568), gbrp(pc, gbr/unknown/unknown, progressive), 1280x720 [SAR 1:1 DAR 16:9], 2499 kb/s, 25 fps, 25 tbr, 12800 tbn (default) Metadata: handler_name : VideoHandler vendor_id : [0][0][0][0] encoder : Lavc59.43.100 libx265 Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default) Metadata: handler_name : SoundHandler vendor_id : [0][0][0][0] Stream mapping: Stream #0:0 -> #0:0 (hevc (native) -> h264 (h264_nvenc)) Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native)) Press [q] to stop, [?] for help 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 @ 0x1d88d300] Error reinitializing filters! [vf#0:0 @ 0x1d88d300] Task finished with error code: -38 (Function not implemented) [vf#0:0 @ 0x1d88d300] Terminating thread with return code -38 (Function not implemented) [vost#0:0/h264_nvenc @ 0x1d88db00] [enc:h264_nvenc @ 0x1d88d1c0] Could not open encoder before EOF [vost#0:0/h264_nvenc @ 0x1d88db00] Task finished with error code: -22 (Invalid argument) [vost#0:0/h264_nvenc @ 0x1d88db00] Terminating thread with return code -22 (Invalid argument) [out#0/null @ 0x1d88e300] Nothing was written into output file, because at least one of its streams received no packets. I can add hwupload_cuda to the filter chain and it works again. The problem is that I need a generic solution that works with both pixel formats without the need for different filter chains. Is there any way to solve this? Thanks a lot! Jonathan
participants (1)
-
Jonathan Baecker