Фильтры. Меняем разрешение. FFmpeg: склейка и соединение файлов видео

FFmpeg - это набор библиотек для обработки видео и аудио файлов. FFmpeg сконвертирует mov в mp4, наложит водяной знак, склеит несколько видео файлов в один, поменяет разрешение, перекодирует потоковое видео, создаст поток сам. FFmpeg полезен для тех, кто профессионально работает с видео, разрабатывает медиа приложения или просто обрабатывает домашние записи.

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

Сегодня мы пройдем путь от получения информации о файле до применения нескольких фильтров одновременно, решая задачи, с которыми часто сталкиваешься при работе с видео. Установим ffmpeg и вперед!

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

ffmpeg -i file.mp4

Тут все просто, вводим путь к файлу, получаем информацию о нем: кодеки, количество дорожек, разрешение, битрейт и фреймрейт. Мы указываем пути к файлам флагом -i (input):

I file1.mp4 -i file2.mp4 .

Конвертируем в mp4

Допустим у нас есть сайт, на котором видео проигрывалось через Flash плеер. Мы хотим поменять его на HTML5 Video. Для этого конвертируем видео файлы на сервере из flv формата в mp4.

  • output.mp4 - путь к сконвертированному файлу.
  • -vcodec libx264 - указываем какой видео кодек хотим получить. В нашем случае это H264, который поддерживается большинством браузеров .
  • -acodec libvo_aacenc - аудио кодек AAC .

Список поддерживаемых вашим ffmpeg кодеков можно получить через ffmpeg -codecs .

Вместо -vcodec встречается запись -codec:v и -c:v . Если не указать кодеки для конвертации ffmpeg -i flashvideo.flv output.mp4 , то ffmpeg установит дефолтные кодеки для формата файла на выходе .

При конвертации задают не только кодеки. Увеличим число настроек:

Ffmpeg -i flashvideo.flv -b:v 700k -r 25 -pix_fmt yuv420p -vcodec libx264 \ -b:a 128k -ar 44100 -acodec libvo_aacenc -y output.mp4

Мы установили битрейт для видео -b:v и аудио -b:a в 700 и 128 кб/c. Битрейт можно обозначить другими флагами: -vb и -b для видео или -ab для аудио.

Оставшиеся три параметра - это фреймрейт -r 25 в кадрах в секунду, цветовая модель YUV равная обычному значению yuv420p и частота дискретизации звука 44100 Гц. Флаг -y нужен для перезаписи файла, если он уже существует.

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

ffmpeg -ss 10 -t 20 -i source_video.mp4 -vcodec copy -acodec copy result.mp4

Флагом -ss указываем с какого момента исходного видео обрезаем, -t - продолжительность. На выходе мы получим двадцати секундное видео, которое начнется с десятой секунды исходного. Запись -ss 00:00:10.250 -t 00:00:20.120 пригодится для указания более точного промежутка времени. До версии 2.1 FFmpeg в обоих случаях обрезал видео по ближайшему ключевому кадру . В новых версиях итоговое видео максимально близко к указанному интервалу.

Мы добавили -vcodec copy -acodec copy , чтобы сохранить кодеки исходного видео. Иначе ffmpeg перекодировал бы их в кодеки по умолчанию. Сейчас видео не перекодируется и команда выполнится быстро. Дальше упростим эту запись флагом -c copy .

Если расположить флаги -ss и -t после входящего видео, то итоговое видео будет таким же, но команда будет выполняться дольше. Флаги будут относиться к итоговому видео и FFmpeg будет декодировать фрагмент видео до -ss . В первом случае эта часть будет проигнорирована.

Флаг -t можно заменить на -to , указав вместо продолжительности конечную точку. Этот флаг нельзя применить к входящему видео:

Ffmpeg -ss 10 -i source_video.mp4 -to 30 -c copy result.mp4

Команда дала нам другой результат: тридцати секундное видео с десятой секунды исходного. Это произошло, потому что -to использовал временную шкалу result.mp4 , тридцатая секунда на котором равна сороковой секунде source_video.mp4 . Чтобы использовать исходную шкалу добавим флаг -copyts . Так мы получим такое же видео, как от первой команды:

Ffmpeg -ss 10 -i source_video.mp4 -to 30 -copyts -c copy result.mp4

Фильтры. Меняем разрешение

Один из самых мощных инструментов ffmpeg - фильтры. Они могут добавлять эффекты, накладывать разные видео друг на друга, сшивать несколько файлов в один. Увидеть список установленных фильтров мы можем по команде ffmpeg -filters . Изменим с их помощью разрешение видео:

Ffmpeg -i source_video.avi -vf scale=640:480 source_preview.avi

Мы использовали флаг -vf , указав фильтр scale и разрешение 640:480 . Этот фильтр может сохранять пропорции и вычислять разрешение динамически .

Объединение фильтров. Ускоряем воспроизведение

ffmpeg -i source_video.mp4 \ -filter_complex "setpts=0.5*PTS;atempo=2.0" accelerated.mp4

Мы объединили несколько фильтров в один флагом filter_complex и получили ускоренный в два раза файл. Чтобы разобраться применим фильтры по одиночке.

Ffmpeg -i source_video.mp4 -vf setpts=0.5*PTS accelerated_video.mp4

Мы ускорили воспроизведение видео дорожки фильтром setpts . Однако аудиодорожка не изменилась, и файл получится той же продолжительности что и был: видео проиграется в 2 раза быстрее, а последний кадр будет висеть всю вторую половину файла. Если убрать аудио дорожку флагом -an , то длительность итогового файла будет определяться по видео дорожке и будет в два раза меньше исходной.

Наоборот, если нужна только ускоренное аудио без видео, воспользуемся фильтром atempo , а флагом vn уберем видео дорожку.

Ffmpeg -i source_video.mp4 -af atempo=2.0 -vn accelerated_audio.mp3

Добавив filter_complex и применив оба фильтра, мы ускорили файл целиком.

Выполним ту же операцию другим методом:

Ffmpeg -f concat -i list.txt -c copy output.mp4

В FFmpeg есть элементы, которые читают или записывают медиа в определенных форматах. Они называются демультиплексор и мультиплексор . -f concat - это демультиплексор, который принимает текстовый файл, со списком медиа файлов и склеивает их в один. Посмотреть другие элементы можно командой ffmpeg -formats .

Содержимое list.txt:

File "input1.mp4" file "input2.mp4"

Такой метод удобен, если у нас много файлов и надо склеить их друг за другом. Он не перекодирует видео и работает быстрее первого метода.

Но первый метод применяется чаще. Во-первых, он может принять на вход видео с разными кодеками. Во-вторых, дает большую гибкость. Например, если нужна только часть первого видео, мы можем воспользоваться флагами -ss и -t . Обратите внимание, эти флаги действуют только на первый файл input1.mp4 .

Ffmpeg -ss 5 -t 2 -i input1.mp4 -i input2.mp4 \ -filter_complex " concat=n=2:v=1:a=1 [v] [a]" \ -map "[v]" -map "[a]" -y result.mp4

Водяной знак

Последний пример, который мы рассмотрим - это наложение водяного знака. Фильтр overlay принимает на вход координаты расположения водяного знака на итоговом видео.

Расположим водяной знак по центру. Зная размер исходного видео и png картинки, можно вычислить координаты самим. Например при видео 1280×720 и водяном знаке 200×200, положение по горизонтали x = (1280 - 200) / 2 = 540 и по вертикали y = (720 - 200) / 2 = 260 . Соответственно значение фильтра "overlay=540:260" . Однако удобнее написать универсальную команду, чтобы ffmpeg посчитал все за нас. Размер видео получим из параметров main_w и main_h , а водяного знака из overlay_w и overlay_h . Далее ту формулу, по которой мы вычисляли координаты запишем в значение фильтра "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" . Готово, мы получили команду для наложения водяного знака по центру:

Ffmpeg -i source_video.mp4 -i watermark.png \ -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" \ -codec:a copy video_protected.mp4

Твитнуть

ffmpeg действительно мощный видеокодер/декодер. Он работает в командной строке, а не в графическом интерфейсе. Командная строка - это то черное окно, которое вы найдете, щелкнув и набрав cmd , затем нажмите enter. Это также называется «командной строки». После настройки вы вводите команды ffmpeg в одном из этих окон, чтобы использовать его.

Вот основные шаги, чтобы «установить» и использовать его:

Установка

ffmpeg теперь «установлен». Командная строка теперь распознает команды ffmpeg и попытается запустить их.

Обновление FFmpeg

Чтобы обновить FFmpeg, просто вернуться на страницу загрузки в шаге 1 и загрузите файл почтового индекса. Распакуйте файлы и скопируйте их поверх старых файлов в папке, созданной на шаге 2.

Использование FFmpeg

Использование FFmpeg требует, чтобы вы открыть окно командной строки, а затем введите FFmpeg определенные команды. Вот типичная команда FFmpeg:

