Как я могу преобразовать видеофайл (например, mpeg) в коллекцию изображений? - PullRequest
5 голосов
/ 19 сентября 2011

Как я могу преобразовать видеофайл (например, mpeg) в коллекцию изображений?

Идеальный ответ будет охватывать как C ++, так и Java с использованием доступных библиотек, а также то, как вручную вырезать отдельные кадры из видеофайла для некоторого распространенного видеоформата.

Ответы [ 3 ]

6 голосов
/ 19 сентября 2011

Чтобы извлечь все кадры без потерь, используйте

ffmpeg -i "$input_file" -f image2 "outdir/%05d.png"

Если вы предпочитаете другой формат вывода, просто измените .png;по умолчанию ffmpeg выводит тип файла по расширению.

Опция -f image2 указывает ffmpeg записывать серию изображений."outdir/%05d.png" дает шаблон имени файла, в данном случае "<em>5-digit frame number</em>.png".

Если вы хотите извлекать только n кадров в секунду, добавьте параметр -r <em>n</em> после "$input_file".(Я думаю, n может быть с плавающей запятой.)

В случае, если ваше видео - Motion JPEG (mjpeg), вместо этого используйте:

ffmpeg -i "$input_file" -vcodec copy -f image2 "outdir/%05d.jpg"

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

Для получения дополнительной информации / других параметров см. справочную страницу или документацию (поиск по image2).

3 голосов
/ 19 сентября 2011

Вы можете сделать это, используя ffmpeg с -vcodec png. Например, это преобразовало бы my_video.avi в кадры с пятизначными числами:

ffmpeg -i my_video.avi -vcodec png frame% 05d.png

Вы также можете указать желаемую частоту кадров и разрешение. Вы можете запустить ffmpeg -codecs, чтобы увидеть все доступные форматы.

0 голосов
/ 05 декабря 2011

Вероятно, вы можете использовать apiexample.c в библиотеке libavcodec ffmpeg, которая позволит вам увидеть, как взять буфер кадра, чтобы легко кодировать его в потоке mpeg.

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

Для Java попробуйте использовать Java Media Framework .

...