Вопрос или проблема
Я сейчас испытываю трудности с FFMpeg…
Я пытаюсь создать файлы DNxHD 1080p/24, 36Mb/s MXF из последовательности PNG файлов.
Моя текущая командная строка:
ffmpeg -y -f image2 -i /tmp/temp.%04d.png -s 1920x1080 -r 24 -vcodec dnxhd -f mxf -pix_fmt rgb32 -b 36Mb /tmp/temp.mxf
На что ffmpeg выдаёт мне следующий вывод:
Input #0, image2, from '/tmp/temp.%04d.png':
Duration: 00:00:01.60, start: 0.000000, bitrate: N/A
Stream #0.0: Video: png, rgb32, 1920x1080, 25 tbr, 25 tbn, 25 tbc
Output #0, mxf, to '/tmp/temp.mxf':
Stream #0.0: Video: dnxhd, yuv422p, 1920x1080, q=2-31, 36000 kb/s, 90k tbn, 24 tbc
Stream mapping:
Stream #0.0 -> #0.0
[mxf @ 0x1005800]unsupported video frame rate
Could not write header for output file #0 (incorrect codec parameters ?)
Есть несколько моментов, которые меня беспокоят:
- Выходной поток настаивает на yuv422p, который не поддерживает альфа-канал.
- 24 fps – это неподдерживаемая частота кадров видео? Я также пробовал 23.976, и получаю то же самое.
Я затем попробовал то же самое, но записывая в quicktime (все еще DNxHD) с:
ffmpeg -y -f image2 -i /tmp/temp.%04d.png -s 1920x1080 -r 24 -vcodec dnxhd -f mov -pix_fmt rgb32 -b 36Mb /tmp/temp.mov
Input #0, image2, from '/tmp/1274263259.28098.%04d.png':
Duration: 00:00:01.60, start: 0.000000, bitrate: N/A
Stream #0.0: Video: png, rgb32, 1920x1080, 25 tbr, 25 tbn, 25 tbc
Output #0, mov, to '/tmp/1274263259.28098.mov':
Stream #0.0: Video: dnxhd, yuv422p, 1920x1080, q=2-31, 36000 kb/s, 90k tbn, 24 tbc
Stream mapping:
Stream #0.0 -> #0.0
Press [q] to stop encoding
frame= 39 fps= 9 q=1.0 Lsize= 7177kB time=1.62 bitrate=36180.8kbits/s
video:7176kB audio:0kB global headers:0kB muxing overhead 0.013636%
Что, очевидно, работает, до определенной степени, но все еще имеет проблему с yuv422p, и поэтому теряет альфа-канал.
Если я собираюсь в QuickTime, то я могу получить то, что мне нужно, используя Shake, но моя главная цель здесь – уметь генерировать .mxf файлы.
Есть какие-нибудь мысли?
Спасибо
Сначала позвольте поблагодарить вас за этот пост, потому что он действительно помог мне получить некоторые инструкции о том, как кодировать в QuickTime DNxHD в ffmpeg. Я пытался конвертировать J2K MXF в DNxHD.
Что касается генерации mxf файлов с правильными параметрами, вы пробовали запустить вашу последовательность png через последнюю версию Avid Metafuze? Это предлагает много гибкости в таких вещах. Я создал замечательные 1080p 24fps DNxHD mxf из последовательностей файлов DPX. Metafuze также поддерживает последовательности png. Загрузите последовательность, отредактируйте LUT, введите ваши метаданные, создайте ALE и всё готово.
Если вы пользователь Linux, он работает без проблем на Linux через Wine.
Кодировщик FFmpeg DNxHD / DNxHR не поддерживает альфа-канал / прозрачность.
Ответ или решение
Создание файлов DNxHD MFX с альфа-каналом с помощью FFmpeg
Ваша задача заключается в создании файлов DNxHD 1080p/24 с альфа-каналом на основе последовательности изображений PNG. Рассмотрим вашу текущую команду и ошибки, на которые вы наткнулись, и предложим способы их исправления.
Анализ вашей команды
Ваш текущий запрос:
ffmpeg -y -f image2 -i /tmp/temp.%04d.png -s 1920x1080 -r 24 -vcodec dnxhd -f mxf -pix_fmt rgb32 -b 36Mb /tmp/temp.mxf
Проблемы, с которыми вы столкнулись:
-
Выходной формат без поддержки альфа-канала: DNxHD кодек действительно не поддерживает альфа-канал (прозрачность). Он использует цветовое пространство YUV 4:2:2 без альфа-компонента, что делает его неподходящим для ваших нужд.
-
Неподдерживаемая частота кадров: Вы также упомянули ошибку, связанную с частотой кадров. Поддержка частоты кадров может зависеть от используемого кодека и формата.
Рекомендации по решению проблемы
Чтобы создать MXF-файл с прозрачностью, рекомендуем рассмотреть использование DNxHR вместо DNxHD. DNxHR поддерживает дальнейшие расширенные форматы и имеет некоторые настройки для работы с альфа-каналом.
Вот ваша обновленная команда:
ffmpeg -y -f image2 -i /tmp/temp.%04d.png -s 1920x1080 -r 24 -vcodec dnxhr -pix_fmt yuva420p -b:v 36M -f mxf /tmp/temp.mxf
Комментарии к команде:
-
Используйте
dnxhr
вместоdnxhd
: Это позволит активировать поддержку альфа-канала. -
Формат пикселей
yuva420p
: Этот формат включает альфа-канал и сохраняет прозрачность в выходном файле. -
Безопасность частоты кадров: Убедитесь, что ваша версия FFmpeg поддерживает выбранную вами частоту кадров (в данном случае 24fps), если ошибки сохраняются, попробуйте меньшие значения, например 23.976.
Проблемы с форматом
Важно помнить, что не все контейнеры поддерживают все кодеки и режимы. Если ваши файлы продолжают давать ошибки, рассмотрите возможность использования другого контейнера, как, например, QuickTime.
Этим подходом можно получить желаемые результаты, не теряя информацию альфа-канала.
Дополнительные рекомендации
Если вы все еще сталкиваетесь с проблемами, обратите внимание на использование специализированного программного обеспечения, такого как Avid Metafuze или DaVinci Resolve, которые могут предоставить больше возможностей для работы с кодеками и метаданными. Они могут предложить поддержку для создания MXF файлов из PNG последовательностей с большей гибкостью и надежностью.
Заключение
Работа с DNxHD и DNxHR требует точного понимания кодеков и контейнеров, особенно когда дело касается альфа-канала. Применив указанные рекомендации, вы сможете создавать то, что необходимо, с сохранением нужного уровня качества и прозрачности.