Ffmpeg -i video.mp4 -vn -ar 44100 -ac 1 -b:a 32k -f mp3 audio.mp3

Эта команда состоит из четырех частей:

  1. ffmpeg - Эта команда сообщает CMD, что мы хотим запустить FFmpeg команды. cmd сначала ищет ffmpeg.exe в одной из папок с шага 6 в разделе «Установка». Если он найден, он попытается выполнить команду.
  2. -i video.mp4 - Это входной файл. Мы будем работать над этим файлом.
  3. -vn -ar 44100 -ac 1 -b:a 32k -f mp3 - Это «аргументы». Эти символы похожи на мини-команды, которые точно определяют, что мы хотим делать. В этом случае говорится, что нужно создать mp3-файл из источника ввода.
    • -vn - Оставьте из видеопотока
    • -ar 44100 - Определяет аудио разрешение в герцах.
    • -ac 1 - Аудиоканалы, только 1. Это эффективно «сделать моно».
    • -b:a 32k - Битрейт аудио, установлен на 32 кбит/с.
    • -f mp3 - Принудительное преобразование MP3. Без этой команды ffmpeg пытается интерпретировать то, что вы хотите, на основе расширения, которое вы используете в имени выходного файла.
  4. audio.mp3 - Это выходной файл.

Как вы можете догадаться, эта короткая команда делает аудиофайл MP3 из файла MP4.

Чтобы выполнить эту команду, если у вас есть файл MP4, чтобы попробовать это на, выполните следующие действия:

  1. Нажмите клавишу Windows + R.
  2. Тип cmd затем введите.
  3. Изменить путь к файлу, над которым вы хотите работать. Тип cd . Он должен выглядеть примерно как cd C:\Users\name\Desktop\ .
  4. Теперь введите команду ffmpeg с именем вашего входного файла. Команда будет работать с некоторой обратной связью. Когда это будет сделано, cmd будет доступен для большего количества команд.

Это основной способ использования ffmpeg. Команды могут быть намного сложнее, но это только потому, что у программы столько энергии. Используя the ffmpeg documentation , вы можете узнать все команды и создать очень мощные скрипты. После этого вы можете сохранить эти сценарии в файл.bat, чтобы вам просто нужно дважды щелкнуть файл, а не набирать всю команду каждый раз. Например, this answer contains a script that will create MP3"s from all the MP4"s in a folder . Затем мы будем комбинировать мощность ffmpeg с мощностью cmd, и это приятное место, когда вам нужно делать профессиональное видео/аудио кодирование в горных файлах.

Если вы раньше использовали Windows или даже сейчас используете двойную загрузку Windows с Linux, то наверное, вы пользовались программой для Windows - FormatFactory, для преобразования и конвертирования ваших аудио и видео файлов, а также для копирования DVD дисков и создания ISO образов.

FormatFactory - это отличный инструмент, но если вы используете больше Linux чем Windows, то здесь есть хорошие альтернативы Format Factory linux, делающие ту же работу нехудшим, а иногда даже лучшим образом.

В этой статье мы рассмотрим 4 альтернативы Format Factory для Linux.

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

Mencoder - это программа с открытым исходным кодом, для конвертирования видео. Поддерживается только работа в командной строке. Mencoder - это часть MPlayer, а это значит, что программа может обрабатывать все форматы поддерживаемые MPlayer. Возможно, это не самый лучший аналог format factory для linux, но дальше мы рассмотрим и другие программы, в том числе с графическим интерфейсом.

Mencoder позволяет кадрировать, масштабировать видео, поворачивать кадр горизонтально и вертикально, отражать, изменять контрастность, преобразовывать цветовое пространство, цветовой тон, насыщенность, выполнять гамма коррекцию, применять различные эффекты и фильтры для уменьшения видимости артефактов сжатия или просто выполнять конвертирование видео в linux. Также поддерживается автоматическая коррекция яркости, усиление контраста, резкость, размытие, шумоподавление.

Mencoder - это бесплатный инструмент для перекодирования видео, а также применения различных эффектов. Для программы есть графический бекэнд, который называется DivX Converter.

Установка Mencoder

Для установки программы в Ubuntu выполните:

sudo apt-get install mencoder lame

Программа будет нормально работать, только если в системе есть библиотека libavcodec5x. Это часть libav или ffmpeg и она содержит большое количество кодеков для поддержки различных форматов:

sudo apt-get install libavcodec54

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

DivX Converter можно скачать из официального сайта . Программа очень легко устанавливается с помощью установщика приложений или dpkg в Ubuntu.

