Превратите последовательность изображений в видео с прозрачностью - PullRequest
30 голосов
/ 14 марта 2009

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

У меня довольно большая последовательность изображений, состоящая из пронумерованных кадров (вывод Maya, для чего он стоит). Изображения в настоящее время в формате Targa (.tga), но я мог бы преобразовать их в PNG или другой произвольный формат, если это имеет значение. Важно то, что у них есть альфа-канал.

Что я хочу сделать, так это программно превратить их в видеоклип. Формат на самом деле не имеет значения, но он должен быть без потерь и иметь альфа-канал. Несжатое видео в контейнере Quicktime, вероятно, будет идеальным.

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

Итак, что здесь правильно? Было бы неплохо использовать инструмент командной строки, такой как ffmpeg, но подойдет любое решение, которое работает в Windows и может быть вызвано из скрипта.

Примечание. Наличие альфа-канала в вашем видео на самом деле не так уж редко, и очень полезно, если вы хотите скомпоновать его поверх другого видеоклипа или неподвижного изображения. Насколько мне известно, несжатое видео, кодек Quicktime Animation и кодек Sorenson Video 3 поддерживают прозрачность, и я слышал, что и H.264 тоже. Все, о чем мы на самом деле говорим, это 32-битная глубина цвета, и это довольно широко поддерживается; и файлы QuickTime .mov, и файлы Windowss .avi могут справиться с этим, и, вероятно, и многое другое.

Quicktime Pro более чем рад превратить последовательность изображений в 32-битный файл .mov. Нажмите «Экспортировать», измените глубину цвета на «Миллионы цветов +», выберите кодек Animation, настройте качество до 100, и вы получите сжатое видео без потерь, с альфа-каналом, и оно будет воспроизводиться практически в любом месте с момента кодека был частью Quicktime с версии 1.0. Проблема в том, что Quicktime Pro не имеет какого-либо интерфейса командной строки (по крайней мере, в Windows). ffmpeg поддерживает кодирование с использованием кодека Quicktime Animation (который он называет qtrle), но поддерживает только битовую глубину 24 бита.

Проблема не в том, что не найден видеоформат, поддерживающий альфа-канал. Quicktime Animation была бы идеальной, но даже несжатое видео должно работать. Проблема в том, чтобы найти инструмент, который его поддерживает.

Ответы [ 5 ]

27 голосов
/ 07 декабря 2010

Да, ffmpeg, безусловно, поддерживает альфа-канал в видеофайле. Похоже, что не все кодеки в ffmpeg поддерживают альфа-версию. Движение PNG в файле .MOV является хорошей комбинацией для альфа.

Для кодирования / импорта изображений с альфа-канала в видео с альфа-кодом попробуйте: ffmpeg -i %d.png -vcodec png z.mov

Quicktime будет играть это.

Для декодирования / экспорта видео с альфа-каналами к изображениям с альфа-версией: ffmpeg -i z.mov -f image2 export2\%d.png

Обратите внимание, что я экспортировал их в каталог с именем 'export2'. Не забудьте оставить% d частей там. Эти команды будут работать как есть в системе Windows. Пользователям Linux / Mac может потребоваться добавить кавычки и поменять местами некоторые \ for / как обычно.

14 голосов
/ 18 октября 2012

Я знаю, что эта тема немного устарела, но я все равно пишу.

FFMPEG с Quicktime Animation (RLE) или FFVHUFF / HUFFYUV подойдет.

  • ffmpeg -i ваша последовательность% d.png -vcodec qtrle movie_with_alpha.mov
  • ffmpeg -i ваша последовательность% d.png -vcodec ffvhuff movie_with_alpha.avi
  • ffmpeg -i ваша последовательность% d.png -vcodec huffyuv movie_with_alpha.avi

Вы получите видеофайлы с сохранением прозрачности (альфа-канала).

Я также слышал, что вариант On2-VP6 (пока не WebM-VP8) может обрабатывать альфа, но у меня нет их кодека под рукой.

Это тоже работает. - ffmpeg -i ваша последовательность% d.png -vcodec png movie_with_alpha.mov

3 голосов
/ 29 января 2014

Для веб-разработчиков, которые поднимают этот вопрос и в отчаянии бьют себя об стену ... Можно создать прозрачное видео WebM , но в данный момент вам может понадобиться скомпилировать ffmpeg и необходимые библиотеки из источник.

Я хотел отобразить видео Blender на веб-сайте, но сохранить прозрачность. Первым шагом было рендеринг вывода Blender в виде отдельных файлов PNG. После этого я потратил довольно много времени, пытаясь заставить ffmpeg конвертировать эти файлы PNG в одно видео. Основная команда проста:

ffmpeg -i input%04d.png output.webm

Эта команда загружает все PNG с именами от input0000.png до input9999.png и превращает их в видео. Прозрачность была быстро потеряна. Просматривая вывод, я понял, что ffmpeg старательно выбирает непрозрачный формат:

Incompatible pixel format 'yuva420p' for codec 'flv', auto-selecting format 'yuv420p'

В этот момент я понял, что мне, возможно, придется перекомпилировать ffmpeg с нуля. Я боролся с несколькими другими инструментами, но в конечном итоге вернулся к ffmpeg. После компиляции libvbx и ffmpeg из последнего источника все заработало.

1 голос
/ 21 октября 2011

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

http://away3dtutorials.blogspot.com/2011/02/ffmpeg-to-compile-jpeg-to-video-with.html

0 голосов
/ 29 апреля 2009

Cody

Вы можете написать свою собственную утилиту командной строки, используя Quicktime SDK для Windows , я бы порекомендовал придерживаться высокоуровневого QuickTime API apis и углубляться только в C-API, если это действительно необходимо.

-Nick

...