Внезапно ваш диск под завязку забит фотографиями и видео, а впереди новые поездки. Что делать, покупать новый, арендовать дисковое пространство на облаке, или может лучше сжать видео файлы через ffmpeg?
![](https://habrastorage.org/web/451/f30/a09/451f30a091174b44b05ab40017542dc6.png)
Впрочем зачем себя ограничивать экономией дискового пространства? Предлагаю узнать удивительные возможности обработки фотографий, аудио и видео данных, утилитами командной строки.
Библиотека ffmpeg и обработка видео
Библиотека с открытым исходным кодом ffmpeg скорее всего уже установлена на вашей операционной системе. Если же нет, установите его штатной программой управления пакетами, это не займет много времени.
Конвертировать один формат аудио и видео файлов в другой
ffmpeg -i file.<old_extension> [options] file.<new_extension>
Уменьшаем видео, записанное на фотоаппарате:
ffmpeg -i MVI_4703.MOV MVI_4703.avi
То же самое, но с контролем качества.
ffmpeg -i MVI_4703.MOV -q:v 4 MVI_4703.avi
Размер видео уменьшился более чем в 5 раз без ощутимой потери качества. Опция -qscale:v n
, сокращенно -q:v n
позволяет установить уровень качества генерируемого видеопотока, где n
принимает значения в интервале от 1 до 31. Значение 1 соответствует самому лучшему качеству, а 31 — самому худшему.
-rw-r--r-- 1 mig users 124M июл 18 23:29 foto/MVI_4703.avi
-rw-r--r-- 1 mig users 686M июн 27 21:38 foto/MVI_4703.MOV
Указать кодек
Для того, чтобы выбрать нужный нам кодек используем ключи -c:a <codec> -c:v <codec>
.
ffmpeg -i video.mp4 -c:v vp9 -c:a libvorbis video.mkv
Увидеть все поддерживаемые кодеки можно командой ffmpeg -codecs
.
Поменять контейнер файла
Возьмем теперь такой юзкейс случай. Встроенный плеер вашего телевизора поддерживает формат mkv, но не поддерживает m4v. Для того, чтобы поменять контейнер воспользуемся следующей командой.
ffmpeg -i video.m4v -c:av copy video.mkv
Если же нужно поменять только звук, а видео оставить как есть, запускаем эту команду. Почему-то телевизоры Филипс понимают только форматы звука AAC/AC3.
ffmpeg -i video.m4v -c:v copy -c:a aac video.mkv
Добавить звуковую дорожку
Просто перечисляем файлы ввода и задаем вывод.
ffmpeg -i video.mp4 -i audio.ogg video_sound.mp4
Извлечь звуковую дорожку
Если нужно просто извлечь звук, то можно так.
ffmpeg -i video.MOV -vn audio.ogg
Задаем формат извлекаемой звуковой дорожки.
ffmpeg -i video.MOV -vn -c:a flac audio.flac
Указывает приемлемый битрейт, по умолчанию будет записано 128k.
ffmpeg -i video.MOV -vn -c:a flac -b:a 192k audio.flac
Делаем слайд-шоу из картинок
Тот самый случай, когда гладко было на бумаге. На практике приходится ходить по граблям, продираясь через разнобой форматов, кодеков, размеров и ориентации фотографий.
ffmpeg -r .3 -pix_fmt rgba -s 1280x720 -pattern_type glob -i "*.JPGЭ video.mkv
Требуются некоторые пояснения.
- -r number — частота кадров в секунду.
- -pix_fmt — Пиксельный формат, список из команды
ffmpeg -pix_fmts
. Не со всеми форматами получается выставить нужный размер кадра. - -pattern_type glob — Для того, чтобы использовать совпадение по шаблону как в командной оболочке. Альтернативой является использование формата C
printf
, напримерimage%03d.png
для всехimage0001.png
,image0002.png
и т. д.
Изменить видеопоток
Допустим, вам нужен не весь видео файл, а лишь часть его. Данная команда вырежет 10 секунд видео, начиная с первой минуты.
ffmpeg -i video_full.m4v -c:av copy -ss 00:01:00 -t 10 video_short.m4v
Как повысить качество потоков аудио или видео? Для этого используется ключ битрейта -b
.
ffmpeg - video.webm -c:a copy -c:v vp9 -b:v 2M final.mkv
Захват экрана
Для захвата экрана используется устройство x11grab
, а ffmpeg должен быть собран с опцией --enable-x11grab
.
ffmpeg -f x11grab -framerate 25 -video_size 4cif -i :0.0 out.mpg
- -video_size word — Размер захвата, cif = 352x288, 4cif = 704x576. Подробнее в
info ffmpeg-utils
.
Бонусная дорожка
Для автоматической обработки фотографий удобно работать с программой ImageMagick. Поменять размер всех фотографий в папке.
mogrify -resize 60% *.png
Аккуратное повышение резкости изображения, наподобие Smart Sharpen с помощью Perl скрипта, использующего convert
и composite
из набора утилит ImageMagick.
Ссылки по теме
- Хабрапост про ffmpeg, много полезных команд, однако синтаксис для большинства уже успел поменяться.
- A quick guide to using FFmpeg to convert media files
- Настройка качества кодировки в FFmpeg: переменный и постоянный битрейт для Mpeg4