Ответы пользователя по тегу Кодеки
  • Почему может не воспроизводиться видео?

    nidalee
    @nidalee
    Оно кодировано древним кодеком. Он, ЕМНИП, устарел еще в нулевых. Это MPEG 3 (который вроде как вообще сдох и был объединен с mpeg 2), а у нас в ходу четвертый. Где взяли видео?

    Решения два: перекодировать в mpeg 4 (он же H.264, Handbrake должен справиться) или использовать VLC. Теоретически, можно найти и установить MPEG 3 кодек (он, очевидно, не входит в стандартный набор кодеков, скорее всего валяется в расширенном), но в общем и целом связываться с этим старьем не рекомендую.
    Ответ написан
  • Какой формат сжимает видео лучше?

    nidalee
    @nidalee
    m3u8 и mp4 - не форматы.
    m3u8 - это набор ссылок для плеера, который качает перечисленные в нем фрагменты видео по порядку. Плейлист. Открывается и читается блокнотом.
    mp4 - это контейнер, в который можно запихнуть достаточно большое количество "форматов" - кодеков.

    Поэтому на ваш вопрос ответить нельзя.
    Ответ написан
    Комментировать
  • Как лучше сжать видео в ffmpeg?

    nidalee
    @nidalee
    Самым безопасным способом будет CRF с ограничением битрейта:
    ffmpeg -i input -c:v libx264 -preset veryslow -crf 23 -maxrate X -bufsize 2M output.mp4

    Где Х - это максимальный битрейт в мегабитах в секунду, например 6M - 6 мегабит в секунду. Теперь считаем наш предел по этим самым мегабитам:
    Битрейт в мегабитах = размер файла в гигабайтах / (количество минут * .0075)

    Для часового файла с лимитом в 1,5 гигабайт это 1,5 / (60*0.0075) = 3,3 мегабита в секунду. Не забудьте, что хотя бы 128 килобит нужно оставить на звук. Их придется вычесть из максимального битрейта для видео. Вот тут есть калькулятор.
    Тогда:
    ffmpeg -i input -c:v libx264 -preset veryslow -crf 23 -maxrate 3M -bufsize 2M -acodec aac -b:a 128k output.mp4

    Это, на самом деле, очень мало, но точно влезет в лимит. Достаточно приличным для большинства файлов битрейтом считаю что-то в районе 10 мегабит в секунду, но на самом деле все зависит от картинки, если много статики, то и 3 может хватить.. Ну и я надеюсь, что файлы у вас все же не часовые. :)

    Тоже самое, но с битрейтом вместо CRF, можно тоже попробовать, и сравнить результаты:
    ffmpeg -i input -vcodec libx264 -preset veryslow -b:v 3M -pass 1 -an -f mp4 NUL
    ffmpeg -i input -vcodec libx264 -preset veryslow -b:v 3M -pass 2 -acodec aac -b:a 128k output.mp4
    Это добро идет двумя последовательными строками в bat-файл, должно выполняться одно за другим.

    Использовать HEVC (H.265), наверное, нецелесообразно для 1080P. Но попробовать можно:
    ffmpeg -i input -c:v libx265 -preset slower -crf 23 -maxrate 3M -bufsize 2M output.mp4


    Если вдруг окажется, что у полученного файла средний битрейт получился ниже лимита, значит он был ограничен целевым качеством CRF. Тогда качество можно повысить, для этого цифру нужно понизить. Например, -crf до 21.
    Ответ написан
    3 комментария
  • Почему конвертация двух похожих файлов из mp4 в webm дает очень разные результаты?

    nidalee
    @nidalee
    Во-первых, если ваш энкодер умеет CRF, CQP и прочие адаптивные битрейты \ стратегии энкодера, нужно использовать их. О стратегиях энкодера (Encoder Strategy \ Rate Control \ и прочее названия одного и того же) можно почитать здесь.
    Вы не можете знать, какой битрейт нужен каждому отдельному кадру видео, поэтому ваши попытки указать битрейт вручную практически обречены на провал:
    1) Если указанный вами битрейт ниже реально необходимого, вы получите ухудшение качества картинки и артефакты сжатия.
    2) Если указанный вами битрейт выше реально необходимого, то качество видео останется неизменным, но файл будет "весить" больше, чем мог бы.
    Более того, вы указываете битрейт на все видео, в то время как переменный битрейт может быть больше в начале файла (например, где много движения, и требуется больше битрейт), а в конце файла могут быть длинные статичные планы - там битрейт нужен сильно меньше.

    Таким образом, поскольку вы используете VP9 (WEBM), вам следует использовать CRF (Constant Quality):
    To trigger this mode, you must use a combination of -crf and -b:v 0. Note that -b:v MUST be 0. Setting it to anything higher or omitting it entirely will instead invoke the Constrained Quality mode.

    ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

    The CRF value can be from 0–63. Lower values mean better quality. Recommended values range from 15–35, with 31 being recommended for 1080p HD video.

    Поэтому все -b:v без CRF сразу выкидывайте.

    Поскольку в задаче не было указано, какой вам нужен размер файла, это самый адекватный подход. Если же вы хотите сжать файл и готовы смириться с потерями качества, нужно использовать Constrained Quality - работает примерно так же, но дополнительно ограничен сверху указанным вами битрейтом:
    ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 2000k output.webm

    The quality is determined by the -crf, and the bitrate limit by the -b:v where the bitrate MUST be non-zero.

    У вас, кроме того, достаточно нескромный для VP9 CRF - 20 - это для 4К без видимых потерь качества. Уверены, что вам нужно такое? Посмотрите гайд от гугла по VP9 - для 1080P они предлагают устанавливать CRF в 31.
    Второй файл с CRF 30 без ограничения битрейтом почти не увеличился. Что по качеству? Просело?

    Я не знаю, какой именно кодек используется в вашем MP4 исходнике, но если это HEVC\H.265, то там можно наколдовать более эффективное и качественное сжатие, особенно если есть много лишнего времени на медленные пресеты или ручной их тюнинг. Такой файл после конвертации в VP9 раздует наверняка.
    Если исходник H264, то он практически всегда должен сжимать хуже VP9, и значит проблема в ваших настройках.

    В общем и целом, при прочих равных, файлы с минимальными изменениями в кадре сжимаются лучше, чем экшн-сцены. То есть если у вас 20 минут абстрактного видео, 2\3 которого - статичное изображение, он будет легче, чем 5 минут абстрактной экшн-сцены.
    Опишите или покажите оба видео, и тогда картина наверняка прояснится.
    Ответ написан
    7 комментариев