Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
aboutlinux
5 лет назад

FFmpeg - инструмент для перекодирования мультимедиа.

изображение.png

Программа 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 состоит из нескольких принципиальных частей - это:

  1. Команда вызова программы - ffmpeg
  2. Входная часть строки - расположена до ключа < -i >.
  3. Опция ввода - обозначается ключом < -i > (input). Как правило указывает входные файлы с путями их расположения на носителе. Или входные устройства, драйвера и протоколы для записи аудио и видео. Параметры находящиеся в строке после ключа < -i > в большинстве своём, считаются выходными по умолчанию.
  4. Основные (предварительные) параметры, которые располагаются до установки предпочитаемого кодека и его параметров для кодирования видео или аудио. В качестве основных, могут выступать параметры установок пиксельных форматов < -pix_fmt >, опции ресайзинга (изменения размеров кадра), опции дисплейных аспектов, выходная опция рейта < -r >, опция формата файла и прочее.
  5. Параметры кодека для видео - начинаются с установки предпочитаемого кодека для кодирования видео < - vcodec > и продолжаются до окончания перечисления устанавливаемых вами параметров, относящихся к видеокодеку
  6. Параметры кодека для аудио - начинаются с установки предпочитаемого кодека для кодирования аудио < - аcodec > и продолжаются до окончания перечисления устанавливаемых вами аудиопараметров, относящихся к аудиокодеку. Опции аудиофильтра < -аf > должны располагаться здесь же.
  7. Опция вывода - указывает выходной путь и имя для результирующего файла.
    В принципе, многие параметры могут работать и при другом их расположении в строке кодирования, но подобная организация делается для удобства пользователя, что бы избежать хаоса, путаницы и некоторой части загадочных вопросов на тему - почему что-то не работает, ведь вроде бы всё правильно ;-)
    Тем не менее некоторые основные части строки указанные выше - являются принципиальными, такие как - команда вызова программы, вход строки, ввод, видео, аудио, вывод. Схематически это всё будет выглядеть так:
    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 название файла

изображение.png

Таким образом мы получили всю информацию о видеофайле.
А вот пример самого простого кодирования. В качестве параметров кодирования 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 разных опций и параметров. Я приведу самые распостраненные и часто используемые:

  1. Вызов справки помощи по FFmpeg, где < -h > - краткая справка помощи. < -h long > - длинная справка помощи. < -h full > - полная справка помощи:
    ffmpeg -h full. Сохранение справки в текстовый файл: ffmpeg -h full > /home/user/ffmpeg_fullhelp

  2. Превратить набор картинок в видео
    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). Шаблон имен можно указать свой, в зависимости от того под какими именами сохраняет фотки ваша камера/телефон

  3. Порезать видео на картинки
    ffmpeg -i video.mpg image%d.jpg
    Эта команда создаст файлы image1.jpg, image2.jpg и т.д., поддерживаются так же форматы PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.

  4. Конвертировать видео в формат для 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

  5. Извлечь звуковую дорожку из видео и сохранить ее в 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

  6. Конвертировать звук из wav в mp3
    ffmpeg -i song_origine.wav -vn -ar 44100 -ac 2 -ab 192 -f mp3 song_final.mp3
    Точно так же можно конвертировать любые другие форматы звука, к примеру ogg или flac.

  7. Добавить звук к видео
    ffmpeg -i song.wav -i video_origine.avi video_finale.mpg

Автоматизация кодирования
Если вам следует перекодировать сразу несколько файлов один за другим (к примеру все серии скачанного сериала) - для этого удобнее всего использовать bash-скрипт. Баш-скрипт это аналог bat-файла для DOS/Windows.
Для этого в папке с входными видео/аудио файлами, нужно создать файл с расширением .sh в который поочередно поместить команды на конвертацию каждого файла. Затем сохранить его, сделать исполняемым и запустить с админскими правами.
Итак, заходим в папку "Загрузки", представим себе, что именно в нее мы скачали наши серии.
cd Загрузки
Создаем там файл скрипта с именем к примеру conv.sh
sudo nano conv.sh
изображение.png

В начало файла помещаем конструкцию
#!/bin/bash
И затем построчно команды на конвертацию каждой серии в нужный формат. В целом файл должен выглядеть вот так:

изображение.png

В принципе если не любите nano - можете создать файл любым другим редактором, к примеру gedit, mcedit или даже LibreOffice.
Сохраняем файл, делаем его исполняемым
chmod u+x conv.sh
И запускаем его к примеру из Миднайт Kоммандера, работающего под рутом (sudo mc).

изображение.png

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

40
356.408 GOLOS
На Golos с April 2019
Комментарии (9)
Сортировать по:
Сначала старые