Номер телефона

Последнее обновление:

Оптимизируем размер видеофайла

Как оптимизировать размер видео в LINUX Ubuntu? Это очень просто. При помощи утилиты ffmpeg.

В смысле – как снизить размер файла видео так, чтобы оно практически не потеряло в качестве.

Например, Вы записали видео на телефоне/смартфоне и решили снизить его объем, чтобы оно не занимало много места на жестком диске компьютера. Это тем более актуально, если видеофайл будет размещен на видеохостинге. Скажем, Youtube пока не очень лимитирует размеры видеофайлов, а вот если размещать видео где-то на "своем" хостинге - вот тут размер будет очень даже критичным аспектом.

В Windows (по крайней мере, вплоть до Windows 7 включительно) штатные средства для оптимизации видео отсутствуют. Поэтому там приходится применять разного рода конвертеры. А их еще надо где-то найти и скачать (на свой собственный страх и риск, разумеется). А вот в Linux есть достаточно функциональная команда-утилита:

ffmpeg

Чтобы не тратить времени на общие слова, перейдем сразу к делу. Допустим, у нас есть файл видео в формате MP4 и мы хотим оптимизировать его. Исходное имя файла input.mp4, выходное – output.mp4.

Следует открыть консоль Linux (в том каталоге, в котором находится файл input.mp4) и ввести следующую команду:

ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -maxrate 2M -bufsize 1M -strict -2 output.mp4

Такая команда работает, в частности, в Linux Ubuntu 16.04.4 LTS.

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

В итоге на выходе получаются видеофайлы, в самом деле, гораздо меньшего объема, но практически не потерявшие в качестве, в частности, если смотреть их на экране размерами 1920*1080 пикселей.

Примечание: иногда в процессе обработки видеофайлов наблюдаются сообщения, вроде:

Past duration 0.744331 too large

Так, файл размером примерно 30 МБ уменьшился до 3 МБ (три мегабайта!). Файл размером 180 МБ сжался до 20 МБ с небольшим. И так далее.

Однако, на качество получающегося в результате видео это не влияет.

Вот, кстати, типичный пример НЕоптимизированного видео:

Скриншот с сайта omsk-news.net
Типичный пример НЕоптимизированного видеофайла, имеющего излишне высокий объем

При длительности всего лишь… 3 минуты 14 секунд размер видео составляет целых 188 МБ. Разумеется, из-за этого видео практически невозможно смотреть, так как оно постоянно прерывается в результате недостаточной скорости сетевого соединения.

Впрочем, по поводу его просмотра. Думается, это – одно из направлений нынешней ювенальной пропаганды. Какие, мол, родители нынче жестокие, нужно детей поскорее от них отнимать. Вот и принимают потом ТАКИЕ законы, что…

Теоретически, конечно, есть вероятность, что, в самом деле, есть матери-идиотки, кои способны на подобные издевательства. Но, судя по некоторым деталям в видео (не будем здесь обсуждать, по каким именно – чтобы не создавать базу знаний для психологов – распространителей ювенальных технологий), по его общей компоновке… создается определенное впечатление, что сие дело было – банально сфабриковано. Уж очень оно напоминает типичный пропагандистско-новостной клип. Да, накидать людям эмоций, бросить в глаза КРАЙНЕ МАЛУЮ(!) толику обескураживающих фактов – и вскорости замолчать. Да, знакомо всё это, уже в течение 20 последних лет. Именно по такой схеме работают достаточно многие популярные СМИ, особенно телевидение, радио. Собственно, это – один из стандартных приемов НЛП (нейролингвистического программирования).

Скорее всего, или та приемная мать «перешла дорогу» кое-кому (типа местных или НЕместных блатных ад министраций), или еще что. Например, отказалась от вакцинации или цифровизации. А детишек – их вполне и подговорить могли. Угрозами или обещаниями «золотых гор». Тем более, ведь, видимо, практически у КАЖДОГО ребенка в любой семье могут быть хоть какие-то, хоть минимальные обиды, непонимания в отношении его родителей. Тем более, приемных родителей. Ну, а уж усилить это, дорисовать детали, и в итоге – «обнаружить» нарушения закона  – вот тут уж и психологи вполне могли «помочь». Очень сомнительное видео.

Как это характеризовать? Как безответственность со стороны разработчиков сайта – тех, кто разместил видео? Мол, пользователям «и так пойдет»? Впрочем, какая разница. Хотя, оптимизировать это видео можно было бы в течение пары минут и его размер составил бы несколько десятков мегабайт, не больше (см. выше).

Как оптимизировать видео и масштабировать его?

Для этого применяется параметр scale. Например: scale=150:100

означает, что видео будет масштабировано к выходным размерам в 150px шириной и 100px высотой.

Если хочется сделать масштабирование, чтобы один из параметров, например, высота определялся автоматически в зависимости от заданной ширины, тогда scale=150:-1. Команда может иметь такой вид:

ffmpeg -i input.mp4 -vf scale=150:-1 -c:v libx264 -b:v 2M -maxrate 2M -bufsize 1M -strict -2 output.mp4

Видео будет масштабировано до ширины 150рх, при этом высота будет масштабирована автоматически, исходя из соотношения между шириной и высотой. И, кроме того, его размер и качество будут соответствующим образом уменьшены.

Бывают, однако, ситуации, когда соотношение размеров видео является "странным". Когда при задании фиксированной ширины значение высоты, с учетом получающегося соотношения, будет некорректным и возникнет ошибка примерно с таким сообщением: Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height.

Кроме того, иногда может ухудшиться разрешение (качество) видео. Чтобы избежать такой ошибки, можно, например, использовать такую команду:

ffmpeg -i input.mp4 -vf scale=150:-2 -c:v libx264 -b:v 2M -maxrate 2M -bufsize 1M -strict -2 output.mp4

Указание опции -2 в данном случае установить высоту делимой на 2.

Правда, в некоторых случаях может возникнуть ошибка вида Size values less than -1 are not acceptable. Тогда можно использовать следующее:

ffmpeg -i input.mp4 -vf scale="150:trunc(ow/a/2)*2" -c:v libx264 -b:v 2M -maxrate 2M -bufsize 1M -strict -2 output.mp4

Аналогично можно задать фиксированную высоту, а ширину, наоборот, определить автоматически. При этом нужно будет использовать что-то вроде scale="trunc(oh*a/2)*2:150".

Как выполнить преобразование размеров видео при помощи ffmpeg и сразу скопировать полученный файл в какую-нибудь папку?

Например, скопировать в защищенную папку /media/sf_Common/:

ffmpeg -i input.mp4 -vf scale=150:-2 -c:v libx264 -b:v 2M -maxrate 2M -bufsize 1M -strict -2 output.mp4 && sudo cp output.mp4 /media/sf_Common/output.mp4

Операция копирования выполнится только тогда, если предыдущая команда (до символов "&&") выполнится без ошибок. Может потребоваться ввод пароля.


Комментарии:
Всего комментариев:0
Пожалуйста, не забудьте ознакомиться с правилами оставления комментариев.



Подписаться на комментарии на этой странице

Мы можем выполнить

Другие услуги
Интересная и полезная
информация
НАПИШИТЕ НАМ
Яндекс.Метрика
Номер телефона
© Copyright Все права защищены 2013-2025 Научный консалтинг