FFmpeg - Работа с видео

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество
Версия от 22:33, 25 октября 2013; ILobster (обсуждение | вклад) (Новая страница: «right [http://ru.wikipedia.org/wiki/FFmpeg FFmpeg] - это программа (набор медиа-библиотек с испо…»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

FFmpeg - это программа (набор медиа-библиотек с исполняемым файлом), дающая неограниченную власть над видео и позволяющая сэкономить много денег и времени.

Описание

Не однажды любой сталкивался с ситуацией, когда надо было:

  • разрезать видео на две половины или наоборот, склеить из двух;
  • вырезать звук из клипа, заменить звуковую дорожку в фильме (выкинуть бубляж, вставить оригинал);
  • наложить субтитры;
  • когда-то обрезать кадр;
  • сконвертировать для iPhone/PSP/ещёчо;
  • и прочее подобное.

И каждый раз, можно поспорить, начинались поиски, где бы украсть какой софт, чтобы это сделать. Так вот это всё умеет делать FFmpeg, который не стоит при этом ни копейки (хотя желательно подкинуть пацанам немного помощи).

А ещё некоторые довольно известные видео-редакторы являются по сути лишь графической надстройкой поверх FFmpeg, вот так-то. Но никто не говорит, что это плохо, например XviD4PSP - прекрасный конвертер. Просто зачем использовать тяжёлый GUI, когда всё то же самое можно делать изящно и быстро.

Ссылки на FFmpeg:

Как это запускать

Готовим песочницу

Работает из консоли (командной строки). GUI нет, только хардкор. Подразобравшись с возможностями, можно написать сотни bat'ников или скриптов и творить великие дела со скоростью молнии (той самой, которая на логотипе)

Да, кстати - он кроссплатформенный, есть версии для Windows, Linux и даже OS X.

Статья будет про Windows-версию, но всё описанное применимо и к остальным.

Для начала можно подготовить песочницу следующим образом:

  1. загрузить архив с программой, распаковать её в куда-нибудь;
  2. открыть Total Commander (или любой другой... хотя, зачем другой?) и перейти в каталог bin;
  3. скопировать в этот же каталог видео-файлы, которые требуется обработать. Для удобства можно дать им короткие имена, например 1.mp4;
  4. открыть командную строку из этого каталога;
  5. всё, можно творить.

Набор команд

В разных местах в интернетах разбросаны рецепты и команды на ту или иную операцию. Есть также и сборники таких рецептов, но мы всё равно решили написать и свой тоже.

Конечно же, всё это и гораздо большее можно найти в официальной документации.

Некоторые операции над видео выполняются без перекодирования (-vcodec copy -acodec copy), некоторые требуют перекодирования (не вникая в детали, можно ставить в таких случаях опцию -crf 18).

Вырезать фрагмент видео

Хотим сохранить определённый фрагмент видео:

ffmpeg -i 1.mp4 -ss 00:03:05 -t 00:01:06 -vcodec copy -acodec copy cut.mp4

Эта команда вырежет из файла из файла 1.mp4 начиная с 00:03:05 секунды видеофрагмент продолжительностью 56 секунд (00:01:06) и сохранит его в файл под именем cut.mp4.

Вырезать фрагмент видео из исходника с несколькими звуковыми дорожками

Смотрим информацию по файлу:

ffprobe.exe 1.mp4

Помимо прочей информации видим, например, такое:

  Duration: 01:52:52.80, start: 0.000000, bitrate: 2768 kb/s 
    Stream #0:0: Video: mpeg4 (XVID / 0x44495658), yuv420p, 704x384 [SAR 1:1 DAR 11:6]
    Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, 5.1(side), s16, 448 kb/s
    Stream #0:2: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, 5.1(side), s16, 448 kb/s

Хотим сохранить 63 секунды видео с определённого момента и вторую дорожку (потому что первая, скажем, мерзкий бубляж):

ffmpeg -i 1.avi -map 0:0 -map 0:2 -ss 01:37:34 -t 63 -vcodec copy -acodec copy cut.avi

Тут есть нюанс. Если дорожка в AC3, то изломается CodecID (был раньше такой косяк, но возможно его исправили), и звук играться не будет. Однако, можно сложить всё в MKV:

ffmpeg -fflags genpts -i 1.avi -map 0:0 -map 0:2 -ss 01:37:34 -t 63 -vcodec copy -acodec copy cut.mkv

Вырезать субтитры из контейнера

Сначала смотрим информацию по файлу (как в примере выше), определяем номер дорожки и:

ffmpeg -i 1.mkv -map 0:2 1.ass

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

Поставить на каждый кадр ватермарку

Например, вы записывали летсплей, но в углу экрана палится ваш ник и надо закрыть его чёрным прямоугольником. Или другая ситуация: хочется закопирайтить что-то и налепить в углу какой-нибудь свой логотип.

Делается это так:

ffmpeg.exe -i 1.mp4 -vf "movie=logo.png [logo]; [in][logo] overlay=16:16[out]" -crf 18 2.mkv

Тут необходимо перекодирование, потому надо задать параметры кодировки, что и выполняет опция -crf 18. Ватермарка лежит в том же каталоге под именем logo.png. Параметр 16:16 - координаты позиционирования верхнего левого угла ватермарки.

Обрезка (crop) видео

Допустим, у вас исходный файл с разрешением 1366x768, и вы хотите отрезать слева 200 пикселей (или что это за единица размерности). Команда будет такая:

ffmpeg.exe -i 1.mp4 -filter:v "crop=1060:768:300:0" -crf 18 cut.mp4

Для этого необходимо перекодирование, потому надо задать параметры кодировки, что и выполняет опция -crf 18.

Захват экрана

Можно захватывать происходящее на экране и писать в файл, как это делает Fraps.

Для этого предварительно потребуется установить устройство захвата (здесь используется Screen Capture Recorder), потому как FFmpeg сам такое делать всё же не умеет.

ffmpeg.exe -f dshow -i audio="virtual-audio-capturer":video="screen-capture-recorder" -acodec pcm_s16le -vcodec libx264 -preset ultrafast -qp 0 testing.mkv

Ещё команды

В большом количестве такие же сбоники рецептов есть в интернетах, например: