7
Кодирование аудио/видео при помощи ffmpeg FFmpeg - полноценное кроссплатформное решение для записи, конвертации и воспроизведения звука и видео. Это очень быстрый аудиовидеоконвертер, в состав которого входит лучшая библиотека аудио- и видеокодеков libavcodec. Кроме того, FFmpeg подходит и для записи потокового звука и видео. Компоненты Проект состоит из нескольких компонент: ffmpeg - инструментальное средство командной строки для преобразования одного формата видео файлов в другой. С его помощью также можно с ТВ тюнера в режиме реального времени захватывать и кодировать видеоизображение; ffserver является HTTP и RTSP мультимедийным потоковым сервером, предназначенным для прямых трансляций. С его помощью можно во время прямого эфира выполнять временной сдвиг видеоизображения; ffplay является простым медиаплеером, базирующимся на библиотеках SDL и FFmpeg; ffprobe — инструментальное средство командной строки для отображения (анализа — прим.пер.) мультимедийной информации; libavcodec является библиотекой, в которой находятся все аудио и видео кодеки пакета FFmpeg. Для того, чтобы получить максимальную производительность и возможность их повторного использования, большинство кодеков были разработаны с нуля; libavformat - это библиотека, в которой содержатся средства для работы с форматами аудио и видео контейнеров; libavutil является вспомогательной библиотекой, в которой находятся процедуры, общие для различных частей FFmpeg. В этой библиотеке есть

Кодирование аудио видео при помощи ffmpeg

  • Upload
    fileevk

  • View
    252

  • Download
    9

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Кодирование аудио видео при помощи ffmpeg

Кодирование аудио/видео при помощи ffmpeg

FFmpeg - полноценное кроссплатформное решение для записи, конвертации и воспроизведения звука и видео.

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

Компоненты

Проект состоит из нескольких компонент: ffmpeg - инструментальное средство командной строки для преобразования одного формата видео файлов в другой.С его помощью также можно с ТВ тюнера в режиме реального времени захватывать и кодировать видеоизображение;

ffserver является HTTP и RTSP мультимедийным потоковым сервером, предназначенным для прямых трансляций. С его помощью можно во время прямого эфира выполнять временной сдвиг видеоизображения;

ffplay является простым медиаплеером, базирующимся на библиотеках SDL и FFmpeg;

ffprobe — инструментальное средство командной строки для отображения (анализа — прим.пер.) мультимедийной информации;

libavcodec является библиотекой, в которой находятся все аудио и видео кодеки пакета FFmpeg. Для того, чтобы получить максимальную производительность и возможность их повторного использования, большинство кодеков были разработаны с нуля;

libavformat - это библиотека, в которой содержатся средства для работы сформатами аудио и видео контейнеров;

libavutil является вспомогательной библиотекой, в которой находятся процедуры, общие для различных частей FFmpeg. В этой библиотеке есть

Page 2: Кодирование аудио видео при помощи ffmpeg

adler32, crc, md5, sha1 декомпрессор lzo, кодер / декодер Base64, кодер / декодер des, кодер / декодер rc4 и кодер / декодер aes;

libpostproc - это библиотека, в которой находятся процедуры постобработки видеозаписей;

libswscale - это библиотека, в которой находятся процедуры масштабирования и цветового попиксельного преобразования видеоизображений;

libavfilter является фильтром, заменяющим vhook, который позволяет выполнять модификацию или анализ видео / аудио записи между декодированием и кодированием.

Основные ключи:

-i file исходный файл видео; -vcodec для указания видеокодеков(например libx264),-acodec для аудиокодека(например mp3),-s (size) для размера кадра, указывается как Ширинф x Высота (WxH),-r устанавливает количество кадров, генерируемых в буфере кадров FPS (по умолчанию — 25 кадров),-b для битрейта видео,-f — формат видео на выходе (например flv);-ar для частоты дискретизации звука(должна быть кратна 11кГц, например- 22050 ),-ab для битрейта аудио (например 32k)-ac — количество каналов звука (например 2)

-g — плотность ключевых кадров (по ним осуществляется перемотка, чем плотнее (1- каждый кадр ключевой) — тем лучше для перемотки, но значительно вырастает размер файла), если значение равно FPS(-r), то ключевой кадр вставляется каждую секунду (так по умолчанию);-vframes — ограничение на количество кадров видео(например 100);-y — перезаписать файл, если он уже существует;-vn отключение записи видео-ss - указывается начальная позиция в секундах; также поддерживается формат "hh:mm:ss[.xxx]"-t ограничивается продолжительность преобразования / захвата, указываемая в секундах; также поддерживается формат "hh:mm:ss[.xxx]". -deinterlace - использовать деинтерлейсинг видео (создания одного кадра из двух полукадровчересстрочного формата для дальнейшего вывода на экран с прогрессивной развёрткой, такой как компьютерный монитор. Применяется в компьютерных системах обработки видео, плоскопанельных телевизорах и т. д.).Примечание: Теперь этот параметр считается устаревшим и вместо него используется фильтр вида -vf "yadif=0:0:0"-vf - применение фильтров к входному потоку (Просмотреть, какие

Page 3: Кодирование аудио видео при помощи ffmpeg

фильтры доступны можно командой: ffmpeg -filters).Более полное описание фильтров можно посмотреть в Libavfilter DocumentationПримеров использования (привед только значение опции):