Преобразовать файл с помощью DivX Converter очень просто. Сначала добавьте нужный файл, потом выберите формат, в который его нужно преобразовать. Здесь есть некоторые предопределенные форматы, так что вы можете посмотреть полный список и выбрать то что нужно. Далее, вам нужно выбрать каталог, куда сохранить файл. На вкладах видео и аудио можно указать дополнительные опции. Когда завершите, нажмите кнопку Конвертировать:

После того как конвертирование видео в Linux завершится, вы найдете готовый файл в указанной папке.

2. Arista

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

Официально Arista основана на Gnome. Она поддерживает длинный список форматов для различных устройств: IPod, IPhone, PSP, Playstation 3, Nokia, DVD и многие другие. Она также поддерживает mp4, WebM, matroska, avi, ogg, flv, кодеки для видео: h.264, vp8, mpeg4/divX, mpeg2, theora, Flash Video, Аудио: aac, vorbis, mp3, flac, speex,wav.

Поддерживаются следующие функции:

  • Готовые настройки для IPod, PC, DVD, PSP, Playstation 3 и т д
  • Живой просмотр для оценки качества видео
  • Автоматическое обнаружение доступных DVD носителей и цифровых устройств
  • Rip из v4l устройств
  • Rip из DVD устройств, с помощью libdvdcss
  • Простая утилита командной строки для сценариев
  • Автоматическая установка обновлений

Установка Arista

Программа доступна в стандартных репозиториях многих дистрибутивов. Но если это не так то ее можно установить из PPA webupd8:

sudo add-apt-repository ppa:webupd8team/arista
$ sudo apt-get update
$ sudo apt-get install arista

Как пользоваться Arista

Когда программа будет установлена, запустите ее из меню приложений. Вы увидите во такое окно:

Нажмите + чтобы добавить несколько видео или аудиофайлов которые вы хотите конвертировать:

Здесь есть три варианта импорта файлов: непосредственно с DVD, импорт папки целиком или выбор одного или нескольких файлов. Затем выберите каталог куда нужно сохранить обработанные файлы.

Осталось выбрать формат или устройство, для которого будет преобразован файл. Есть много вариантов. Если вам нужно преобразовать файл например для Android, то достаточно просто выбрать устройство из списка и не задумываться о форматах, программа все сделает сама.

После того как настройка завершена, нажмите кнопку создать. Подождите пока идет работа над файлом, а затем можете его воспроизвести из папки назначения.

3. Handbrake

Handbrake - это лучший свободный, многопоточный инструмент с открытым исходным кодом и доступных на данный момент, если рассматривать другие аналоги format factory для linux, то этот самый лучший. Он был разработан в 2003 году Эриком Петитом. За это время программа сильно изменилась, теперь она поддерживает все основные платформы, включая Windows и Mac. Также официально поддерживается Ubuntu Linux, но также есть версии для других дистрибутивов. Handbrake использует такие сторонние библиотеки: x264, libav и faac.

Для Linux доступен как интерфейс командной строки, так и графический интерфейс.

Установка Handbrake

Установить Handbrake в Ubuntu очень просто, для этого нужно подключить PPA:

sudo add-apt-repository ppa:stebbins/handbrake-releases
$ sudo apt-get update
$ sudo apt-get install handbrake

Графический интерфейс на основе GTK устанавливается командой:

sudo apt-get install handbrake-gtk

А клиент командной строки:

sudo apt-get install handbrake-cli

Как использовать Handbrake

Когда программа будет установлена, запустите ее из главного меню. Графический интерфейс Handbrake выглядит вот так:

Сейчас не все опции программы доступны. Сначала нужно импортировать файлы, которые вы хотите сжать или конвертировать. Нажмите Source, чтобы выбрать файлы.

Как только вы выберите файлы, опции форматирования станут доступными. Вы можете вручную задать формат файла или воспользоваться готовыми профилями для различных устройств. Например, вы можете выбрать устройство в разделе Devices:

Если вы собираетесь загружать видео в Youtube, отметьте галочку Web-optimized. Этот выбор удаляет меню устройств, зато теперь вы можете вручную настроить параметры видео:

Вы можете изменять любые опции, какие вам нужно. Как видите, по умолчанию видеодекодер установлен H.264, но вы можете выбирать другие параметры. Когда завершите настройку, нажмите кнопку Старт:

4. FFmpeg

FFmpeg это комплексное кроссплатформенное решение для записи, конвертирования, сжатия аудио/видео, потокового аудио и видео файлов. Отличный аналог format factory для linux или даже windows. Проект FFmpeg основан в 2000 году Фабрисом Белларом и поддерживался до 2003 Майком Нидермаером с 2004. Программа содержит в себе кодеки большинства известных форматов. FFmpeg может перекодировать, декодировать и изменять буквально все что было создано до сих пор. Проект разработан для Linux но может использоваться в других операционных системах, например, Windows.

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

Установка FFmpeg

Для установки самой свежей версии программы в Ubuntu лучше использовать PPA:

sudo apt-add-repository ppa:mc3man/trusty-media
$ sudo apt-get update
$ sudo apt-get install ffmpeg

WinFF это графический интерфейс для FFmpeg. Программа может работать со всеми видами файлов, с которыми работает ffmpeg. Можно обрабатывать несколько файлов и несколько форматов одновременно. Например, преобразовать MPEG, FLV и MOV, в AVI. Программа поддерживает не только Linux, но и Windows, а тажке переведена на множество языков, в том числе и русский.

WinFF доступна в официальных репозиториях Ubuntu, но самую свежую версию можно установить из PPA:

Sudo add-apt-repository ppa:paul-climbing/ppa

$ sudo apt-get update
$ sudo apt-get install winff

Когда установка будет завершена, запустите WinFF из главного меню. Перед вами откроется очень простой интерфейс с небольшим количеством функций:

Есть определенный класс приложений, которые при приличном функционале не имеют графического интерфейса и поэтому с ними приходится работать из командной строки, что само по себе не так-то просто. Именно поэтому и в угоду тем пользователям, которые с командной строкой далеко не на «ты», сторонними разработчиками часто пишутся графические оболочки для подобных приложений. Сегодня мы хотим поговорить о iFFmpeg — оболочке для консольного приложения FFmpeg, известного внушительным функционалом в плане конвертирования медиафайлов между собой.

Так как iFFmpeg — это всего лишь оболочка, а не «полноценная» программа, следует иметь в виду, что в комплект поставки не входит сама утилита FFmpeg и пользователю придется дополнительно ее загружать. Если же программа уже есть в системе, то будет достаточно просто указать в настройках iFFmpeg путь до нее.

Интерфейс iFFmpeg имеет локализацию на 8 языках, в том числе и на русском. Перевод выполнен вполне грамотно и придраться практически не к чему. Окно программы имеет фиксированные размеры и состоит из одного большого поля, на которую предполагается перетаскивать исходные файлы для конвертирования, и небольшой панели инструментов, все иконки которой выполнены в одном цветовом стиле. Часть иконок достаточно информативна, и о их предназначении можно догадаться сразу, едва ни них упадет взгляд, другие же выглядят настолько несуразно, что приходится ждать подсказок об их функционале (в частности это касается функций склейки медиафайлов, выбора выходного формата и вывода информации об используемой версии FFmpeg).

Исходные файлы могут добавлены не только перетаскиванием, но и «классическим» способом — через окошко выбора файла Finder. Хотя это и не относится непосредственно к функционалу iFFmpeg, стоит отметить, что программа работает со многими аудио- и медиафайлами, включая такие, как mp4, m4v, avi, mov, ts, m2ts, dv, webm, wmv, flv, vob, ogg, mkv, 3gp, rm, cavs, mp3, m4a, wav, flac, ac3, wma . Зато iFFmpeg может похвастаться внушительным списком имеющихся пресетов (54 варианта) с уже готовыми настройками для конвертирования медиафайлов в тот или иной формат, с учетом спецификаций устройства, для которого готовится контент.

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

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

iFFmpeg поддерживает пакетную обработку данных и умеет работать одновременно сразу с несколькими файлами. В этом случае появляется возможность выбрать для каждого файла свой пресет, просмотреть его технические данные и пр.

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

После конвертирования, независимо от того, сколько файлов было в работе, объединялись они или нет, iFFmpeg может автоматически добавить получившиеся файлы в библиотеку iTunes.

Для того, чтобы быть в курсе того, как продвигается операция конвертирования, пользователю совсем необязательно держать открытым окно программы — о завершении конвертирования приложение сообщит звуковым сигналом, а индикатор прогресса операции пользователь сможет увидеть прямо на иконке iFFmpeg в Доке.

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

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

Создатели iFFmpeg создавали оболочку для FFmpeg отнюдь не из альтруистических побуждений, поэтому покупка приложения обойдется пользователю в 10 евро, что составляет примерно 13$. С одной стороны, это достаточно много за продукт, являющийся всего лишь графическим интерфейсом для консольного приложения, а с другой — iFFmpeg существенно облегчает работу с многочисленными настройками кодирования, избавляя пользователя от необходимости их запоминания и прописывания длинных команд в консоли.

Программа доступна для покупки только на сайте разработчика, там же можно загрузить бесплатную демо-версию, рассчитанную на 8 операций конвертирования.

Лайкнуть

Лайкнуть

Твитнуть

История FFmpeg

В 2000 году программист с ником Gerard Lantau выложил для всеобщего использования исходники проекта FFmpeg. За годы концепция осталась прежней:

  • Деление на программы FFmpeg для кодирования видео и FFserver для организации потокового вещания.
  • Максимально быстрое кодирование звука и видео.

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

FFmpeg прочно стоит на ногах - почти каждый день вносятся правки в исходный код. Добавляются новые компоненты. Например, плеер FFplay и утилита для получения информации FFprobe.

Где скачать FFmpeg и FFserver

FFmpeg разрабатывается под Linux. Если на сайте видите окошко с трансляцией видео - 9 шансов из 10, что оно работает благодаря FFmpeg и FFserver.

Версия FFmpeg (и FFserver) для Windows тоже существует, но часть функциональности будет недоступна. Впрочем, это не мешает работать видеоконвертеру MediaCoder (www.mediacoderhq.com) и плееру

На выбор есть 32- и 64-битные версии. Для кодирования видео выбирайте 64-битную Static-версию (ссылка вида «Download FFmpeg git-*** 64-bit Static «).

Если нужно организовать видеотрансляцию с, например, IP-видеокамеры, желательна 32-битная версия FFmpeg, с 64-битной я заметил проблемы - программа закрывалась сама по себе. Возможно, потому что FFserver для Windows - 32-битный, есть несовместимость.

FFserver на Windows тоже существует, хотя об этом мало кто знает. Программу трудно скомпилировать, потому что используется много специфичного для Linux кода. Разработчики системы видеонаблюдения Xeoma оказались молодцы, потому что выложили свой FFserver для Windows на своем сайте: http://felenasoft.com/xeoma/ru/ffserver/ Не забудьте скачать cygwin1.dll оттуда же.

Про FFserver в Интернете много инструкций. Они написаны на примере Linux-версии, но прекрасно работают под Windows. Единственное отличие - файл ffserver.conf должен лежать не в папке /etc, а в одной папке с ffserver.exe, cygwin1.dll и ffmpeg.exe.

Как установить FFmpeg

2. Создайте на диске C: папку ffmpeg и распакуйте туда архив.

Для установки ffmpeg этого достаточно. Советую выполнить пункт 4 для удобства в будущем.

3. Если нужно настроить трансляцию, в папку c:\ffmpeg\bin распакуйте ffserver и положите файлик cygwin1.dll .

4. Чтобы в командах не писать каждый раз полный путь к программе, можно добавить его в переменную PATH: Панель управления - Система - Дополнительные параметры системы - вкладка Дополнительно - Переменные среды - в конце строки переменной Path добавьте «;c:\ffmpeg\bin » без кавычек. Если там было пусто (что не совсем нормально), то «c:\ffmpeg\bin «, т.е. без точки с запятой в начале.

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

Вы можете пропустить четвертый шаг, но потом вместо команд ffmpeg и ffserver придется писать полный путь «c:\ffmpeg\bin\ffmpeg.exe» и «c:\ffmpeg\bin\ffserver.exe».

Как пользоваться FFmpeg

На главной странице FFmpeg красуется надпись:

Человек, не знакомый с командной строкой, будет в ступоре. Куда вводить команду?

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

В папке ffmpeg\doc собрано много примеров по использованию компонентов, все команды можно посмотреть там.

Примеры

Имена файлов у вас будут свои. Если есть пробелы или на русском - обрамляйте имена в кавычки.

Отобразить информацию о файле:

ffmpeg -i video.mp4

или ffprobe video.mp4

Пережать видео avi в mp4:

ffmpeg -i video.avi video.mp4

Пережать mov в flv и изменить разрешение:

ffmpeg -i video.mov -s 640x360 -b 1700k -vcodec flv -ar 44100 video.flv

Пережать видео в webm среднего качества, звук формата OGG:

ffmpeg -i video.mp4 -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis video.webm

Пережать видео кодеком MPEG4, звук - mp3, контейнер - avi:

ffmpeg -i video.mp4 -vcodec mpeg4 -mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 100 -qscale 3 -acodec libmp3lame -ac 2 -ab 128k -y video.avi ffmpeg -i video.mp4 -vn -ar 44100 -ac 2 -ab 192 -f mp3 zvyk.mp3

Добавить звуковую дорожку к видео («-acodec libmp3lame» можно выкинуть, тогда ffmpeg сам решит, как кодировать звук):

ffmpeg -i zvyk.mp3 -i video.mp4 -acodec libmp3lame video_final.mp4

Добавить звуковую дорожку без перекодирования видео (сохраняет качество, работает быстро):

ffmpeg -i zvyk.mp3 -i video.mp4 -acodec libmp3lame -vcodec copy video_final.mp4 ffmpeg -ss 00:00:02 -i video.mp4 -f image2 -vframes 1 thumb.jpg ffmpeg -i video.mp4 -vf deshake out.mp4

Структура

Как видно из примеров, команды ffmpeg имеют структуру:

ffmpeg -опции -еще_опции -можно_опции_с_параметрами_например 1 -i "имя файла.расширение" -опции_кодирования -еще опции +опции_кодека "имя_результирующего_файла.расширение"

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

Команды

Информационные (чтобы узнать возможности установленной версии)

-L
Показать текст лицензии.

-h, -?, -help, -help
Список доступных команд.

-version
Узнать версию ffmpeg.

-formats
Показать список доступных форматов контейнеров (не кодеков!).

В Windows не хватит строк в командной строке для показа всего списка, для исправления откройте свойства окна и на вкладке «Расположение» поставьте высоту буфера экрана в 500. В списке буквы D и E означают поддержку декодирования и кодирования.

-codecs
Список доступных кодеков. Кроме интуитивно понятных D и E (Decoder для «чтения» и Encoder для кодирования), видны следующие обозначения:
V - кодек для видео, A - для звуковых дорожек, S - субтитров, I - только для кодирования I-фреймов, L - кодек сжимает с потерями данных (большинство), S - без потери данных (сохраняет качество, сжимает слабо).

-bsfs
Показать поддерживаемые bitstream filters (фильтр потока данных), которые нужны в ряде случаев для правильной обработки потока данных.
-protocols
Показать доступные протоколы. Из выдаваемого списка понятно, что в качестве входных данных может использоваться RTMP поток (видеотрансляция) и многое другое, не только файлы. Как выходные - тоже.
-filters
Доступные фильтры видео и аудио. В FFmpeg их громадное количество. Кроме банальных поворота и настроек яркости, в FFmpeg есть расширение стереобазы, генерирование фракталов и прочее, прочее. Подробные инструкции - в doc/ffmpeg-filters.html.

-pix_fmts
Доступные цветовые форматы. FFmpeg понимает громадное количество цветовых пространств. Полезно для тех, у кого оборудование выдает странные цвета.

Основные опции

-loglevel значение или -v значение

Уровень логгирования. От минимума - quiet до максимально подробного debug. Полный список: quiet, panic, fatal, error, warning, info, verbose, debug. Полезно, если в процессе кодирования видео происходят ошибки и нужно узнать подробности.

-f значение (mp4, avi, mkv, gif и т.д.)

Указать определенный формат (контейнер) файла. Обычно FFmpeg выбирает по расширению выходного файла, но можно переназначить.

-i путь_до_файла

