Уменьшение размера видео с тем же форматом и уменьшение размера кадра - PullRequest
66 голосов
/ 20 декабря 2010

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

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

Есть ли для этого какой-либо открытый исходный код или проприетарный apis?

Ответы [ 6 ]

81 голосов
/ 20 декабря 2010

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.

37 голосов
/ 27 августа 2014

Если вы хотите сохранить тот же размер экрана, вы можете использовать коэффициент 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
28 голосов
/ 02 декабря 2013

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

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

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

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

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

4 голосов
/ 27 мая 2018
ffmpeg -i <input.mp4> -b:v 2048k -s 1000x600 -fs 2048k -vcodec mpeg4 -acodec copy <output.mp4>
  • -i входной файл

  • -b: v видеобитрат выходного видео в килобайтах (вы должны попробовать)

  • -s размеры выходного видео

  • -fs FILESIZE выходного видео в килобайтах

  • -vcodec videocodec (используйте ffmpeg -codecs для получения списка всех доступных кодеков)

  • -acodec аудиокодек для вывода видео (только копируйте аудиопоток, не подавляйте)
3 голосов
/ 09 ноября 2018

Я захотел сделать это слишком недавно, поэтому я создал инструмент под названием Shrinkwrap , который использует FFmpeg для перекодирования видео, сохраняя при этом как можно больше исходных метаданных (включая метки времени изменения файла).

Вы можете запустить его как контейнер докера:

docker run -v /path/to/your/videos:/vids bennetimo/shrinkwrap \
--input-extension mp4 --ffmpeg-opts crf=22,preset=fast /vids

Где:

  • / path / to / your / videos /где видео, которые вы хотите конвертировать
  • - input-extension - это тип видео, которое вы хотите обработать, здесь .mp4
  • - ffmpeg-opts - любые произвольные параметры FFmpegвы хотите использовать для настройки транскода

Затем он рекурсивно найдет все видеофайлы, которые соответствуют расширению, и перекодирует их в файлы с одинаковым именем с суффиксом -tc.

Дополнительные параметры конфигурации, предустановки для GoPro и т. Д. См. В readme .

Надеюсь, это кому-нибудь поможет!

3 голосов
/ 29 июня 2018

Существует приложение для Mac и Windows, которое вызывает Handbrake, я знаю, что это не командная строка, а для быстрого открытия файла - выберите формат выходного файла и приблизительный размер вывода, сохраняя при этом большую часть полезного для видео.это хорошо, это просто графическое представление ffmpeg в лучшем виде ... Он поддерживает ввод из командной строки для тех жестких текстов .. https://handbrake.fr/downloads.php

...