Подтвердить что ты не робот

Уменьшение размера видео в том же формате и уменьшение размера кадра

Этот вопрос может быть очень простым

Есть ли способ уменьшить размер/скорость кадра формата Lossy compression (WMV, MPEG), чтобы получить меньшее видео с меньшим размером в том же формате.

Есть ли для этого какой-либо open-source или собственный apis?

4b9b3361

Ответ 1

ffmpeg предоставляет эту функцию. Все, что вам нужно сделать, запускается как

ffmpeg -i <inputfilename> -s 640x480 -b 512k -vcodec mpeg1video -acodec copy <outputfilename>

Для более новых версий ffmpeg вам нужно изменить -b на -b:v:

ffmpeg -i <inputfilename> -s 640x480 -b:v 512k -vcodec mpeg1video -acodec copy <outputfilename>

для преобразования входного видеофайла в видео с размером 640 x 480 и битрейтом 512 килобит в секунду с использованием видеокодека MPEG 1 и просто копирование исходного аудиопотока. Конечно, вы можете подключить любые значения, которые вам нужны, и поиграть с размером и битрейтом, чтобы достичь желаемого качества/размера. Существует также тонна других опций, описанных в документации

Запустите ffmpeg -formats или ffmpeg -codecs для списка всех доступных форматов и кодеков. Если вам не нужно настраивать конкретный кодек для окончательного вывода, вы можете добиться более высоких коэффициентов сжатия с минимальной потерей качества с использованием современного кодека, такого как H.264.

Ответ 2

Если вы хотите сохранить одинаковый размер экрана, вы можете использовать коэффициент crf: https://trac.ffmpeg.org/wiki/Encode/H.264

Вот команда, которая работает для меня: (на Mac вам нужно добавить -strict -2, чтобы использовать аудиокодек aac.

ffmpeg -i input.mp4 -c:v libx264 -crf 24 -b:v 1M -c:a aac output.mp4

Ответ 3

Вместо использования фиксированных скоростей передачи данных с кодеком H.264 вы также можете выбрать другой пресет, как описано в https://trac.ffmpeg.org/wiki/x264EncodingGuide. Я также нашел Сравнение видеокодера в блоге KeyJ (заархивированная версия) интересное чтение, оно сравнивает H.264 с Theora и другими.

Ниже приведено сравнение различных вариантов, которые я пробовал. Записанное видео было первоначально размером 673М, сделанное на iPad с помощью RecordMyScreen. Он имеет продолжительность около 20 минут с разрешением 1024x768 (при этом половина видео не заполнена, поэтому я обрезал его до 768x768). Чтобы уменьшить размер, я понизил разрешение до 480x480. Звука нет.

Результаты, взяв за основу 1024x768 (и применяя обрезку, масштабирование и фильтр):

  • Без специальных опций: 95M (время кодирования: 1m19s).
  • При добавлении только -b 512k размер упал до 77M (время кодирования: 1m17s).
  • Только -preset veryslow (и не -b), он стал 70M (время кодирования: 6m14s)
  • При использовании -b 512k и -preset veryslow размер становится 77M (на 100K меньше, чем только -b 512k).
  • С -preset veryslow -crf 28, я получаю файл 39M, который занимал 5m47s (без визуального качества для меня).

N = 1, поэтому возьмите результаты с солью и выполните собственные тесты.