-vf "pad=568:320:78:0:black [o1]; movie=/path/to/logos/logo1.png [logo];\[o1][logo] overlay=main_w-overlay_w:0 [out1];[out1] yadiff=0:0:0 [out]"

# Удаление всех опций PAD -vf pad=width:height:x:y:color# width, height- ширина и высота соответственно выходного видео# x, y смещение, где разместить входного изображения в мягкой области # по отношению к верхней / левой границы выходного изображения. # Выражение х может ссылаться на значение, установленное по # выражению у, и наоборот. По умолчанию значение х и у = 0.# color - цвет полос для заполнения. Задается Hex значением# 0xRRGGBB[AA]. Значение по умолчанию - "black".pad=568:320:78:0:black [o1];

# movie - чтение видеопотока с контенера. В данном случае он используется для установки своего логотипа на видеоmovie=/path/to/logos/logo1.png [logo];

# overlay - накладывает одно видео (помечено как [logo] ) поверх второго# (помечено как [o1])[o1][logo] overlay=main_w-overlay_w:0 [out1]# yadif - убирает деинтерлейс с входящего видео [out1]# и выдает его на выход [out][out1] yadiff=0:0:0 [out]Примечание: кроме базовых ключей для ffmpeg можно использовать такжеи специальные ключи для библиотек кодирования для тюнинга.

Дополнительные ключи при использовании кодака libx264:Т.е. для ffmpeg указана опция -vcodec libx264.А опции для libx264 можно также посмотреть в список ключей libx264 -trellis <0,1,2> Используется для улучшения качества изображения (результат ~5%). Кодирование занимает немного больше времени. В целомрекомендуется использовать (например: -trellis 2)Значения:0 - отключен1: включен только при финальном кодировании2: Включен всегда

-presets или -vpre использует пред установки, конфиги которых хранятсяв PREFIX/share/ffmpeg или $HOME/.ffmpeg (например в gentoo - /usr/share/ffmpeg).Неплохо описано в статье HOWTO: ffmpeg & x264 presetsПример использования - "-presets baseline" укажет использовать настройкииз файла /usr/share/ffmpeg/libx264-baseline.ffpreset. Можно также и самомусоставлять файлы прессетов

Page 4: Кодирование аудио видео при помощи ffmpeg

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

В следующем примере мы сконвертируем файл mpg в avi с использованиемвидеокодека mpeg4 с размером кадра 320×240 и битрейтом видео 300 кбит/с. Для звука используем кодек mp3 с битрейтом 64 кбит/с и частотой дискретизации 22 050 Гц. Кроме того, принудительно укажем формат файла avi.

ffmpeg -i file.mpg -vcodec mpeg4 -s 320x240 -b 300k -r 10 \-acodec mp3 -ar 22050 -ab 64k -f avi file.avi

Примечание: Если некоторые из этих параметров пропущены, FFmpeg будет использовать значения по умолчанию.

Примеры использования:

Получение информации о файле.

# ffmpeg -i 116661ffmpeg version 0.7.6, Copyright (c) 2000-2011 the FFmpeg developers built on Dec 1 2011 14:40:04 with gcc 4.5.3 configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --disable-static --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --disable-stripping --disable-debug --disable-doc --disable-network --disable-vaapi --disable-ffplay --disable-vdpau --enable-libmp3lame --enable-libvo-aacenc --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libfaac --enable-nonfree --disable-indev=v4l --disable-indev=alsa --disable-indev=oss --disable-indev=jack --disable-outdev=alsa --disable-outdev=oss --disable-altivec --disable-avx --enable-hardcoded-tables libavutil 50. 43. 0 / 50. 43. 0 libavcodec 52.122. 0 / 52.122. 0 libavformat 52.110. 0 / 52.110. 0 libavdevice 52. 5. 0 / 52. 5. 0 libavfilter 1. 80. 0 / 1. 80. 0 libswscale 0. 14. 1 / 0. 14. 1 libpostproc 51. 2. 0 / 51. 2. 0Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '116661': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2mp41 creation_time : 1970-01-01 00:00:00 title : M_P_HORROR_DISC3B M_P_ encoder : DigiArty AV Encoder Core genre : MyDVD

Page 5: Кодирование аудио видео при помощи ffmpeg

