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

Page 1

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

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

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


фильтры доступны можно командой: 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. Можно также и самому составлять файлы прессетов


Примечание: в конце указываем имя файла, который у нас получится в результате кодирования. В следующем примере мы сконвертируем файл 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 116661 ffmpeg 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 --enableavfilter --disable-stripping --disable-debug --disable-doc --disable-network --disable-vaapi --disable-ffplay --disable-vdpau --enable-libmp3lame --enablelibvo-aacenc --enable-libtheora --enable-libvorbis --enable-libx264 --enablelibfaac --enable-nonfree --disable-indev=v4l --disable-indev=alsa --disableindev=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. 0 Input #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


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:00 At 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:


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 изображений, но с помощью


параметра -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 можно выполнять разнообразное редактирование аудио и видеозаписей, и в сети есть много тому примеров.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.