Как кодировать поток значений RGBA в видео? - PullRequest
2 голосов
/ 30 августа 2011

Более конкретно: у меня есть последовательность 32-битных целых чисел без знака RGBA для пикселей - например, 640 целых чисел на строку, начиная с левого пикселя, 480 строк на кадр, начиная с верхней строки, повторите для n кадров.Есть ли простой способ передать это в ffmpeg (или другой кодировщик) без предварительного кодирования в общий формат изображения?

Я предполагаю, что ffmpeg - лучший инструмент для меня, чтобы использовать в этом случае, ноЯ открыт для предложений (выходной формат видео не имеет большого значения).


Я знаю, что документация просветит меня, если я просто знаю правильные ключевые слова ... На случай, если язадавая неправильный вопрос, вот что я пытаюсь сделать на самом высоком уровне:

У меня есть код ActionScript, который рисует и анимирует в дереве отображения, и я обернул его в приложение AIR, которое рисуетBitmapData покадрово.AIR оказался крайне неэффективным для непосредственного кодирования этого вывода - лучшее, что мне удалось - это несколько кадров в секунду, и мне нужно рендерить как минимум 15 кадров в секунду, предпочтительно больше, чем 100 кадров в секунду, которые я получаю из ffmpeg, когдапередать PNG изображения (AIR может занять более 1 секунды, чтобы закодировать один 640x480 PNG ... ужасно).Вместо кодирования внутри AIR я могу отправлять необработанные байтовые данные в кодировщик или на диск так же быстро, как они отображаются.

Если вам интересно, почему я использую Actionscript для рендеринга анимации или почему она имеетБыть закодированным быстро, не надо.Достаточно сказать, что кадры вычисляются во время выполнения (например, не сохраняются как анимация в файле .swf), у меня есть очень большое количество видео для создания и ограниченное время для этого, и используется что-то другое, кромеActionscript для создания фреймов не вариант.

1 Ответ

2 голосов
/ 20 сентября 2011

Решение, которое я придумала, заключается в использовании x264 вместо ffmpeg.

В целях тестирования я сохранил кадры в виде файлов: 00.bin, 01.bin, .. nn.bin, содержащих640x480x4 значения пикселей ARGB.Команда, которую я использовал, чтобы проверить, что подход возможен, является следующим ужасным хаком:

cat *.bin | \
perl -e 'while (sysread(STDIN,$d,4)){print pack("N",unpack("V",$d));}' | \
x264 --demuxer raw --input-csp bgra --fps 15 --input-res 640x480 --qp 0 \
     --muxer flv -o out.flv -

Уродливый фрагмент perl, в котором есть хак для обмена четырехбайтовым порядком байтов, так как x265 может принимать только BGRA имои тестовые файлы содержали ARGB.

В двух словах:

  1. Actionscript отображает значения ARGB в ByteArray
  2. , заменяет порядковый номер в BGRA
  3. и передает егов x264: необработанный демультиплексор, цветовое пространство bgra, укажите fps / w / h / quality
  4. ??
  5. прибыль.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...