Как сжать видео с использованием FFMpeg?
Современные цифровые устройства генерируют гигабайты контента превосходного качества, но не всегда есть возможность выделить для него достаточное место для хранения, а сам процесс копирования файлов большого размера занимает долгое время.
К счастью, для использования изображения в качестве доказательства идеальное качество и высокое разрешение часто не нужны, достаточно иметь возможность прочесть необходимый текст или рассмотреть внешность и действия человека. Поэтому размер файла можно сократить, уменьшив размер картинки, усилив сжатие изображения, а в видео — ещё и уменьшив количество кадров в секунду.
Для компрессии можно использовать различное программное обеспечение:
- Профессиональные пакеты для работы с графикой и видео, например, Adobe Photoshop, Adobe Premier, Vegas (бывший Sony Vegas). Для быстрого сжатия пары десятков фотографий и видеороликов малопригодны, т.к. имеют большой размер, высокие системные требования, сложны в использовании и ОЧЕНЬ дороги.
- Бесплатное ПО, например, IrfanView, FastStone или VirtualDub. Как правило, менее требовательны к ресурсам и просты в использовании, но имеют свои недостатки в виде неоднозначных (особенно для коммерческого использования) лицензий, отсутствия некоторых необходимых функций, закрытого проприетарного кода и т.п.
- Бесплатное и свободное ПО, имеющее богатый функционал, открытый, модифицируемый и верифицируемый код и гибкий и мощный программный интерфейс. Звучит как сказка, но существует в реальности в виде двух пакетов — FFMpeg для обработки видео и ImageMagick для работы с изображениями.
Рассмотрим эти инструменты подробнее и начнём с пакета обработки видео
FFMpeg
Скачиваем FFMpeg для Windows (будем работать с этой ОС) (в зависимости от версии используемой вами операционной системы, 32- или 64-битной). В открывшейся в браузере папке найдите последний по времени ZIP-архив и скачайте его на свой компьютер.
Для дальнейшей работы нам потребуется файл ffmpeg.exe, который находится в скачанном архиве в папке BIN.
1. Создайте пустую папку, в которой в дальнейшем будете производить обработку видеофайлов. Для удобства назовём эту папку WORK.
2. В папке WORK создайте две папки IN и OUT.
3. Распакуйте файл ffmpeg.exe из папки BIN скачанного архива в папку WORK.
4. Скопируйте в папку WORK\IN видеофайл, который вы хотите сжать. Для удобства условимся, что этот видеофайл называется video.avi.
5.В папке WORK создайте текстовый файл convert.bat. В текстовом редакторе запишите в него команду:
Сохраните и закройте файл convert.bat, затем запустите его. На экране появится окно, демонстрирующее ход работы программы ffmpeg.exe, производящей обработку видеофайла:
В зависимости от производительности вашего компьютера скорость кодирования может составить 10% — 50% от продолжительности видеозаписи.
После завершения работы конвертора окно исчезнет, а в папке OUT будет находиться сконвертированный файл video.avi. В зависимости от размеров, качества и параметров сжатия исходного файла, размер сконвертированного файла может быть от 2 до 10 раз меньше исходного. А может и не быть, или быть даже немного больше, если исходный файл уже был сильно и качественно сжат — но такие случаи встречаются не очень часто.
Рассмотрим подробнее параметры команды, которую мы записали в файле convert.bat.
ffmpeg.exe — Собственно, имя самого запускаемого конвертора
-y — Ключ, который разрешает FFMpeg перезаписать сжатый файл в папке OUT, если он там уже есть с таким же именем
-i — Ключ, который говорит, что следующий элемент команды будет именем исходного файла
in\video.avi — Имя исходного файла. В данном случае говорит о том, что файл video.avi находится в папке IN в той же папке, что и исполняемый файл ffmpeg.exe. При необходимости можно записать полный путь к файлу, например c:\work\in\video.avi. Помните, что если в имени файла или папки есть пробелы, то всю строчку с путём и именем исходного файла нужно заключить в кавычки, например: «c:\Мои документы\in\Мой видеофайл.avi»
-vcodec — Ключ, который говорит, что следующий элемент команды будет названием кодека, т.е. условного имени программной библиотеки, реализующей определённый стандарт сжатия видеопотока
mpeg4 — Название кодека, которое следует за ключом –vcodec. В данном случае используется кодек, реализующий стандарт сжатия видео MPEG-4 Part 2. Для эффективной компрессии видео, как правило, применяются несколько кодеков, реализующих различные стандарты обработки: mpeg4, h263, h264 и wmv3. Не будем подробно описывать каждый из них, достаточно сказать, что для нашей задачи кодек mpeg4 представляет собой наиболее оптимальный вариант с точки зрения соотношения скорости работы, степени сжатия и конечного качества изображения (но вы можете попробовать изменить это значение и посмотреть, что у вас получится)
-q:v — Ключ, который говорит о том, что следующий элемент команды будет значением уровня качества изображения
10 — Уровень качества изображения сжатого видеофайла, которое следует за ключом -q:v. 1 — максимально возможное для исходного видеофайла качество, далее чем число больше, тем качество хуже (но при этом размер конечного видеофайла — меньше). При выборе качества нужно находить разумный компромисс между желанием получить изображение идеального качества, без «квадратиков» и т.п., и необходимостью как можно сильнее уменьшить исходный файл. Экспериментально установлено, что 10 – оптимальное для нашей задачи соотношение качества и размера (но вы также можете попробовать изменить это значение и посмотреть, что у вас получится)
-r:v — Ключ, который говорит, что следующий элемент команды будет числом кадров в секунду в сжатом видео
10 — Число кадров в секунду в сжатом видео. Видеозапись, полученная из системы видеонаблюдения или снятая мобильным телефоном, стандартно имеет 24-30 кадров в секунду. Для просмотра и идентификации событий, происходивших на проверяемом объекте, как правило, достаточно 5-10 кадров в секунду, что позволяет при конвертации сразу сжать видеофайл в 2-3 раза, с тем же качеством изображения
out\video.avi — И последний элемент команды — всегда имя сжатого файла. Для него действуют те же правила записи, что и для исходного
Ключей, опций и прочих возможностей у программы ffmpeg.exe огромное количество. Комбинируя их различными способами, можно реализовать практически любой возможный вариант обработки исходного видеофайла. Более подробную справку по ключам и примеры команд вы можете посмотреть в документации.
Меняя в файле convert.bat имя обрабатываемого файла, можно использовать его для сжатия разных файлов. Можно скопировать в папку IN несколько файлов и в файле convert.bat сделать несколько строк с именами этих файлов, чтобы они были сжаты одним запуском convert.bat. Но хорошо, если файлов 2-3, а если 20-30? Или 200-300? И все они имеют разные названия?
Скопировать и исправить такое количество команд вручную, видимо, будет довольно утомительно. В этом случае нам поможет автоматизация с использованием встроенного в Windows языка выполнения скриптов
JScript
В Windows существует встроенный механизм (так называемый Windows Script Host, или WSH), который позволяет запускать написанные в виде простого текстового файла программные скрипты на языках JScript и VBScript. Эти языки довольно похожи по своим возможностям и используют одни и те же функции WSH, которые, в отличии от bat-файлов, позволяют пользоваться всем тем, что есть у настоящих языков программирования — переменными, циклами, условиями, работой со строками, файлами и т.д.
Для автоматизации процесса обработки всех исходных видеофайлов, которые находятся в папке IN, в папке WORK создайте текстовый файл convert.js. В текстовом редакторе вставьте в него следующий программный код:
Разбирать этот скрипт в рамках данной статьи мы не будем – основные комментарии по его работе есть в коде, а те, кто заинтересовался вопросом программирования на JScript, могут обратиться к ресурсам в интернете.
Итак, сохраните файл, закройте редактор. Запустите файл convert.js на исполнение. Если всё сделано правильно, то на экране будут друг за другом последовательно появляться и исчезать окна с процессами преобразования программой ffmpeg.exe исходных файлов из папки IN. Когда последнее окно исчезнет, то в папке OUT будут лежать все преобразованные файлы.
Инструменты, использованные нами, можно, конечно же, применить для обработки не только видеофайлов, но и файлов любых других видов. Следующий раз мы с вами разберёмся, чем (бесплатно, без регистрации и СМС) можно сжать файлы изображений большого размера.
Продолжение следует…
Комментарий недоступен