Команда для указания входящего файла или потока (например, rtmp://адрес для захвата потокового видео).

-y
Перезаписывать уже существующий выходной файл без запроса.

-ss время

Указывает, с какого времени нужно кодировать видео/аудио. Формат в виде «чч:мм:сс». Подробнее: https://trac.ffmpeg.org/wiki/Seeking

-t время

Указать, до какого времени нужно кодировать видео/аудио. Вместе с предыдущей командой удобно использовать для вырезания отрезка видео.

-fs размер
Лимит выходного файла. Например, при -fs 10M кодирование останавливается, как только выходной файл станет 10 Мб размером. Поддерживаются K, M, G (килобайты, мегабайты и гигабайты).

Опции кодирования видео

-b значение
Устанавливает битрейт видео. Выше битрейт - лучше качество и больше размер файла. Указывайте в конце цифры K или M, чтобы программа понимала, в килобитах/сек или мегабитах/сек значение.

-vframes значение

Количество кадров, которые нужно кодировать.

-r значение
Указание частоты кадров.

-s размер

Указание, в каком разрешении кодировать видео. Например, 1920×1080 для FullHD видео на выходе. FFmpeg понимает буквенные сокращения (vga, hd480, hd720, hd1080 и другие).

-aspect соотношение_сторон

Указать соотношение сторон видео (4:3, 16:9 or 1.3333, 1.7777 и т.д.). Как известно профессионалам, в видео пиксели могут быть прямоугольными.

-croptop значение , -cropbottom значение , -cropleft значение , -cropright значение

Обрезка количества пикселей видео сверху, снизу, слева или справа.

-padtop значение , -padbottom значение , -padleft значение , -padright значение

Добавление границы видео сверху, снизу, слева или справа.

-padcolor hex_color

Цвет границы в шестнадцатеричном формате (#000000 - черный, #FF0000 - красный и т.д.).

-vn
Не кодировать видео.

-bt значение

Значение задает максимальное отклонение от указанного битрейта. Может не работать, в зависимости от кодека.

-maxrate битрейт

Указывает максимальное значение битрейта. Требует указания размера буфера через -bufsize.

-minrate битрейт

Минимальный битрейт у видео. Часто используется для принудительного задания определенного битрейта:

ffmpeg -i video.avi -b 4000K -minrate 4000K -maxrate 4000K -bufsize 1835k video-out.mp4

-bufsize размер

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

-vcodec кодек

Выбор кодека (см. команду -codecs для списка кодеков). Можно указать copy , тогда FFmpeg будет копировать видеопоток без перекодирования.

Сохранять качество исходной картинки/звука. Это не то же самое, что -vcodec copy . Сохраняется качество видео, кодек может быть любым, видеодорожка перекодируется.

-pass n

Для многопроходного кодирования видео. Указывает, какой делать проход (1 или 2). Префикс имени файла со статистикой указывается командой -passlogfile значение .

Можно отключить обработку звука при первом проходе, чтобы экономить время и ресурсы:
ffmpeg -i video.mp4 -vcodec libxvid -pass 1 -an -f rawvideo -y NUL

Опции звука

-aframes количество

Сколько фреймов звука (да, у звука есть кадры!) нужно кодировать.

-ar частота

Указание частоты звука (по умолчанию 44100 Гц).

-ab битрейт

Битрейт (по умолчанию = 64K).

-aq значение

Указание качества (зависит от кодека, применяется при переменном битрейте).

-ac число

Количество аудиоканалов (по умолчанию 1).

Не кодировать звук.

-acodec кодек

Указание кодека для звука. Значение copy позволяет копировать звуковую дорожку без перекодирования

-newaudio

Добавление еще одной звуковой дорожки. Ее параметры указываются до команды -newaudio:

ffmpeg -i file.mpg -vcodec copy -acodec ac3 -ab 384k test.mpg -acodec mp2 -ab 192k -newaudio

Субтитры

-scodec кодек

Кодек для субтитров (copy - для прямого копирования).

-newsubtitle

Добавление еще одних субтитров.

-slang код

Указание языка субтитров в стандарте ISO 639 (3 буквы).

Отключение субтитров.

Другие команды

-threads количество

Количество потоков для кодирования видео. Опцию следует применять только на многоядерных ПК и то с оглядкой, читая документацию к выбранному кодеку.

-vsync значение

Синхронизация кадров. Значения:

0 - каждый кадр передается из входного в результирующий файл с той меткой времени, которая у него была.

1 - кадры будут дублироваться или удаляться, чтобы сохранить требуемую частоту кадров.

2 - кадры будут пропускаться или удаляться, чтобы сохранить требуемую частоту кадров.

1 - значение по умолчанию. FFmpeg выбирает сам между методами 1 и 2.

С помощью команды -map можно указать, что к чему будет подстраиваться. Подробности: https://trac.ffmpeg.org/wiki/Map

-async кадры_в_секунду

Выбор метода синхронизации звука. Чтобы звук и видео совпадали по времени, аудиодорожка может растягиваться и сжиматься. Значение 1 скорректирует звуковую дорожку только в самом начале по принципу «дальше будь что будет».

Применяется для принудительного копирования всех временных меток из исходного файла. Полезно в случае, если начало видео - не 00:00, а что-то другое и это нужно сохранить.

-shortest

Когда самый короткий входящий файл закончился, прекращение кодирования.

Еще команд?

Команды для FFmpeg смотрите здесь:

http://help.ubuntu.ru/wiki/ffmpeg (на русском).

https://ffmpeg.org/ffmpeg.html (официальная документация).

Для кодирования кодеком x264, который сейчас приобрел популярность, гляньте это:

http://wiki.rosalab.ru/ru/index.php/FFmpeg (на русском, есть примеры).

Почему команд так много?

Они нужны для полного контроля процесса обработки файлов с видео и звуком.

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

Если есть какие-то вопросы по FFmpeg - спрашивайте в комментариях. Помогу, чем смогу.

Похожие записи:

Лайкнуть

Лайкнуть