Программа FFmpeg состоит из нескольких компонентов. В первую очередь, это сама консольная утилита ffmpeg, через которую нужно задавать параметры перекодирования файлов.
Еще в состав ffmpeg входит универсальная библиотека кодеков и декомпрессоров для кодирования и декодирования аудио- и видеофайлов libavcodec. Эта библиотека на сегодня считается одной из самых полных в мире, она способна распознавать достаточно большое количество форматов (практически все, известные на сегодняшний день).
Ещё FFmpeg имеет в составе простой проигрыватель ffplay с минимальным набором функций. Этого проигрывателя хватает для технического просмотра или проверки результатов кодирования, но не более.
Устанавливается пакет ffmpeg командой
sudo apt install ffmpeg
В большинстве случаев этого достаточно, но если у вас какая-то совсем древняя сборка линукса и установка не пошла - придется сначала обновить репозиторий:
sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt update
sudo apt dist-upgrade
Преимущества:
FFMpeg бесплатный.
FFMpeg мультиплатформенный, доступен на Linux, Windows, Mac Os и Android
Низкие требования к ресурсам и мощности компьютера
Может работать во всех Linux-дистрибутивах, включая самые древние.
Работает с большим количеством аудио и видео форматов.
Позволяет сконвертировать аудио/видео из одного формата в другой.
Поддерживает многоядерность и многопроцессорность
На NVidia картах дополнительно задействует для обработки GPU, что ускоряет производительность.
Полностью открытая лицензия и открытый код, выложенный на Гитхабе.
Недостатки
Работает в консоли, в режиме командной строки, что может создавать дискомфорт начинающим пользователям
Синтаксис команд довольно сложен, трудно переучиться с аналогов, имеющих графический интерфейс
Для выполнения нескольких команд последовательно, требует создания скрипта.
Как это работает:
Основной принцип кодирования в FFmpeg заключается в правилах построения командной строки в консоли.
Строка FFmpeg состоит из нескольких принципиальных частей - это:
- Команда вызова программы - ffmpeg
- Входная часть строки - расположена до ключа < -i >.
- Опция ввода - обозначается ключом < -i > (input). Как правило указывает входные файлы с путями их расположения на носителе. Или входные устройства, драйвера и протоколы для записи аудио и видео. Параметры находящиеся в строке после ключа < -i > в большинстве своём, считаются выходными по умолчанию.
- Основные (предварительные) параметры, которые располагаются до установки предпочитаемого кодека и его параметров для кодирования видео или аудио. В качестве основных, могут выступать параметры установок пиксельных форматов < -pix_fmt >, опции ресайзинга (изменения размеров кадра), опции дисплейных аспектов, выходная опция рейта < -r >, опция формата файла и прочее.
- Параметры кодека для видео - начинаются с установки предпочитаемого кодека для кодирования видео < - vcodec > и продолжаются до окончания перечисления устанавливаемых вами параметров, относящихся к видеокодеку
- Параметры кодека для аудио - начинаются с установки предпочитаемого кодека для кодирования аудио < - аcodec > и продолжаются до окончания перечисления устанавливаемых вами аудиопараметров, относящихся к аудиокодеку. Опции аудиофильтра < -аf > должны располагаться здесь же.
- Опция вывода - указывает выходной путь и имя для результирующего файла.
В принципе, многие параметры могут работать и при другом их расположении в строке кодирования, но подобная организация делается для удобства пользователя, что бы избежать хаоса, путаницы и некоторой части загадочных вопросов на тему - почему что-то не работает, ведь вроде бы всё правильно ;-)
Тем не менее некоторые основные части строки указанные выше - являются принципиальными, такие как - команда вызова программы, вход строки, ввод, видео, аудио, вывод. Схематически это всё будет выглядеть так:
1.[ffmpeg] 2.[input option] 3.[input file] 4.[main-input-param,-vf] 5.[vcodec,video param] 6.[acodec,audio param,-af] 7.[output file]
Та же строка но с примерами, наглядно:
1.[ffmpeg] 2.[-r 25(?)] 3.[-i /home/usr/video.mkv] 4.[-pix_fmt yuv420p -vf scale=800:448:flags=bicubic -s 800x448 -sar 1:1 -aspect 16:9 -f avi] 5.[-c:v libx264 -profile high -x264-params input-range=pc:range=pc -b 2000K -g 250 -bf 2 -keyint_min 25 -qmin 1 -i_qfactor 1.00] 6.[-c:a ac3 -ac 2 -b:a 256K -ar 48000 -af filter] 7.[/home/usr/video_out.avi]
Познакомимся на примерах с некоторыми основными навыками работы в ffmpeg.
Для того чтобы узнать все форматы, которые поддерживает данная сборка ffmpeg, нужно набрать команду: ffmpeg -formats
ffmpeg -codecs -информация по возможным кодекам в FFmpeg
ffmpeg -decoders -информация по возможным декодерам в FFmpeg
ffmpeg -encoders -информация по возможным энкодерам в FFmpeg
ffmpeg -filters -информация по возможным фильтрам в FFmpeg
ffmpeg -pix_fmts -информация по возможным пиксельным форматам в FFmpeg
Информацию о медиафайле можно получить посредством следующей команды:
ffmpeg -i название файла
Таким образом мы получили всю информацию о видеофайле.
А вот пример самого простого кодирования. В качестве параметров кодирования ffmpeg можно задавать расширения файлов. Следующая команда конвертирует видеофайл формата mp4 в формат mpg с дефолтными параметрами:
ffmpeg -i videoplayback.mp4 videplayback.mpg
Но в большинстве случаев следует всё-таки задавать параметры конвертирования. Вот самые основные параметры:
-i - исходный файл
-b или -vb - битрейт видео
-ar - частота дискретизации звука в Гц
-ab - битрейт звука в кБ/c
-ac - количество аудиоканалов
-vcodec - кодек для видео
-acodec - кодек для аудио
-f - формат исходящего файла
-s - размер исходящего файла в пикселях
-y - заменять исходящий файл без запроса подтверждения, если он уже есть
-r - установить количество кадров в секунду
-ss - установить время старта кодирования
-t - установить продолжительность кодирования
-q или -qscale (в разных сборках работает по-разному, надо пробовать) - ограничение минимального качества видео (качество видео ни в коем случае не будет хуже указанного этой опцией, даже если это будет противоречить остальным). Указывается в баллах от 1 до 9. 1 - максимально возможное качество. -q:a это качество аудио, а -q:v - качество видео.
Например, перекодируем видеофайл в точно такой же формат, только с определённым битрейтом 64 кБ/c:
ffmpeg -i input.avi -b 64k output.avi
Перекодируем в mpg только первые десять секунд видеоролика:
ffmpeg -i video.mp4 -t 10 video.mpg
Перекодируем видеофайл в формат flv для флэш плеера, изменив разрешение видео на 500x280 пикселей и установив частоту дискретизации звука 44100 Гц и битрейт аудио 32 кБ/с:
ffmpeg -i video.avi -s 500x280 -ar 44100 -ab 32 -f flv video.flv
Перекодируем видеофайл mp4 скачанный с ютуба в формат avi (кодек xvid) с разрешением 480х272, частотой 25 кадров в секунду, битрейтом 720К, кодеком аудио mp3(libmp3lame) и качеством видео 4 уровня:
ffmpeg -i video1.mp4 -s 480x272 -r 25 -vb 720k -f avi -vcodec mpeg4 -vtag xvid -acodec libmp3lame -q:v 4 video2.avi
Лично я использую такую конструкцию для конвертации видео в дорогу, чтоб его можно было смотреть на телефоне/планшете с максимальной экономией батареи и минимальным нагревом девайса.
FFmpeg может делать очень много всего. Это и склеивание файлов, и разложение видео на отдельные изображения/фотоколлажи, есть опции работы с субтитрами и многое другое. Весь впечатляющий список параметров конвертирования медиафайлов следует смотреть в документации на официальном сайте приложения, там есть более 2500 разных опций и параметров. Я приведу самые распостраненные и часто используемые:
Вызов справки помощи по FFmpeg, где < -h > - краткая справка помощи. < -h long > - длинная справка помощи. < -h full > - полная справка помощи:
ffmpeg -h full. Сохранение справки в текстовый файл: ffmpeg -h full > /home/user/ffmpeg_fullhelpПревратить набор картинок в видео
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 c разрешением 320x180
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Извлечь звуковую дорожку из видео и сохранить ее в mp3
ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192K -f mp3 sound.mp3
Пояснения:
Источник: source_video.avi
Битрейт выходного аудио: 192kb/s
Выходной формат: mp3
Полученный аудиофайл: sound.mp3Конвертировать звук из wav в mp3
ffmpeg -i song_origine.wav -vn -ar 44100 -ac 2 -ab 192 -f mp3 song_final.mp3
Точно так же можно конвертировать любые другие форматы звука, к примеру ogg или flac.Добавить звук к видео
ffmpeg -i song.wav -i video_origine.avi video_finale.mpg
Автоматизация кодирования
Если вам следует перекодировать сразу несколько файлов один за другим (к примеру все серии скачанного сериала) - для этого удобнее всего использовать bash-скрипт. Баш-скрипт это аналог bat-файла для DOS/Windows.
Для этого в папке с входными видео/аудио файлами, нужно создать файл с расширением .sh в который поочередно поместить команды на конвертацию каждого файла. Затем сохранить его, сделать исполняемым и запустить с админскими правами.
Итак, заходим в папку "Загрузки", представим себе, что именно в нее мы скачали наши серии.
cd Загрузки
Создаем там файл скрипта с именем к примеру conv.sh
sudo nano conv.sh
В начало файла помещаем конструкцию
#!/bin/bash
И затем построчно команды на конвертацию каждой серии в нужный формат. В целом файл должен выглядеть вот так:
В принципе если не любите nano - можете создать файл любым другим редактором, к примеру gedit, mcedit или даже LibreOffice.
Сохраняем файл, делаем его исполняемым
chmod u+x conv.sh
И запускаем его к примеру из Миднайт Kоммандера, работающего под рутом (sudo mc).
Серии начнут конвертироваться по порядку, указанному в файле и сохраняться под выходными именами, указанными в файле.
Совет: печатать все это руками и создавать каждый раз новый файл - это неудобно, поэтому рекомендую создать один раз, и потом копировать его и использовать где нужно, редактируя предварительно в LibreOffice.
Классно!
@aboutlinux @lindsay - продолжаю тебя читать про Линукс)
Вот думаю - нужен ли мне этот FFMpeg. Для работы с видеофайлами - как бы нужен, но пока и без него нормально справляюсь...
Правда, думаю, что от Open Shot Video Editor нужно переходить на какую-то более сложную программу для монтажа... это надо думать и осваивать. С другой стороны, более сложная программа на моём железе может подвисать гораздо сильнее.
@eldar-adov не знаю как тебе, а мне сейчас понадобился, вот пришлось в старые посты лезть, вспоминать как работает =)
@lindsay хорошо, когда есть старые посты)
@aboutlinux, поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на бейдж, чтобы увидеть свою страницу на Доске Почета.
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Ваш уровень снизился, и теперь вы гольян!
✅
✅
@aboutlinux, поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за общую выплату получил
Вы можете нажать на бейдж, чтобы увидеть свою страницу на Доске Почета.
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
@aboutlinux, поздравляю!
Ваш уровень вырос, и теперь вы-дельфин!
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
optimist, kudesnikaltay, anykeycheg, d0z4t0r, wallyt, zaria, alexfisher, vp-cosmos, student61, zlata777, volv, semitsvetik, olgaxx, zolotova1703, lilia, voronchihin, shal891, verdon, denispavlov, apnigrich, arhiopteriks, forbon21, pkrugloff, chin, bumex2008, cryptenthusiast, virt, massatela, naiger, mixtrum, marko44, sevaev, vitalson, blange, goodnews, siddxa, denisya, marigold, m0ssa99, jahspear, astrofilosof, evgeniy73, yurij12, egoryana, esperos, osra111, chimborazo, lvivrugby, felicita, atvalevsky, criptomir, tapejara, alte, wenderccc, erased
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас: