FFmpeg: Ошибка при открытии декодера для входного потока #0:0: Недопустимый аргумент

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

Привет, я пытаюсь транскодировать поток hevc в h264 с использованием ffmpeg

$ ffmpeg -c:v hevc_v4l2m2m -i video.mkv -c:v h264_v4l2m2m -c:a aac out.mp4

Я хочу, чтобы ffmpeg явно декодировал входящее видео hevc с использованием API hevc_v4l2m2m, а затем кодировал видео в h264 codec с использованием API h264_v4l2m2m.

Однако, когда я делаю это, ffmpeg выдает следующую ошибку:

[hevc_v4l2m2m @ 0x556a56fcb0] не удалось найти действительное устройство
[hevc_v4l2m2m @ 0x556a56fcb0] не удается настроить декодер
Карта потока: Поток #0:0 -> #0:0 (hevc (hevc_v4l2m2m) -> h264 (h264_v4l2m2m))
Поток #0:1 -> #0:1 (копия) Ошибка при открытии декодера для входящего потока #0:0: Неверный аргумент

Есть какие-то советы, что я делаю неправильно?

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

ffmpeg -i video.mkv -c:v h264_v4l2m2m -c:a copy out.mp4

чтобы проверить, возможно ли аппаратное кодирование h264. Вы всегда можете воспользоваться программным декодированием/кодированием с

ffmpeg -i video.mkv -c:v libx264 -c:a copy out.mkv

.

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

Проблема, с которой вы столкнулись при использовании FFmpeg, связана с транскодированием видео из формата HEVC в H.264 с использованием API hevc_v4l2m2m и h264_v4l2m2m. Ошибка "Could not find a valid device" и "can’t configure decoder" указывает на то, что FFmpeg не может получить доступ к необходимому аппаратному устройству для декодирования потока HEVC. Разберёмся в этой проблеме и возможных решениях.

Теория

FFmpeg предоставляет поддержку для видео- и аудиокодеков как с использованием программных, так и аппаратных средств. При этом вы можете использовать как встроенные кодеки, так и аппаратное ускорение с помощью определённых API, таких как v4l2m2m, которое предназначено для работы на устройствах, поддерживающих Video4Linux2 Media Memory-to-Memory (V4L2 M2M).

v4l2m2m — это часть API Video4Linux2, разработанная для работы с видеоустройствами на уровне ядра Linux, поддерживающая аппаратное ускорение для энкодеров и декодеров. Однако поддержка v4l2m2m зависит от вашего оборудования и его драйверов. Если соответствующее аппаратное устройство или драйвер не доступны, FFmpeg не сможет их использовать, что приводит к ошибке "Invalid argument".

Пример

Рассмотрим вашу команду:

ffmpeg -c:v hevc_v4l2m2m -i video.mkv -c:v h264_v4l2m2m -c:a aac out.mp4

Вы явно указываете использовать аппаратные кодеки для декодирования (hevc_v4l2m2m) и кодирования (h264_v4l2m2m) видео. Сообщения об ошибке указывают на то, что FFmpeg не удалось найти соответствующее аппаратное устройство для декодера HEVC.

Применение

Шаг 1: Проверка поддерживаемых кодеков и устройств

Прежде всего убедитесь, что ваше устройство поддерживает v4l2m2m для данного типа кодеков. Выполните команду:

ffmpeg -hwaccels

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

Также проверьте, какие именно кодеки поддерживаются на вашем устройстве:

v4l2-ctl --list-formats-ext

Шаг 2: Проверка драйверов

Убедитесь, что у вас установлены последние драйвера для видеоустройства и ядро Linux поддерживает V4L2. Иногда установка или обновление видеодрайвера решает проблему.

Шаг 3: Использование программного кодека

Если переход на аппаратное декодирование невозможен, можно использовать программные кодеки как альтернативу. Попробуйте выполнить команду:

ffmpeg -i video.mkv -c:v libx264 -c:a aac out.mp4

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

Шаг 4: Тестирование аппаратного кодека для кодирования

Проверьте, работает ли хотя бы аппаратное кодирование видео в H.264. Выполните:

ffmpeg -i video.mkv -c:v h264_v4l2m2m -c:a copy out.mp4

Если это выполняется успешно, значит проблема связана исключительно с декодированием HEVC.

Итог

Подрядная ошибка "Invalid argument" в контексте использования FFmpeg связана с некорректной настройкой или отсутствием поддержки необходимого аппаратного ускорения вашего оборудования. Проведите диагностику, описанную выше, чтобы точно идентифицировать проблему. При отсутствии аппаратной поддержки, использование программных кодеков может стать решением на время поиска более подходящего оборудования или обновления программного обеспечения.

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

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