Как я могу использовать, ffmpeg
чтобы уменьшить размер видео за счет снижения качества (естественно, в минимально возможной степени, но мне нужно, чтобы оно работало на мобильном устройстве, на котором мало свободного места)?
Я забыл написать еще одну вещь. Когда видео может использовать субтитры (* .srt или * .sub), я бы тоже хотел конвертировать их, чтобы соответствовать параметрам преобразованного видеофайла.
video
ffmpeg
compression
xralf
источник
источник
ffmpeg
странице man показана-fs
опция ограничения размера вывода, что-то вродеffmpeg -i in.avi -fs 100M out.avi
работы?man ffmpeg | wc -l --> 5254
.avi
не главная проблема ..avi
это просто контейнер. Основная проблема заключается в том, какие кодеки вы используете. Многие (большинство?).avi
Видео-роликов используют кодеки более старого стиля (например, XviD), которые хороши, но больше при том же качестве по сравнению с кодеками более позднего поколения. Обычно вы можете получить жесткое кодирование с использованиемH.264
стандарта сжатия видео (например, кодекаx264
) иaac
сжатия аудио. Используемый вами контейнер и кодеки зависят от вас и вашего телефона ....mp4
Контейнер хорошо принят ... (но может ли ваш телефон справиться с этим: см. эту ссылкуОтветы:
Смотрите этот ответ. Приведено ниже для удобства:
При необходимости измените кодек - libx264 может быть доступен, если нет libx265, за счет немного большего результирующего размера файла.
источник
-crf 24
взяла 255,3 МБ видео, которое у меня было, и уменьшила его до 72,7 МБ без заметного снижения качества. Имейте upvote!libx265
для еще большего уменьшения размера.ffmpeg -i input.avi -vcodec libx264 -crf 24 output.avi
. Это уменьшило 100 МБ видео до 9 МБ. Очень небольшое изменение качества видео. Спасибо!Если вы не ищете конкретный битрейт, я бы порекомендовал этот
-crf
вариант. Это наиболее часто используемый дляx264
кодирования: http://slhck.info/articles/crfКороче говоря, CRF из 23 позволит получить фильм с качеством DVD (~ 700 МБ-1 ГБ), а более низкие значения CRF будут более качественными (большие файлы).
источник
Вы упомянули о желании уменьшить размер файла, чтобы разместить больше видео на мобильном устройстве, что также является моим вариантом использования. Все ответы здесь для снижения качества сжатия, но никто не упомянул уменьшение размера видеокадра. Это намного быстрее, примерно в 3-5 раз быстрее, чем повторное сжатие в моем опыте. См. Ffmpeg документы по масштабированию для получения дополнительной информации.
источник
Я проверил большинство других предложенных ответов на этот вопрос. Выводы по данным испытаний приведены ниже. Вот предложенные ответы, которые я проверил:
(BR) Изменить битрейт, используя:
(CR) Измените коэффициент постоянной скорости, используя:
(SZ) Измените размер экрана видео (например, на половину его размера в пикселях), используя:
(BL) Измените профиль H.264 на «базовый уровень», используя:
(DF) Использовать обработку ffmpeg по умолчанию, используя:
ДАННЫЕ
Я рассчитал целевой битрейт для (BL), используя предложенный метод.
=== Файл A - Как узел помогает продвигать Angular-Fnbixa7Ts6M.mkv ===
=== Файл B - Использование GraphQL с Angular _ By - Ли Костелло-OGyFxqt5INw.mkv ===
ВЫВОДЫ
(SZ) метод, безусловно, самый быстрый метод. Это было в 2-4 раза быстрее. Это может быть очень серьезной проблемой для видео высокой четкости, поскольку для преобразования всех остальных методов требовалось больше времени, чем для реальной длины видео! Например, метод (CR) занял 53 минуты для преобразования 21-минутного видео.
Метод (SZ), безусловно, является лучшим методом, если определение видео больше, чем определение экрана, на котором оно будет отображаться. Например, если ваш телефон может отображать только изображение в формате 1080p, отправка видео с разрешением 3840x2160 будет просто расточительной. Лучше всего вдвое уменьшить его до 1080p.
Некоторые из предложенных ответов на самом деле увеличили размер некоторых видео. Например, метод (BR) более чем удвоил размер выборки 1080p. Тем не менее, размер 2160p составил одну треть. Для семпла высокой четкости все методы (CR), (BL) и (DF) увеличили размер видео.
Правильный (или лучший) ответ
Всегда лучше сначала уменьшить разрешение до максимума, поддерживаемого вашим целевым дисплеем.
Если вы хотите уменьшить размер файла, это будет зависеть от вашего личного выбора. Вы можете уменьшить объем информации или увеличить степень сжатия.
Вы можете уменьшить разрешение больше, если это не то, что вас беспокоит.
Если видео не содержит быстрых сцен, вы можете снизить частоту кадров.
Если у вас мощный процессор, а пространство - это единственная проблема, вы можете увеличить степень сжатия.
Скорость передачи данных является комбинацией нескольких факторов. Поэтому простое указание ffmpeg понижения скорости передачи может не дать желаемых результатов.
Другим способом снижения содержания информации является снижение глубины цвета. Как это сделать, пока не обсуждалось.
источник
Обратите внимание, что кажется, что
ffmpeg
уже выполняется некоторая оптимизация при запуске без параметров, поэтому, прежде чем пытаться использовать настройки, которые вы не понимаете, или решаете явно потерять информацию, попробуйте преобразование по умолчанию:В моем случае он уменьшил битрейт как видео, так и аудио (вы можете проверить и сравнить входной и выходной файл, запустив
ffprobe
их), превратив видео 700 Мб в видео 60 Мб, имеющее, казалось бы, похожее качество.источник
У меня есть рецепт, который я изначально подделал для себя, чтобы преобразовать видео в формате Motion JPEG, которые генерирует моя старая камера (это очень большие видео, поскольку каждый кадр представляет собой целое изображение JPEG), в h264. Вот адаптация для других видов видео (курсов и т. Д.).
Я не использую ffmpeg , но mplayer и mencoder . Во-первых, мы должны демультиплексировать аудио с помощью mplayer:
-vo null
и-ao null
указывает mplayer не извлекать видео.На следующих шагах мы сделаем 3-проходное сжатие с помощью mencoder. На первом этапе мы выберем подходящее сжатие в режиме постоянного качества ( параметр crf ) в качестве начальной точки:
Вы можете добавить параметр slow_firstpass в -x264encopts, если вы не уверены в конечном качестве видео. В руководстве Mencoder говорится, что эта опция отключает некоторые параметры, которые «значительно улучшают скорость кодирования, практически не влияя на качество последнего прохода». Итак, используйте его только на последнем шаге.
Вы должны попробовать несколько значений для crf - попробуйте начиная с 25 и продолжайте увеличивать его, пока вы не заметите артефакты в получающемся видео (более высокие значения сжимают больше). Помните, что последующие этапы кодирования улучшат качество, которое вы выбрали для crf .
Альтернативы для пресета veryslow - медленный , медленный , средний и т. Д. Полный список см. В руководстве по mencoder.
RateTol контролирует изменение битрейта - я не уверен, правильно ли я здесь делаю, но я установил его на максимальное значение, чтобы предоставить mencoder полную свободу выбора правильного битрейта для каждой сцены.
После первого прохода вы заметите, что последняя строка дает вам средний битрейт, который вы будете использовать на следующих шагах:
Измените параметр crf , рекомендуемый при первом проходе, на битрейт , требуемый при последующих проходах:
Это второе проходное кодирование будет считывать статистику, сгенерированную на первом проходе (
divx2pass.log
иdivx2pass.log.mbtree
), чтобы оптимизировать сжатие.Обратите внимание, что вы будете использовать тот же видеовход, а не сгенерированный при первом проходе - видео с первого прохода полезно только для проверки исходного качества.
Также обратите внимание, что
pass=3
( неpass=2
) создаст новый файл статистики, поэтому вы можете повторить последний шаг столько раз, сколько захотите. Я обычно делаюpass=3
дважды, всегда обращая внимание на битрейт результата.Между тем, вы также можете сжать аудио, используя
lame
илиoggenc
:Наконец, мы сделаем ремукс аудио и видео
-of lavf -lavfopts format=mp4
Генерируетmp4
формат файл , используя lavopts мультиплексоры.источник
Я сжал 40-минутную HD-видео презентацию с 505 МБ до 183 МБ.
Это похоже на переход от 100 МБ к 36 МБ.
Оригинальное видео было HD, а на выходе почти нулевая заметная разница.
Это видеофайл, который я хотел бы сохранить, но HD - это слишком.
Вот команда, которую я использовал с причинами:
ffmpeg -n -loglevel error -i inputfile.mp4 -vcodec libx264 -crf 28 -preset faster -tune film outputfilename.mp4
-n
: избегать перезаписи выходных файлов (безопаснее для тестирования, чем для пакетной обработки)-loglevel error
: показать ошибки и скрыть строки и строки прогресса-i inputfile.mp4
: имя входного файла-vcodec libx264
: сильно ударил сверху ответ-crf 28
: Сжатия за один проход с незначительным заметное различие ( «0 = без потерь, 23 = по умолчанию, 51 = худшее; субъективно вменяемым диапазон 17- 28 » ) реф документы-preset faster
: выглядит в 2 раза быстрее, чем время кодирования по умолчанию для средних документов-tune film
: указать, что ввод - это HQ-видео (другие опции включают 'cartoon', 'stillimage' ..) ref docsoutputfilename.mp4
: имя выходного файлаДля каталога видео файлов:
for i in *.{avi,flv,m4v,mov,wmv,mp4,MP4,TS,mkv}; do ffmpeg -n -loglevel error -i "$i" -vcodec libx264 -crf 28 -preset faster -tune film "cc${i}"; done
Вопросы:
.webm
файлы не работают с командой. Пришлось поменять"cc${i}"
→"${i%.*}.mp4"
Handbrake является альтернативой с открытым исходным кодом с пользовательским интерфейсом
источник
Вам нужно будет использовать двухпроходное кодирование, чтобы «подогнать» видео к заданному размеру файла (битрейту), не снижая при этом качество слишком сильно. Это довольно подробная тема: http://web.archive.org/web/20171130050515/http://www.mpabo.com/2014/12/14/ffmpeg-and-x264-encoding-guide/
источник
Я написал bash-скрипт для уменьшения размера видео и автоматической проверки разных значений crf.
В основном вы будете
Это действительно удобно, когда у вас есть ограничение по размеру, которого вы хотите достичь, и вы не знаете, какое значение crf позволит вам это сделать.
Надеюсь, это кому-нибудь поможет. Я поделился со своими коллегами, и все сочли это полезным.
источник