Полезное для работы с FFmpeg

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

Синтаксис ffmpeg простой. Вот так, e.g., выглядит простейшая команда:

ffmpeg -i "path/in_video.ext" "path/out_video.ext"

Но команды могут быть и посложнее. Например, может быть такая команда:

ffmpeg -ss 5 -i a.mp4 -aspect 4:3 -f image2 -r 1 -vframes 300 a%2d.jpg

Для понимания, более простых конструкций ниже я перечислю наиболее часто используемые опции.

КлючиFFmpeg

Рассмотрим некоторые полезные опции и примеры.

Common keys

  • -i — задает имя исходного (входного) файла.
  • -threads — числовое значение, определяет количество ядер процессора. Что, естественно, отражается на скорости кодирования и операций над файлами. Число 0 устанавливает автоматическое определение доступного числа ядер (-threads 2).
  • -t — задает длительность кодируемого видео в целых секундах или же в формате чч:мм:сс.
  • -ss — указывает позицию в видеофайле с которой будет начинаться кодирование. Формат в целых секундах или чч:мм:сс.
  • -fs — числовое значение в байтах, килобайтах (k), мегабайтах (M). Регистр приставки важен. Ограничивает размер конечного файла. Полезно для экспериментов над небольшим кусочком видеофайла, чтобы не кодировать весь файл (-fs 5M).
  • -y — эта опция перезаписывает уже существующие файлы без запроса на подтверждение.

Video keys

  • -vcodec — видеокодек, которым будет осуществляться кодирование видео (-vcodec mpeg4).
  • -vpre — выбираем предустановку для видеокодека. Сначала FFmpeg ищет файлы предустановок в ~/.ffmpeg, затем в /usr/share/ffmpeg или /usr/local/share/ffmpeg, в зависимости от пути установки. Посмотреть самим, какие присутствуют файлы предустановок, можно по этим же путям.
  • -f — force, указываем принудительно формат конечного файла (-f avi).
  • -b — битрейт видеопотока. По умолчанию: 200kb/s (-b 1500).
  • -bt — толерантность битрейта. По умолчанию: 4000k. При двухпроходном кодировании указывает как далеко в первом проходе можно отклониться от указанного среднего битрейта. Значение не связано с минимальным/максимальным битрейтом. Слишком сильное снижение этого параметра оказывает негативное влияние на качество.
  • -r — количество кадров в секунду. По умолчанию: 25 (-r 15).
  • -s — размер фрейма, то есть разрешение выходного видеофайла. По умолчанию определяется размером файла-источника. Может быть задано буквенными сокращениями, например svga означает размер 800×600. Просмотреть все доступные сокращения можно в man ffmpeg. (-s 640×480 или -s vga).
  • -aspect — числовые значения, определяет соотношение сторон выходного файла (-aspect 4:3 или -aspect 1.3333).
  • -pass — количество проходов при кодировании, 1 или 2 (-pass 2).
  • -g — размер группы кадров, после которой следует ключевой кадр. Например -g 300устанавливает по одному ключевому кадру каждые 10 секунд, при скорости исходного видеофайла 29.97fps. 30 кадров в секунду * на 10 секунд = значение опции 300 (примерное значение для рипа DVD-файла). Чем меньше битрейт и количество кадров в секунду, тем меньше должно быть это значение.
  • -deinterlace — удаление «гребенки».

Далее ключи обрезки кадров сверху, снизу, слева, справа. Значения указываются в пикселях. Может использоваться, например, для удаления черных полос (-croptop 15). В некоторых версиях ffmpeg данные опции могут быть удалены и вместо них используется опция «-vf crop=width:height:x:y».

  • -croptop — обрезать сверху
  • -cropbottom — обрезать снизу
  • -cropleft — обрезать слева
  • -cropright — обрезать справа

Аудио опции

  • -ar — устанавливает частоту дискретизации звука. По умолчанию: 44100Гц (-ar 22050).
  • -ab — битрейт звуковой дорожки. По умолчанию: 64kb (-ab 256k).
  • -ac — число каналов звуковой дорожки. По умолчанию, для входящих потоков это значение равно 1, для исходящих равно числу каналов исходного файла. Другими словами, если вы делаете захват звука, то число каналов по умолчанию 1, а если берете звук из видеофайла, например, то число каналов по умолчанию будет равно исходнику (-ac 2).
  • -an — кодирование видео без звуковой дорожки.
  • -acodec — аудиокодек, которым будет осуществляться кодирование звука (-acodec flac).
  • -apre — набор предустановок для аудиокодека.

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

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

