четверг, 25 января 2007 г.

Работаем с FFmpeg.

В предыдущей статье - Как конвертировать .flv в .mpg (.avi) - я описал как конвертировать видео с .flv в .mpg (.avi). А сегодня хочу поведать о том:

как можно извлечь аудио из видео-файла;
как создать thumbnail c файла .flv;
как создать видео файл из набора изображений в формате JPG.

Все это я буду делать с помощью утилиты FFmpeg. Поэтому для начала расскажу немного о ней.


FFmpeg - это набор программ с помощью которых можно записывать, перекодировать и проигрывать аудио и видео файлы. Данные программы используют библиотеку libavcodec. FFmpeg изначально разрабатывался под Linux, но на данный момент эту программу можно использовать из-под большинства операционных систем, включая Windows. Стоит также заметить, что большинство разработчиков FFmpeg также участвуют и в разработке Mplayer, поэтому эти два проекта тесно связаны. Следовательно саму программу и документацию к ней можно найти на сервере Mplayer.

В случае Debian (Ubuntu) программу устанавливаем стандартным способом:
$sudo apt-get install ffmpeg
На самом деле это не одна программа, а пакет, состоящий из различных утилит:

ffmpeg - это утилита позволяющая конвертировать видео файлы в различные форматы. Также она позволяет захватывать и кодировать видео с TV-карт в режиме реального времени.

ffserver - это HTTP (RTSP is being developed) мультимедиа сервер для телевещания
ffplay - медиаплеер.
libavcodec, libavformat, libavutil, libpostproc, libswscale - различные библиотеки

Рассмотрим некоторые полезные примеры применения ffmpeg:

Вытягиваем аудио с видео файла:

Не буду сильно отклонятся от темы предыдущего поста, поэтому экспериментировать буду с файлами .flv.
В комментариях к предыдущему посту были упомянуты два расширения для Firefox, с помощью которых можно скачать видео файл в формате .flv, например с YouTube, а именно - UnPlug и Fast Video Download. Будем считать, что с первой половиной задания мы справились - файл скачали. Теперь извлекаем из него аудио:
ffmpeg -i video.flv -f mp3 -vn -acodec copy audio.mp3
где,
-i - задает файл, из которого будем извлекать аудио.
-f - задает формат аудио файла.
-vn - отключает запись видео.
-acodec - задает аудио кодек.

Полученный файл можно прослушать в ffplay:
$ffplay audio.mp3
Также можно перекодировать видео с .flv в .avi и после этого извлечь аудио с .avi c помощью mplayer:
mplayer -dumpaudio video.avi
(Извлечь напрямую с .flv у меня не получилось)

Еще можно воспользоваться услугами специально созданного для этого сайта http://flv2mp3.com/. Загружаем на сайт нужный файл или указываем его URL и ждем когда нам на E-mail придет аудио с этого файла.


Создаем thumbnail c видео-файла:

ffmpeg -i video.flv -an -ss 00:00:02 -an -vframes 1 -y %d.jpg
где
-an - запрещает перекодировку
-ss - время. В нашем случае это будет кадр на второй секунде (избегаем снимка черного экрана)
-vframes - устанавливает количество кадров
-y - переписать полученный файл

В результате выполнения данной программы, появится файл 1.jpg, представляющий собой кадр второй секунды видео.

Также, можно создать thumbnail и в PNG-формате:
ffmpeg -i video.flv -vcodec png -vframes 1 -an -f rawvideo  png.png
где
-vcodec - выставить видео кодек.


Создаем видео с набора JPG файлов:

Заходим в папку, в которой находятся изображения в формате JPG и запускаем следующую команду:
ffmpeg -r 5 -b 1800 -i %03d.jpg video.avi
(предполагается что названия файлов имеют следующий вид - 001.jpg, 002.jpg)

-r - задает количество кадров в секунду
-b - устанавливает видеобитрейт в килобитах в секунду (по умолчанию 200 кб/с)

Полученный файл просматриваем с помощью ffplay:
$ ffplay video.avi
Таким образом, на основе нескольких примеров я показал что можно сделать с помощью программы FFmpeg. Естественно, это лишь малая часть того, что может делать данная утилита. Для более подробной информации обратитесь к man ffmpeg или на сайте разработчика.

Используемые источники:
1.Making movies from image files using ffmpeg/mencoder.
2.Using ffmpeg to create jpg thumbnails from flv files
3. copy-mode extract of audio from youtube flv video

5 коммент.:

virens комментирует...

ffmpeg - хорошо, а mencoder лучше :-) Хотя не все flv-шки перекодируются так. Надо кодеки обновлять...

serhiy комментирует...

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

calibra комментирует...

Эту программу можно использовать из-под большинства операционных систем, включая Windows.

Canada Viagra комментирует...

Както раньше не сталкивался с вопросами перекодирования видео. Поэтому не сильно хорошо разбираюсь в предназначенных для этого программах. Но в последнее время это меня заинтересовало, не так со стороны

Sergei комментирует...

с помощью ffmpeg лучший с ним можно делать много вещей например захват видео с экрана и звука со звуковой карты

ffmpeg -f alsa -i default -f x11grab -r 30 -s wxga -i :0.0 -sameq выходной_файл.mkv # со звуком с линейного выхода (колонок)

видео запись с вебки
ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 ~/выходной_файл.mkv # запись без звука
ffmpeg ffmpeg -f alsa -i hw:0 -f video4linux2 -s 640x480 -i /dev/video0 ~/выходной_файл.mkv # запись звуком с микрофона

взято с

http://linuxffmpeg.blogspot.ru/