ffmpeg – создание файлов DNxHD MFX с альфа-каналом

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

Я сейчас испытываю трудности с 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

Проблемы, с которыми вы столкнулись:

  1. Выходной формат без поддержки альфа-канала: DNxHD кодек действительно не поддерживает альфа-канал (прозрачность). Он использует цветовое пространство YUV 4:2: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

Комментарии к команде:

  1. Используйте dnxhr вместо dnxhd: Это позволит активировать поддержку альфа-канала.

  2. Формат пикселей yuva420p: Этот формат включает альфа-канал и сохраняет прозрачность в выходном файле.

  3. Безопасность частоты кадров: Убедитесь, что ваша версия FFmpeg поддерживает выбранную вами частоту кадров (в данном случае 24fps), если ошибки сохраняются, попробуйте меньшие значения, например 23.976.

Проблемы с форматом

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

Этим подходом можно получить желаемые результаты, не теряя информацию альфа-канала.

Дополнительные рекомендации

Если вы все еще сталкиваетесь с проблемами, обратите внимание на использование специализированного программного обеспечения, такого как Avid Metafuze или DaVinci Resolve, которые могут предоставить больше возможностей для работы с кодеками и метаданными. Они могут предложить поддержку для создания MXF файлов из PNG последовательностей с большей гибкостью и надежностью.

Заключение

Работа с DNxHD и DNxHR требует точного понимания кодеков и контейнеров, особенно когда дело касается альфа-канала. Применив указанные рекомендации, вы сможете создавать то, что необходимо, с сохранением нужного уровня качества и прозрачности.

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

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