Ошибка FFmpeg: Не удается преобразовать форматы между фильтром ‘parsed_hwupload_cuda’ и ‘auto_scaler’

Как ускорить обработку видео с помощью FFMPEG и аппаратного ускорения

В мире видеомонтажа и обработки медиа-файлов существует множество инструментов, но среди них FFMPEG является одним из самых мощных и универсальных. Этот инструмент позволяет выполнять сложные операции над видео с использованием как центрального процессора, так и графических процессоров. В этой статье мы рассмотрим, как оптимизировать процесс обработки видео с использованием аппаратного ускорения и фильтров, а также исправим распространенные ошибки.

Основные команды FFMPEG

Начнем с базовой команды обработки видео с использованием только процессора. Например, чтобы создать видео с наложением изображений и масок, можно использовать следующую команду:

ffmpeg -y -stream_loop -1 -i screencast.webm -i ../src/assets/masks/circular.png -i overlay.mp4 \
                -filter_complex \
                "[0:v]setpts=2.0*PTS[screencast]; \
                [1:v]alphaextract[mask]; \
                [2:v][mask]alphamerge[masked]; \
                [screencast][masked]overlay=30:30[out]" \
                -map "[out]" -map 2:a -b:v 1M -maxrate 3M -bufsize 4M -c:a aac -b:a 100k -shortest -map_metadata -1 -map_chapters -1 final.mp4

В этом примере мы используем несколько фильтров для обработки видео. Однако, чтобы ускорить процесс, можно применить аппаратное ускорение с помощью графического процессора.

Переход на аппаратное ускорение

Использование overlay_cuda может значительно ускорить обработку видео, но это требует корректной настройки всех используемых фильтров. Вот команда, с помощью которой вы можете реализовать аппаратное ускорение:

ffmpeg -y -stream_loop -1 -hwaccel cuda -hwaccel_output_format cuda -i screencast.webm -i ../src/assets/masks/circular.png -i overlay.mp4 \
                -filter_complex \
                "[0:v]hwdownload,setpts=2.0*PTS,hwupload_cuda,format=yuv420p[screencast]; \
                [1:v]hwdownload,format=rgba,alphaextract[mask]; \
                [2:v]hwdownload,format=yuv420p[overlay]; \
                [overlay][mask]alphamerge,hwupload_cuda,format=rgba[masked]; \
                [screencast][masked]overlay_cuda=30:30[out]" \
                -map "[out]" -map 2:a -b:v 1M -maxrate 3M -bufsize 4M -c:a aac -b:a 100k -shortest -map_metadata -1 -map_chapters -1 final.mp4

Однако вы можете столкнуться с ошибкой:

[Parsed_format_3 @ 0x55eb5dca3d80]  Автофильтр «Auto_scaler_0» между фильтром 'parsed_hwupload_cuda_2' и фильтром 'parsed_format_3'
ffmpeg: невозможно преобразовать между форматами, поддерживаемыми фильтром 'parsed_hwupload_cuda_2', и фильтром 'auto_scaler_0'

Устранение ошибок и оптимизация

Чтобы исправить описанную ошибку, необходимо внести несколько изменений в команду. Важно помнить, что не все фильтры могут корректно обрабатываться в GPU. Например, Alphaextract и Alphamerge не поддерживают аппаратное ускорение. Таким образом, предложенная оптимизация выглядит следующим образом:

ffmpeg -y -stream_loop -1 -hwaccel cuda -i screencast.webm -i ../src/assets/masks/circular.png -i overlay.mp4 \
                -filter_complex \
                "[0:v]setpts=2.0*PTS[screencast]; \
                [1:v]format=yuva420p,alphaextract[mask]; \
                [2:v]format=yuv420p[overlay]; \
                [overlay][mask]alphamerge,hwupload_cuda[masked]; \
                [screencast][masked]overlay_cuda=30:30[out]" \
                -map "[out]" -map 2:a -b:v 1M -maxrate 3M -bufsize 4M -c:a aac -b:a 100k -shortest -map_metadata -1 -map_chapters -1 final.mp4

Обратите внимание, что в этой команде мы убрали hwdownload для входных потоков, которые не используют GPU. Также измените параметр -hwaccel_output_format на более подходящий формат, такой как yuv420p.

Заключение

Используя аппаратное ускорение в FFMPEG, вы можете значительно ускорить процесс обработки видео. Однако важно помнить, что необходимо правильно настраивать используемые фильтры, чтобы избежать ошибок. Надеемся, что с нашими советами вы сможете оптимизировать свой рабочий процесс и достичь новых высот в видеомонтаже!

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *