Вопрос или проблема
Я попробовал команду оттуда: 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
.