mencoder
(входящего в проект mplayer
) или ffmpeg
. Вначале о mencoder
.Вариант 1: делаем видео с mencoder
Предположим, имеется набор изображений одинакового разрешения в формате JPEG, и файлы с изображениями названы таким образом, что
$ ls -1 *.jpgперечисляет будущие "кадры" в нужном порядке.
Собрать "кадры" в "фильм" можно так:
$ mencoder "mf://*.jpg" -vf scale=320:-11 -oac copy -ovc lavc -lavcopts vcodec=msmpeg4:vbitrate=2000 -ffourcc MP43 -o "output.avi"Эта команда создаёт видео-файл
output.avi
, с шириной кадра 320 пикселей и сохранением пропорций кадра (-11
). Видеопоток сжимается кодеком msmpeg4, это позволит просматривать ваш видеофайл пользователям Windows, у которых дополнительных кодеков не установлено, для этого же служит и ключ -ffourcc MP43
. Без него Windows Media Player не догадается о своей способности воспроизвести файл. Величина битрейта (vbitrate=2000
) влияет на качество видео: чем больше значение, тем меньше будут заметны артефакты сжатия, но и тем больше будет размер полученного файла.Файлы полученные таким образом воспроизводятся, насколько мне известно, без проблем любым видео-проигрывателем и в Linux, и в Windows.
Вариант 2: делаем видео с ffmpeg
Можно тоже самое сделать и с помощью
ffmpeg
. Вначале можно единообразно переименовать все исходные файлы, чтобы имена были, например, frame0000.jpg
: $ i=0 ; for f in *.jpg ; do mv "$f" $(printf "frame%04d.jpg" $i) ; i=$((i+1)) ; doneЗатем можно сделать собственно видео. Например, чтобы сделать видео в формате Flash (FLV):
$ ffmpeg -f image2 -r 2 -i frame%04d.jpg -s 320x240 -y -an -r 24 out.flvЗдесь
-r 2
указывает частоту кадров во входном потоке (две картики в секунду), -i frame%04d.jpg
определяет шаблон для имён файлов с отдельными кадрами, -s 320x240
масштабирует кадры, -y
говорит молча перезаписать файл с результатом, -an
говорит не писать звук, -r 24
устанавливает частоту кадров в видеопотоке на выходе. Можно в середине указать ещё -sameq
, чтобы сохранять качество картинки насколько это возможно.Чтобы сделать видео в другом формате, меняем имя файла на выходе, например, возможны такие варианты:
$ ffmpeg -f image2 -r 2 -i frame%04d.jpg -s 320x240 -y -an -r 24 -vcodec msmpeg4 -vtag MP43 out.avi
$ ffmpeg -f image2 -r 2 -i frame%04d.jpg -s 320x240 -y -an -r 24 -vcodec mpeg4 out.avi
$ ffmpeg -f image2 -r 2 -i frame%04d.jpg -s 320x240 -y -an -r 24 -vcodec libx264 out.avi
Пользователям Ubuntu для этого, вероятно, потребуется поставить пакеты с полноценным, неурезанным
ffmpeg
. На сегодня (2009-04) они называются libavcodec-unstripped-51
и libavcodec-unstripped-52
.