Ниже привожу часто используемые команды для повседневных целей.

Получение информации о видеофайле:

ffmpeg -i video.avi

Превратить набор картинок в видео:

ffmpeg -f image2 -i image%d.jpg video.mpg

Команда преобразует все картинки из текущей директории (названные image1.jpg, image2.jpg и т.д.) в видеофайл video.mpg:

ffmpeg -r 12 -y -i "image_%010d.png" output.mpg

здесь задаётся frame rate (12) для видео, формат «image_%010d.png» означает, что картинки будут искаться в виде image_0000000001.png, image_0000000002.png и тд, то есть, в формате printf)

Порезать видео на картинки:

ffmpeg -i video.mpg image%d.jpg

Эта команда создаст файлы image1.jpg, image2.jpg и т.д., поддерживаются так же форматы PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.

Конвертировать видео в формат iPod/iPhone:

ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4

Пояснения:

  • Источник: source_video.avi
  • Аудио кодек: aac
  • Битрейт аудио: 128kb/s
  • Видео кодек: mpeg4
  • Битрейт видео: 1200kb/s
  • Размер видео: 320 на 180 пикселей
  • Полученное видео: final_video.mp4

Конвертировать видео в формат PSP:

ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4

Пояснения:

  • Источник: source_video.avi
  • Аудио кодек: aac
  • Битрейт аудио: 32kb/s
  • Видео кодек: xvid
  • Битрейт видео: 1200kb/s
  • Размер видео: 320 на 180 пикселей
  • Полученное видео: final_video.mp4

Извлечь звуковую дорожку из видео и сохранить в mp3:

ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3

Пояснения:

  • Источник: source_video.avi
  • Битрейт аудио: 192kb/s
  • Выходной формат: mp3
  • Полученный аудиофайл: sound.mp3

Конвертировать wav в mp3:

ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3

Конвертировать .avi в .mpg

ffmpeg -i video_origine.avi video_finale.mpg

Конвертировать .mpg в .avi

ffmpeg -i video_origine.mpg video_finale.avi

Конвертировать .avi в .gif (без сжатия)

ffmpeg -i video_origine.avi gif_anime.gif

Добавить звук к видео

ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

Конвертировать .avi в .flv

ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv

Конвертировать .avi в .dv

ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv

или

ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

Конвертировать .avi в mpeg для DVD-плееров

ffmpeg -i source_video.avi -target pal-dvd -ps 2000000000 -aspect 16:9 finale_video.mpeg

Пояснения:

  • Выходной формат: pal-dvd
  • Максимальный размер для выходного файла: 2000000000 (2 Gb)
  • Широкоэкранный формат: 16:9

Сжать .avi в DivX

ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

Сжать OGG Theora в mpeg DVD

ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_termin.mpg

Сжать .avi в SVCD mpeg2
Формат NTSC:

ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg

Формат PAL:

ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg

Сжать .avi в VCD mpeg2
Формат NTSC:

ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg

Формат PAL:

ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg

Многопроходное кодирование с помощью ffmpeg

ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

Конвертировать видео. Переложить из медиа контейнера 3gp в контейнер mp4. Частота кадров в секунду — 24. Обрезать сначала до 14-ой секунды. Качество, разрешение видео, аудио и видео кодеки оставить на том же уровне:

ffmpeg -r 24 -ss "00:00:14" -i "H:\Video\Some_video.3gp" "H:\Video\New_some_video.mp4"

Обрезать видео сначала на 2 сек 700 милисекунд. Сменить медиа контейнер с 3gp на mp4:

ffmpeg -ss "2.7" -i "h:\Video\bar_video.3gp" "h:\Video\new_bar_video.mp4"

Установить разрешение 640×360 px для выходящего файла:

ffmpeg -i "input_file.ext" -vf scale=854:480 "output_file.ext"

Если разрешение не сходится с источником, то видео растянется.

Если надо сохранить соотношение сторон, то нужно указать только один компонент — ширину или высоту, а другой компонент указать как «-1»:

ffmpeg -i input_file.ext -vf scale=854:-1 output_file.ext

Ссылки по теме: