Категория:
FFmpeg - набор библиотек для кодирования и передачи аудио/видео.
Из обширных возможностей в данной статье мы рассмотрим именно кодирование, для этого нам понадобиться установить:
sudo zypper in ffmpeg
(для установки должен быть включен репозиторий пакмана).
после установки мы получаем в арсенал команду:
ffmpeg [ключи] -i ... [настройки формата на выходе]
Ключик -i указывает на то что это именно входной файл, а вот теперь самое интересное (далее в скобках часто будут указаны примеры, но далеко не все возможные значения):
-codecs выдаст список кодеков с которыми ffmpeg умеет обращаться (среди кодеков есть как встроенные так и ваши системные, далеко не все из списка установлены в вашей системе, и некоторые могут приводить к ошибкам). Напомню что список можно фильтровать, например:
ffmpeg -codecs | grep .EV
Обратите внимание, есть кодеки которые он может только читать или только кодировать в них, иногда один кодек имеет два названия, одно для чтения и одно для кодирования.
-formats выдаст нам список доступных контейнеров, но для нас это мало интересно, т.к. там есть все популярные.
-f контейнер для выходных потоков (mp4,avi,matroska,ogg)
-threads указывает кол-во потоков для кодирования, полезно если у вас многоядерная/многопроцессорная
машина, значение 0 укажет на автоматическое определение. ВАЖНО: не все кодеки поддерживают многопоточное кодирование.
-vcodec кодек для выходного видео потока (libxvid,mpeg4,libx264,h263)
-s длина и ширина выходного видео (1280x720, 720x480)
-vb битрейт видео (900kb)
-aspect соотношении сторон (4:3, 16:9, 16:10)
-sameq выход видео будет примерно с таким же качеством, что и на входе (включает VBR, и ключ -vb уже не нужен). В этом варианте размер выходного файла очень часто сильно увеличивается!
-acodec указывает аудио кодек (ac3,mp2,libvorbis,libmp3lame)
-ab аудио битрейт (96kb, 320kb)
-ar указывает частоту дискретизации (22050, 44100, 48000)
-ac кол-во каналов (1 - моно, 2 - стерео, 5 - 5.1)
Примеры:
ffmpeg -i ./input.mp4 -f matroska -vcodec libx264 -vb 1500kb -s 1280x720 -r 25 -acodec libmp3lame -ab 256kb -ac 2 ./output.mkv
ffmpeg -i ./input.avi -f mp4 -vcodec mpeg4 -vb 900kb -s 720x540 -r 25 -acodec libfaac -ab 96kb -ac 2 ./output.mp4
Мы рассмотрели(ну ведь не пролистали же самые основные ключи которые могут пригодится, теперь перейдем к "графике", ставим из того же пакмана:
sudo zypper in winff
Суть программы winff в создании и запуске shell-скрипта для кодирования. Она использует готовые строки с ключами (в её русском переводе "пресеты") для кодирования через ffmpeg и вставляет их по шаблону.
Добавляем файлы, выбираем пересет и жмем "Конверт". По умолчанию в качестве терминала используется xterm, кто хочет может в настройках поменять (например на /usr/bin/konsole). Особо изобретательные пользователи, смогут прикрутить ее и к другим программам помимо ffmpeg.
Можно легко добавлять свои пресеты, как это уже сделал автор для Nokia 5800
-f mp4 -r 25 -vcodec mpeg4 -s 640x360 -b 720kb -aspect 16:9 -acodec libfaac -ab 96kb -ar 44100 -ac 2
Есть возможность нажав кнопку "Настройка" (или в меню "Дополнительные настройки") поменять часть параметров без правки пресетов, ко всем настраиваемым параметрам есть подсказки на наведение мыши.
Бонус:
-t ограничит продолжительность выходного потока, удобно для создания превью.
-itsoffset отступ от начала потока.
-vn отключает выход видео.
-an отключает выход аудио.
-deinterlace фильтр для удаления "гребёнки".
пример сборки ffmpeg из git (внимательно следите за ошибками на каждом этапе, в случае возникновения их надо решать до выполнения следующего шага)
sudo zypper in yasm
sudo zypper in libdirac-devel libfaac-devel libmp3lame-devel libnut-devel libopenjpeg-devel librtmp-devel libtheora-devel libvorbis-devel libvpx-devel libx264-devel libxvidcore-devel
mkdir ~/git
cd ~/git
git clone git://git.ffmpeg.org/ffmpeg/
cd ffmpeg
git clone git://git.ffmpeg.org/libswscale/
./configure --enable-gpl --enable-nonfree --enable-libdirac --enable-libfaac --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-small --enable-runtime-cpudetect
make -j3