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

Установка

Находим пакет ffmpeg в Центре Приложений Ubuntu или в Менеджере Пакетов Synaptic. Или устанавливаем с помощью консоли:

sudo apt-get install ffmpeg

Установка из git

git clone git://git.videolan.org/ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab
make -j 2
sudo checkinstall --pkgname=ffmpeg --pkgversion="5:$(./version.sh)" --backup=no --deldoc=yes --fstrans=no --default
cd ..
rm -rf ffmpeg
sudo apt-get autoremove libfaac-dev libjack-jackd2-dev libmp3lame-dev libtheora-dev libvdpau-dev libvorbis-dev libvpx-dev libxvidcore-dev libogg-dev libavfilter1 libva-tpi1

Источник

Основные ключи

КлючПримерОписание
-i <filename> -i movie.avi Путь/имя входного файла
-f <format> -f mkv Формат входного/выходного файла
-r <fps> -r 23.976 Количество кадров в секунду
-ss <position> -ss 00:10:50 Начальная позиция кодирования
-t <position> -t 00:15:10 Конечная позиция кодирования
-vframes <n> -vframes 1000 Задаем количество кадров кодирования
-y -y Разрешить перезапись выходного файла
-vcodec codec -vcodec libx264 Кодек кодирования видео
-acodec codec -acodec libmp3lame Кодек кодирования аудио
-vn -vn Не кодировать видео
-an -an Не кодировать аудио
-sn -sn Не использовать субтитры
-vlang code -vlang eng Выбираем язык видео
-alang code -alang jpn Выбираем язык аудио
-slang code -slang rus Выбираем язык субтитров
-sameq -sameq Сохранить видео в том же качестве
-s <size> -s 720×400 Размер видео кадра
-deinterlace -deinterlace Включаем деинтерляцию.

Ключи настройки видео

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

Продвинутые ключи настройки x264

FIXME добавить аналоги для x264

Ключ Описание
Frame-type options По умолчанию
-g <integer> Максимальный интервал между ключевыми кадрами 250
-bf <1-16> Задаем количество В-фремов 3
-refs <1-16> Задаем количество рефремов 3
-b_strategy <0-2> Позволяет x264 адаптивно решать, где будут использоваться B-кадры, уменьшая количество B-кадров там, где это не нужно.
-deblockalpha < -3 .. +3> Задаем силу подавления блоков 0
-deblockbeta < -3 .. +3> Задаем точность определения блоков 0
-flags -loop/+loop Отключение/Включение фильтра подавления блочности
-flags -psnr/+psnr Отключение/Включение расчета psnr. Отключение, немного, увеличит скорость кодирования
-flags2 +bpyramid Позволяет B-кадрам быть связанными между собой, увеличивая эффективность использования 2-х или более B-кадров
-flags2 -fastpskip Быстрый пропуск определения P-кадров повышает скорость, но может вызвать небольшую блочность в местах, где есть непрерывная цветовая гамма или лёгкий градиент (тёмные сцены или небо)
-bframebias < -100 .. 100> Уровень преобладания B-кадров 0
-coder <0,1> Включаем или отключаем использование CABAC. 0 - выключено, 1 - включено 0
Анализ (Analysis) По умолчанию
-directpred <integer> Определяет метод нахождения векторов движения для B-кадров 2
-partitions <string> Разрешает производить дополнительный поиск размеров макроблоков, увеличивая эффективность кодирования и качество, но уменьшая скорость.
ffmpeg использует только p8x8, p4x4, b8x8, i8x8, i4x4
-me_method <epzs,hex,umh,full> Выбираем метод оценки движения полного пикселя hex
-me_range <integer> Максимальное количество попыток (с измененными данными) нахождения оптимального варианта при поиске вектора движения макроблока 16
-subq <1-9> Задаем сложность оценки подпикселя 7
-trellis <0,1,2> Задаем значение трелис 0
-flags2 +mixed_refs Включаем смешанное заимствование референсных кадров
-flags2 +dct8x8 Разрешаем умное использование преобразований 8×8 в I-кадре
-flags2 -fastpskip Задаем значение треллис квантования для повышения эффективности сжатия
-flags2 +wpred Разрешает взвешенное предсказание яркости для B-кадров, которое улучшает затухания и градиенты цвета (небо и т. п.)
-cmp -chroma/+chroma FIXME
-sc_threshold <integer> Чувствительность смены сцен Порог обнаружения смены сцены в кадре - для вставки принудительного ключевого кадра 40
-i_qfactor <float> Коэффициент квантования для I-P кадров. 1.40
-qcomp <integer> Уровень кривой квантования. Чем выше - тем выше битрейт, и на оборот. 0.6
-qmin <integer> Минимальный квантизер 10
-qmax <integer> Максимальный квантизер 51
-qdiff <integer> Максимальный шаг квантизера 4
Rate Control
-crf <0..51> Режим постоянного качества. Чем больше значение, там ниже качество. Разумный диапазон: 18-26
-cqp <integer> Режим постоянного квантизера. Лучше не использовать, так как crf дает лучшее качество при том же битрейте
-b <integer> Задаем битрейт
-pass <1,2,3> Номер прохода кодирования
Presets
-level <10..51> Задаем уровень сложности AVC 1). Где 10 = 1.0, 51 = 5.1.
Все уровни: 1, 1.1, 1.2, 1.3, 2, 2.1, 2.2, 3, 3.1, 3.2, 4, 4.1, 4.2, 5, 5.1
-vpre <string> Выбираем прессет2)

Продвинутые ключи настройки xvid/MPEG4

+mv4 Разрешаем использование четырех векторов поиска движения (MPEG-4 only)
+aic Advanced intra coding (h263+) FIXME
-cmp Function fullpel compare function FIXME
-subcmp Поиск движения с точностью до четверти пикселя
-qscale Задаем статический кванталайзер
+chroma Включаем хрома-оптимизацию
-bf <1-16> Задаем количество В-фремов
-trellis <0-2> Задаем уровень треллис квантования. Повышает сжатие
-mbd Режим принятия решений о макроблоке

Ключи настройки аудио

КлючПримерОписаниеПо умолчанию
-ab <bitrate> -ab 256k Битрейт аудио 64kbit/s
-ac <channels> -ac 6 Количество каналов 2
-ar <freq> -ar 41000 Частота дискредитации 44100Hz
-aq <0-100> -aq 100 Качество аудио

Прессеты для x264

Прессеты хранятся в /usr/share/ffmpeg.

Можно посмотреть через консоль:

ls /usr/share/ffmpeg

Все прессеты - это текстовые файлы. Каждый из них можно просмотреть и даже изменить, а также создать новый, свой.

Вот список стандартных прессетов:

baseline
faster
fast
ipod320
ipod640
lossless_fast
lossless_max
lossless_medium
lossless_slower
lossless_slow
lossless_ultrafast
main
medium
placebo
slower
slow
superfast
ultrafast
veryfast
veryslow

Применение

  • Экспорт аудио, с перекодированием:
ffmpeg -i "movie.avi" -vn -acodec libmp3lame -ab 192 -f mp3 "song_out.mp3"
  • Экспорт аудио, без перекодирования:
ffmpeg -i "movie.avi" -vn -acodec copy -f mp3 song_out.mp3
  • Кодирование в x264 и flac 3) 4) :
ffmpeg -y -i "movie.mkv" -vcodec libx264 -crf 22 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -me_method umh -subq 9 -trellis 2 -refs 8 -bf 6 -coder 1 -g 250 -me_range 24 -qmin 10 -qmax 51 -flags2 +bpyramid+wpred+mixed_refs+dct8x8 -threads 2 -acodec flac -aq 100 "out.avi"
  • Кодирование в x264 и flac, используя прессеты:
ffmpeg -i "movie.avi" -vcodec libx264 -vpre lossless_medium -acodec flac -aq 100 -y "out.avi"
  • Кодирование в xvid и mp3:
ffmpeg -i "movie.avi" -vcodec libxvid -qscale 2 -s 720x400 -acodec libmp3lame -ac 2 -ab 128k -y "out.avi"
  • Кодирование в MPEG4 и mp3:
ffmpeg -i "movie.avi" -vcodec mpeg4 -mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -qscale 3 -acodec libmp3lame -ac 2 -ab 128k -y "out.avi"
  • Кодирование аудио из AC3 в flac:
ffmpeg -i "intput.ac3" -vn -acodec libfaac -ac 2 -aq 100 -ar 48000 -y "out.flac"
  • Склеиваем изображения в видео:

(изображения должны иметь имена 000.jpg, 001.jpg, 002.jpg …)

ffmpeg -r 15 -b 2000 -i %03d.jpg images2video.avi

Ссылки

Английское описание ключей кодирования.

Русское описание ключей кодирования.

1) Таблицу можно посмотреть здесь
2) Список ниже
3) Данные настройки дают очень хорошее качество, но они больше для примера использования опций x264 в ffmpeg. Опции кодирования лучше подбирать под конкретное видео.
4) Сохраняем в avi, так как ffmpeg, из репозитория Ubuntu, не поддерживает сохранение в mkv.