FFmpeg: как увеличить разрешение видео с помощью scale_qsv?

Вопрос или проблема

Я попробовал команду оттуда: https://trac.ffmpeg.org/wiki/Hardware/QuickSync :

ffmpeg -hwaccel qsv -c:v hevc_qsv -i input.mp4 -vf 'vpp_qsv=framerate=60,scale_qsv=w=1920:h=1080' -c:v h264_qsv output.mp4

и заменил hevc_qsv на h264_qsv:

ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -vf 'vpp_qsv=framerate=60,scale_qsv=w=1920:h=1080' -c:v h264_qsv output.mp4

Вот вывод, который я получил:

WARNING: defaulting child_device_type to AV_HWDEVICE_TYPE_DXVA2 for compatibility with old commandlines. This behaviour will be removed in the future. Please explicitly set device type via "-init_hw_device" option.
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (h264_qsv) -> h264 (h264_qsv))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[AVFilterGraph @ 0000016db059aac0] No such filter: 'scale_qsv=w=1920:h=1080'
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0
[aac @ 0000016db0c60740] Qavg: 65536.000
[aac @ 0000016db0c60740] 2 frames left in the queue on closing
Conversion failed!

Я нахожусь на компьютере с Intel 11-го поколения i5-1135G7, который, как я знаю, поддерживает кодеки QSV.

Следующая команда работает (для конкретной аппаратной и программной конфигурации):

ffmpeg -y -init_hw_device qsv=hw,child_device_type=dxva2 -hwaccel qsv -hwaccel_output_format qsv -c:v h264_qsv -i input.mp4 -vf "vpp_qsv=framerate=60,scale_qsv=w=640:h=480" -c:v h264_qsv output.mp4


Создайте input.mp4 для тестирования:
Декодер h264_qsv не поддерживает формат пикселей yuv444p (во всяком случае, не с моим оборудованием).

Чтобы убедиться, что формат пикселей — это yuv420p, создайте файл input.mp4 (для тестирования):

ffmpeg -y -f lavfi -i testsrc=size=320x240:rate=10:duration=10 -vcodec libx264 -pix_fmt yuv420p input.mp4


Используемая программная конфигурация для тестирования:

  • Windows 10 с обновленным драйвером Intel HD Graphics.
  • Версия FFmpeg 5.0.1-full_build-www.gyan.dev

Используемая аппаратная конфигурация для тестирования:

  • Intel Core i7 6-го поколения (iGPU: Intel HD Graphics 530).
  • Основной монитор подключен к Intel GPU (при наличии также NVIDIA GPU).

Примечание,
Есть предупреждающее сообщение:

[h264_qsv @ 0000025ac57dc040] A decode call did not consume any data: expect more data at input (-10)

Но вывод, похоже, в порядке.

Ответ или решение

Для выполнения апскейлинга видео с использованием фильтра scale_qsv в FFmpeg, вам необходимо убедиться, что вы правильно настроили среду и используете совместимые параметры. Ниже приведены шаги и рекомендации для решения вашей проблемы.

Шаг 1: Подготовка и установка окружения

Убедитесь, что у вас установлена последняя версия FFmpeg, поддерживающая QuickSync, а также обновлены драйвера графической карты Intel. Используйте команду, чтобы проверить версию FFmpeg:

ffmpeg -version

Шаг 2: Проверка совместимости кодеков

Ваша проблема может быть связана с тем, что кодек h264_qsv не поддерживает формат пикселей yuv444p. Рекомендуется убедиться, что ваш видеопоток имеет формат пикселей yuv420p. Для этого вы можете создать тестовое видео с подходящими параметрами с помощью следующей команды:

ffmpeg -y -f lavfi -i testsrc=size=320x240:rate=10:duration=10 -vcodec libx264 -pix_fmt yuv420p input.mp4

Шаг 3: Запуск команды для апскейлинга

Попробуйте использовать следующую команду для изменения разрешения при помощи QuickSync:

ffmpeg -y -init_hw_device qsv=hw,child_device_type=dxva2 -hwaccel qsv -hwaccel_output_format qsv -c:v h264_qsv -i input.mp4 -vf "vpp_qsv=framerate=60,scale_qsv=w=1920:h=1080" -c:v h264_qsv output.mp4

Шаг 4: Устранение предупреждений

При выполнении команды вы можете столкнуться с предупреждением:

WARNING: defaulting child_device_type to AV_HWDEVICE_TYPE_DXVA2 for compatibility with old commandlines.

Это предупреждение связано с тем, что FFmpeg использует устаревший способ инициализации устройства. Однако оно не должно повлиять на выполнение вашей команды.

Если вы увидите сообщение о том, что A decode call did not consume any data, это также может быть связано с неверными параметрами видеопотока. Убедитесь, что ваш ввод правильный и бесплатен от возможных проблем.

Заключение

Если после всех вышеперечисленных действий проблема не была решена, возможно, вам потребуется проверить поддержку кодеков вашего оборудования и конфиденциальности кодеков, а также попробовать выполнить апскейлинг на другом устройстве. Если есть возможность, проведите тестирование на более новой версии FFmpeg или на системе с другим процессором Intel.

Таким образом, выполнение данных шагов должно помочь вам успешно выполнить апскейлинг видео при помощи scale_qsv.

Оцените материал
Добавить комментарий

Капча загружается...