Уменьшение размера видео в том же формате и уменьшение размера кадра
Этот вопрос может быть очень простым
Есть ли способ уменьшить размер/скорость кадра формата Lossy compression (WMV, MPEG), чтобы получить меньшее видео с меньшим размером в том же формате.
Есть ли для этого какой-либо open-source или собственный apis?
Ответы
Ответ 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, поэтому возьмите результаты с солью и выполните собственные тесты.