Duration: 01:02:07.46, start: 0.000000, bitrate: 1932 kb/s Stream #0.0(und): Video: mpeg4, yuv420p, 708x540 [PAR 54:55 DAR 354:275], 1799 kb/s, 30 fps, 30 tbr, 30 tbn, 30 tbc Metadata: creation_time : 1970-01-01 00:00:00 Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s Metadata: creation_time : 1970-01-01 00:00:00At least one output file must be specified

Просмотр поддерживаемых форматов Примечание:по умолчанию ffmpeg е поддерживает кодаки h264, для этого нужно пересобирать его из исходных кодов

# ffmpeg -formats...Конвертация формата видеофайлов Предположим, у нас есть фильм в формате wmv и нам надо конвертироватьего в avi. Следующая команда легко это сделает.

ffmpeg -i input_file.wmv output_file.aviЗдесь input_file файл исходного формата, а output_file формат, в который нам надо преобразовать файл. Для конвертации avi в mp3 запустите следующую команду:

ffmpeg -i file.avi file.mp3

Для конвертации avi в dvd для NTSC (распространенный в Северной Америке стандарт), применяйте параметр -target:

ffmpeg -i file.avi -target ntsc-dvd file.mpg

Можно указать и соотношение сторон параметром -aspect:

ffmpeg -i file.avi -target ntsc-dvd -aspect 4:3 file.mpg

Если исходный видеофайл был в формате wmv, конвертируем его в dvd таким образом:

ffmpeg -i file.wmv -target ntsc-dvd -aspect 4:3 file.mpg

Аналогично, если исходный файл flv это флэш-видео, команда будет такой:

ffmpeg -i file.flv -target ntsc-dvd -aspect 4:3 file.mpg

Из asf конвертируем в avi:

Page 6: Кодирование аудио видео при помощи ffmpeg

ffmpeg -i file.asf file.avi

Аналогично из файла swf можно сделать mov для воспроизведения в Quicktime.

ffmpeg -i file.swf file.mov

Например, у нас есть фильм в avi и нам нужно сконвертировать его в vcd (Video CD) для воспроизведения на CD-проигрывателе:

ffmpeg -i movie.avi -target pal-vcd movie.mpg

Кадрирование видео

Кадр можно обрезать сверху, снизу, слева или справа. Чтобы срезать по 25пикселов сверху и снизу, запустим следующую команду:

ffmpeg -i file.avi -croptop 25 -cropbottom 25 file_crop.mpg

Чтобы дополнить изображение белыми полосами сверху и снизу по 20 и 30пикселов соответственно, запустим следующую команду:

fmpeg -i file.mpg -padtop 20 -padbottom 30 -padcolor 000000 -f avi file_pad.avi

Извлечение звука из видеофайла

Это мой любимый пункт, так как я постоянно извлекаю аудиодорожки из юмористических передач. Чтобы извлечь звук из моей любимой передачи Джорджа Карлина в файле show.avi, используем для FFmpeg параметр -vn.

ffmpeg -i show.avi -vn show_audio.mp3

Захват звука и изображения

FFmpeg может использовать источники видео, совместимые с video4linux и источники звука, совместимые с OSS (Open Sound System). Для захвата звука или видео используется такая команда:

ffmpeg /tmp/out.mpg

Извлечение изображений из видеозаписи Иногда полезно из видеозаписи извлечь несколько изображений и это можно легко сделать с помощью ffmpeg:

ffmpeg -i test.mpg image%d.jpg

Для каждой секунды видео можно создать 25 изображений, но с помощью

Page 7: Кодирование аудио видео при помощи ffmpeg

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

ffmpeg -i test.mpg -r 1 image%d.jpgС помощью этой команды вы каждую секунду будет получать одно изображение.

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

ffmpeg -f x11grab -r 25 -s wxga -i :0.0 /tmp/outputFile.mpg

Примечание: 0.0 является номером display.screen (дисплея.экрана) для вашего сервера X11 точно также, как это указано в переменной окруженияDISPLAY. Вы сможете сохранять по 25 кадров в секунду c вашего экрана wxga (или спомощью параметра -s вы можете указать разрешение, например, 1024 × 768) и поместить видео mpg в /tmp.

Обрезка видео по времениУказываем начать запись с 10-й секунды и делать захват втечении 60 секунд

ffmpeg -ss 00:00:10 -t 60 -i test.mpg /tmp/outputFile.mpg

Преобразование изображений в видеозапись Скажем, у вас много изображений с именами "img001.jpg"', "img002.jpg" и далее в такой же самой последовательности. Вы можете преобразовать их в видеозапись с помощью следующей команды:

ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg

Получение видеозаписи с вебкамеры Чтобы сделать запись видео, запустите ffmpeg со следующими параметрами:

ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 out.mpg

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

ffmpeg -f oss -i /dev/dsp -f video4linux2 -s 320x240 -i /dev/video0 out.mpg

Это всего лишь несколько примеров; с помощью ffmpeg можно выполнять разнообразное редактирование аудио и видеозаписей, и в сети есть много тому примеров.