Казалось бы, довольно простой вопрос: «Чем сжать видео?». На ум сразу приходят Handbrake, Movavi Converter или ещё что-нибудь пострашнее. Однако когда речь заходит о более гиковском подходе с упором на максимальное качество и экономию места, такие программы сложно назвать инструментами. Равно как и для обратной ситуации, когда картинку нужно сильно сжать и сохранить в целостности большую часть полезной информации. Все эти программы только лишь предоставляют набор наиболее общих конфигов для обычной съёмки и 2D.

В этой статье мы изучим, как при помощи самого большого сборника свободных библиотек FFmpeg научиться кодировать видео самому именно под ваши задачи.

Содержание



Кодеки


Даже сам вопрос о том, что такое кодек, ставит многих в тупик. Можно легко услышать ответ: «.avi, .mkv, .mp4...», но это лишь контейнеры, которые в большинстве случаев содержат видео, аудио и другие данные. А кодек — это преобразователь видео/аудиосигнала.


Существует три основных кодека для домашних устройств: HEVC (H265), H264 и AV1. Какой выбрать? Самый продвинутый — это HEVC: в нём много различных алгоритмов сжатия и самая тонкая настройка. Но есть минус, который может перечеркнуть все плюсы — его поддержка устройствами. Обязательно убедитесь, что устройства, на которых вы планируете смотреть контент, поддерживают этот кодек.

H264 — воспроизводится без проблем практически везде, но имеет оскорбительно плохую эффективность в сжатии видео в сравнении с другими актуальными кодеками. AV1 — открытый кодек, который сжимает видео более эффективно, чем HEVC, но требует значительно больше ресурсов как для кодирования, так и для декодирования, что, несмотря на его свободу от лицензий, делает его непригодным для использования за пределами таких онлайн-кинотеатров, как Netflix или Amazon Prime, которыми как раз и поддерживается его развитие.

Теоретически, видео размером 100 МБ при минимальных потерях при сжатии кодек HEVC уменьшит на 50%, H264 — на 30-35%, а AV1 — на 60%. Конечно, учитываются идеальные условия; в реальности эти значения обычно ниже на 10-15%.

В данной статье наш выбор падает на HEVC. Если же вам интересно, как настроить H264, который даже на микроволновке запустится, то на Хабре уже присутствует много статей о нём.

Логика кодирования на примере видео


Видео — это не просто набор картинок одна за другой. Видео — это смесь базового представления и алгоритмов для сжатия этой информации. Например, на экране шарик скачет из одного угла в другой всего за 24 кадра в секунду.

Вместо показа множества картинок кодек может сжать эту информацию. Один из алгоритмов отслеживает движение только мячика на картинке и вырезает его из общего изображения, а затем, выстраивая векторы движения, перемещает уже статичную картинку по нужным позициям. То есть, если бы раньше это был просто поток картинок, каждая из которых весит 1 МБ, то итоговый размер составил бы 24 МБ, но алгоритм разрезает нашу первую картинку весом в 1 МБ на 800 КБ фона и 200 КБ шарика. Фон остаётся неподвижным, поэтому информация о нём не будет обновляться в каждом кадре — она появится только один раз в самом начале. А единственным фактором увеличения веса видео будет шарик, для которого алгоритм записывает информацию о его отдельных позициях в каждом кадре.

Эту информацию можно значительно сжать при помощи простой математики. Вместо перечисления чисел 1, 2, 3, 4… 9 можно записать это как функцию: 1+x, где x < 9.

Соответственно, логику можно усложнить, применяя всё более продвинутые методы и создавая очень эффективные алгоритмы сжатия. Использование проекции векторов, расчёт размера секторов кадра и т. п. Однако за это приходится платить: алгоритмам сложно находить такие закономерности, поэтому видео с хорошим сжатием кодируются довольно долго. Хотя итоговое воспроизведение видео занимает минимальные ресурсы.

Прямой пример работы векторов движения в кодеке

Базовые настройки


Ни для кого не секрет, что FFmpeg — это программа с интерфейсом командной строки, а значит, мы оказываемся в среде, которая не слишком дружелюбна к обычному пользователю.


Самое простое — указание исходного и итогового видео.

ffmpeg -i "название видео.mp4" -c:v libx265 -с:a copy "название итогового видео.mkv"

Из этого примера мы можем понять, что FFmpeg использует простые в понимании аббревиатуры: -i — input, -c:v — codec for video, -c:a — codec for audio (в нашем случае мы не указали кодек, и все аудио будут перенесены без изменений), и в этом нет ничего сложного. Далее будут приведены основные базовые настройки. Это лишь часть возможностей данного кодека, так как я опущу те, что могут быть не нужны для большинства задач. Все команды, приведённые в статье, работают как на Linux, так и на Windows.

Cамые базовые параметры, которые необходимо знать


▍ Rate


Начнём с параметра -r, который задаёт значение FPS (кадров в секунду) видео.

ffmpeg -i input.mp4 -c:v libx265 -r 60 output.mp4

Если вам необходимо установить классические киношные 23.976 FPS, то используйте следующее значение:

ffmpeg -i input.mp4 -c:v libx265 -r 24000/1001 output.mp4


▍ Scale


Разрешение видео. FFmpeg масштабирует видео до указанного разрешения. Если мы вместо одной из координат укажем -1, то FFmpeg сам выставит необходимое значение, и изображение масштабируется правильно, без растягивания по одной из осей.

ffmpeg -i input.mp4 -c:v libx265 -scale 1920:1080 output.mp4

Параметры -ss и -to: используются для указания начала и конца обрезки видео в секундах.

ffmpeg -i input.mp4 -c:v libx265 -ss 10 -to 60 output.mp4


▍ Crop


Кадрирование (обрезка) видео. Задаётся в формате: ширина: высота:x:y. X и Y — координаты верхнего левого угла обрезанной области относительно исходного видео. В данном примере мы обрезаем видео в разрешении 1920:1080 на 400 пикселей сверху, снизу и справа. Здесь вы можете сами понять логику, как делать правильный синтаксис команды.

ffmpeg -i input.mp4 -c:v libx265 -vf "crop=1120:280:400:400" output.mp4


Базовые параметры для кодирования


▍ Preset


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


Градация: 100% — условная единица измерения от максимальной скорости, которую вы можете получить при кодировании. Чем больше это число — тем медленнее будет кодирование.

0. ultrafast 100%
1. superfast ~110-130%
2. veryfast ~130-160%
3. faster ~160-200%
4. fast ~200-250%
5. medium ~250-350%
6. slow ~350-500%
7. slower ~500-700%
8. veryslow ~700-1000% >=
9. placebo ~2000-3000% >=

Говоря по сути, крайними значениями желательно не пользоваться — либо только в тех случаях, когда вам до самой крайности это надо. Наиболее целесообразным выбором для большинства процессоров, например, уровня 9100f и ниже, будет fast. Для остальных же уже середнячков и получше определённо стоит опускаться на более низкие значения, вплоть до slow. После slow скорость выполнения падает значительно, примерно в 6 раз; точнее, я даже не совсем смог выявить рамки падения скорости. Placebo я вообще ума не приложу, для каких сценариев он предназначен.

▍ Tune


Есть дополнительная поднастройка -tune, которая оптимизирует кодирование для конкретного типа входных данных. Есть пресеты psnr, ssim, grain, zero-latency, fast-decode, animation. Для общего понимания, что поднастройка делает с видео, обратимся к -tune animation. Кодек оптимизирует кодирование для анимации, которая часто имеет большие участки однотонных областей, резкие края и повторяющиеся детали. То есть алгоритм адаптирован так, что уменьшается количество шума и число артефактов на краях линий объектов. Он также выделяет меньше ресурсов для обработки однотонных участков, тем самым уменьшая вес. Эту задачу решает и базовый пресет — fast, который выставляется автоматически, но делает это менее эффективно.

ffmpeg -i input.mp4 -c:v libx265 -preset fast -tune animation output.mp4


▍ Bitrate


Битрейт на человеческом языке — это довольно абстрактное понятие. Количество выделяемого веса (битов) на одну секунду видео. Чем выше значение, тем лучше качество, но и вес тоже больше. Топорный инструмент, но нужный в случае жёсткого ограничения по весу видео. Например, для создания видеостикеров в Telegram может пригодиться.

ffmpeg -i input.mp4 -c:v libx265 -b:v "значение в кб" output.mp4

Ещё более грубый подход, если говорить о видео, — это кодирование в два прохода: -pass 1 и -pass 2. В первый проход собирается информация об участках видео, а во второй на основе этой информации распределяется битрейт. Это более эффективно сжимает видео до определённого веса. Но это уже смахивает на помешательство на самом процессе и обычно не имеет смысла этим пользоваться.

ffmpeg -i input.mkv -c:v libx265 -b:v 5000k -pass 1 -an -f null NUL && ffmpeg -i input.mkv -c:v libx265 -b:v 5000k -pass 2 output.mkv

Проценты относительно веса оригинального файла

▍ CRF


Это инструмент, перекочевавший из кодека H264. По сути, это просто указание уровня качества видео, что значительно проще, чем работа с -bitrate. Чем выше значение CRF, тем ниже битрейт видео и его размер. На первый взгляд CRF похож на preset, но на самом деле это менее сложный инструмент, поэтому указание большего или меньшего значения CRF в большей степени зависит от скорости вашего накопителя, нежели от процессора. Однако с помощью других настроек можно компенсировать высокое значение CRF. Можно провести аналогию: выгоднее передавать ценную информацию, чем лишние данные. Информацию можно упаковать значительно более качественно, если задействовать больше времени.

ffmpeg -i input.mp4 -c:v libx265 -crf 20 output.mp4

Рекомендованных значений не существует. Вам необходимо вручную сравнить, какое значение будет удовлетворительным для вашего материала. Для этого мы можем вырезать небольшой фрагмент из вашего видео, чтобы процесс занимал меньше времени.

ffmpeg -i input.mp4 -ss 00:00:05 -to 00:00:06 -c copy output.mp4

*ss — stream start или же начало видео **to — до.

Проценты относительно веса оригинального файла

▍ Scale


При неправильном назначении разрешения (scale) могут возникнуть серьёзные проблемы с отображением видео на различных устройствах. Кодеки часто не обрабатывают значения, не являющиеся кратными двум, и даже при ошибке не сообщают, что причина именно в этом. Чтобы избежать подобных ситуаций, важно указывать корректные значения и придерживаться стандартных разрешений. Кроме того, многие Smart TV телевизоры с разрешением UHD, независимо от их стоимости, не поддерживают видео с разрешением, превышающим 4000 пикселей по ширине или высоте. Чтобы избежать проблем с воспроизведением, нужно внимательно выбирать параметры фильтров и настройки в процессе обработки.

ffmpeg -i input.mp4 -c:v libx265 -vf "scale=x:y" output.mp4

*-vf — video filter, соответственно все необходимые видеофильтры записываем после него в кавычки и разделяем разные фильтры запятой, без пробела.

Слева ТВ отказался воспринимать видео, справа — всё нормально

▍ Cropdetect


Обнаружение рамок для кадрирования. Иногда необходимо обрезать тёмные полосы по краям видео. Для этого существует специальная команда — cropdetect. Однако она только находит нужные значения. Чтобы передать их в FFmpeg, можно использовать простую команду с конвейером.

Пример команды для PowerShell:

ffmpeg -i input.mp4 -vf cropdetect -ss 0 -t 600 -f null - 2>&1 | findstr "crop" > temp.txt && for /f "tokens=" %j in (temp.txt) do set crop=%j && ffmpeg -i input.mp4 -vf "%crop%" output.mp4

*-ss 0 -t 600 — мы можем применить данный параметр для сокращения времени обработки видео, так он будет собирать данные только с этого участка видео (от 0 до 600 секунд), а не со всего файла.

И аналогичная команда для Linux (bash):

video="your_video.mp4"; crop=$(ffmpeg -i "$video" -vf cropdetect -ss 0 -t 600 -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1); ffmpeg -i "$video" -vf "$crop" "${video%.*}_cropped.mp4"

До и после обрезки

Продвинутые настройки(-x265-params).


Этот сегмент уже значительно сложнее и требует больше внимания. Выбор подходящего пресета требует значительного времени на перебор всех вариантов. Потратив много времени на изучение документации, я отобрал то, что действительно работает и оказывает значительное влияние на качество изображения, во всех случаях.

▍ B-frames


Количество кадров, используемых алгоритмом для анализа. Чем больше кадров, тем медленнее происходит обработка, потому что здесь происходит расчёт векторов движения и выполняется более сложная работа. Максимальное значение — 16. но это не означает, что алгоритм всегда будет брать для анализа 16 кадров; он выберет самые оптимальные участки для расчётов, чтобы добиться наиболее эффективного сжатия информации. Значение 16 обычно считается заоблачным, но я не заметил значительного падения производительности, по крайней мере в случае с анимацией. На иллюстрации работа представлена в упрощённом виде, но она показывает основной принцип.

ffmpeg -i input.mp4 -c:v libx265 -x265-params bframes=12 output.mp4

Примерное изображение логики работы алгоритма.
Для знатоков
Я понимаю, что данное описание работы B-frames не совсем точное, но у меня и не стоит задачи это объяснить с углубленно технической точки зрения. Введение в понимание читателя I и P кадров в данной статье будет совершенно лишним нагромождением.

▍ ME и subME


ME (motion estimation) — алгоритм оценки движения объектов. Может показаться, что это похоже на работу B-frames, однако это разные процессы. Если B-frames используют информацию о движении объекта в кадре, то ME определяет, какие объекты движутся, а какие нет, подсказывая кодеку при кодировании. Так можно избежать лишней информации о сдвигах на видео, тем самым уменьшив его вес. Эти алгоритмы не заменяют друг друга, а работают отдельно.

Значения me=2 в целом хватает для большинства сценариев, но если вы пытаетесь чересчур сэкономить вес на видео, если в видео с высоким разрешением много мелких движущихся объектов, то вероятно значение 3 или 4 будет лучше. То есть, при недостаточном значении движущиеся мелкие объекты на фоне будут содержать артефакты. Однако повышение значения ME сильно снижает производительность.

У ME есть дополнительный параметр — subME, он управляет точностью самого ME. Чтобы не запутаться: ME на каждом значении (1, 2, 3… 7) имеет совершенно разные алгоритмы нахождения движения, и они становятся всё сложнее и сложнее. Получается, что subME условно ставит количество циклов выполнения ME в одном и том же месте. Оптимальное значение subMEпри me=2 — это 7 или меньше. Более высокие значения subME снова очень сильно влияют на производительность.

ffmpeg -i input.mp4 -c:v libx265 -x265-params bframes=12:me=2:subme=7 output.mp4

*Все дополнительные параметры в -x265-params разделяются двоеточием.


▍ Pix format и Profile


Как правило, обычному пользователю рекомендуется оставлять стандартные настройки. Profile определяет глубину цветности и формат цветового пространства YUV (яркость и цветоразностные компоненты). Оба параметра очень сильно влияют на сложность воспроизведения конечного видео на устройстве. Почти никогда не стоит поднимать планку выше 8 бит и YUV420. Битность экрана у большинства устройств не превышает 8 бит. Вы в большинстве случаев просто усложните кодирование и воспроизведение видео до непригодного для использования уровня. Но лучше не трогать значение YUV. Вы можете выбрать профили main, main-10 или main-12.

ffmpeg -i input.mp4 -c:v libx265 -profile main10 output.mp4

Однако если вы хотите гарантированно иметь определённые значения YUV (что я и советую делать), то лучше воспользоваться параметром -pix_fmt

ffmpeg -i input.mp4 -c:v libx265 -pix_fmt yuv420 output.mp4

*Чтобы указать значение битности (по умолчанию 8, если не указана), то после yuv420 надо добавить ваше значение p10 или p12, как пример — yuv420p10.

▍ HDR


HDR отвечает за то, будет ли картинка в HDR-качестве. Если оригинальная картинка не снята в HDR, включение этой функции не имеет смысла. Но по умолчанию она всегда отключена, поэтому стоит упомянуть о ней.

Пример с HDR10:

ffmpeg -i input.mp4 -c:v libx265 -pix_fmt yuv420p10le -x265-params colorprim=bt2020:colormatrix=bt2020nc:transfer=st2084:hdr10=1 output.mp4


Аппаратное кодирование


Помимо кодирования процессором, HEVC предлагает блок, предназначенный для гораздо более быстрого кодирования с использованием ГПУ. Для этого вам достаточно иметь установленные драйверы видеокарты с нужным тулкитом, а также указать одну из библиотек вместо libx265, hevc_nvenc, hevc_amf или hevc_qsv. Первая библиотека предназначена для NVIDIA, вторая — для AMD, и третья — для Intel. Скорость кодирования видео значительно вырастет, но, как всегда, есть особенность: будут заблокированы все более сложные настройки кодека, такие, как параметр -x265-params. А это, по сути, единственный параметр, который может повысить качество при меньшем размере видео после CRF и preset.

ffmpeg -i input.mp4 -c:v hevc_amf -rc cqp -qp_i 12 -qp_p 13 output.mp4

*-qp_i и -qp_p играют роль аналога -crf, при этом -qp_p всегда должно быть на 1 больше, чем -qp_i.

Заключение


Надеюсь, что CLI-интерфейс FFmpeg открылся для вас с новой стороны. Даже такое неглубокое погружение, как в моей статье, дало многим из вас базис для почти любого сценария кодирования видео. Помните, что в видеосжатии не существует универсального решения. Каждый проект требует индивидуального подхода, и FFmpeg предоставляет безграничные возможности для экспериментов и оптимизации. Не бойтесь пробовать разные настройки и комбинации параметров, чтобы добиться наилучшего результата, соответствующего вашим требованиям.

Telegram-канал со скидками, розыгрышами призов и новостями IT ?

Комментарии (101)


  1. takezi
    29.09.2024 13:17
    +7

    Самый продвинутый - AV1, к тому же не требующий лицензирования в отличие от HEVC. Единственный минус: за качество придется заплатить скоростью кодирования.


    1. equeim
      29.09.2024 13:17
      +1

      SVT-AV1 довольно близок к libx265 по скорости кодирования (на современном процессоре).


    1. voldemar_d
      29.09.2024 13:17
      +1

      Тот, кто минусует, может объяснить, за что именно? AV1 действительно разрабатывался как ещё более эффективный по сравнению с HEVC. Но по вычислительной нагрузке он ещё более "тяжёлый", примерно на порядок.


      1. saege5b
        29.09.2024 13:17

        Если 264/265 зарядить исключительно "софтово" - то там даже декодирование будет унылым на базовых профилях, а уж на всяких Ультра - черепашьим.

        Нужно иметь весьма шустрый сильно многоядерно-многопоточный проц, с кучей шустрой оперативы, чтобы не было слайдшоу.

        Вот и в АВ умеют далеко не многие.


  1. Javian
    29.09.2024 13:17
    +1

    Чем выше значение, тем лучше качество, но и вес тоже больше.

    Была еще одна альтернатива - зафиксировать качество кадра. Позволяло избежать многопроходового кодирования и не рисковать, что установленный битрейт будет недостаточным для сцен с быстрыми движениями.


  1. voldemar_d
    29.09.2024 13:17
    +9

    Теоретически, видео размером 100 МБ при минимальных потерях при сжатии кодек HEVC уменьшит на 50%, H264 — на 30-35%, а AV1 — на 60%. 

    А если видео размером не 100 МБ, то проценты будут другими? И "при минимальных потерях" - это каких? На каком видеоматериале это оценивалось, по какой методике? Откуда взяты цифры, и почему "теоретически"?

    Все эти проценты зависят от сложности кодируемого видео.


    1. Realife Автор
      29.09.2024 13:17
      +1

      Эта часть не требует уточнения в данной статье. Даже если усложнять этот абзац, то придем к одним и тем же выводам, так что я сразу сжал данную информацию в таком выводе.


      1. voldemar_d
        29.09.2024 13:17
        +1

        Да просто непонятно, зачем тут мегабайты вообще, если дальше всё в процентах. Тогда и пишите что-нибудь вроде: "видео размером 100 МБ при минимальных потерях при сжатии кодек HEVC уменьшит до 50 МБ, H264 — на ... мегабайт" и т.д.

        Насчет "не требует уточнения" - дело Ваше. Просто все рассуждения о качестве при оценке кодирования видео обычно сопровождаются хоть какими-то оценками или измерениями. Откуда взяты все эти проценты, на основании чего эти числа написаны в статье?


  1. voldemar_d
    29.09.2024 13:17
    +10

    Битрейт на человеческом языке — это довольно абстрактное понятие. Количество выделяемого веса (битов) на одну секунду видео.

    Битрейт - величина потока данных, измеряется в битах в секунду. С каких пор это вдруг стало абстрактным понятием?


    1. SergeevSkvo
      29.09.2024 13:17
      +3

      С тех пор, как битрейт (CBR) стал VBR;)


      1. voldemar_d
        29.09.2024 13:17
        +3

        Скорость движения бывает постоянной, а бывает переменной. Тогда и скорость, внезапно - абстрактное понятие?


        1. SergeevSkvo
          29.09.2024 13:17
          +1

          Верно, сама скорость не становится абстрактной, став переменной. Думаю, имеется в виду, что битрейт как качественная или количественная оценка кодирования не такая явная, как те параметры, которые передаются кодеку в командной строке в процессе кодирования.


          1. Realife Автор
            29.09.2024 13:17

            Да.


          1. voldemar_d
            29.09.2024 13:17
            +1

            Скорость бывает мгновенной, бывает средней. С битрейтом примерно так же.

            Как раз для оценки кодирования измерение битрейта подходит лучше, чем параметры, которые передаются кодеру. В зависимости от характера видео (сложности, наличия мелких деталей в кадре), одни и те же параметры кодирования могут выдать разный результат.


            1. SergeevSkvo
              29.09.2024 13:17

              Вот именно, анализ полученного битрейта говорит о характеристиках самого видео, но не параметров кодирования, а вот анализ значений параметров кодирования позволяет судить о применяемых алгоритмах кодирования и оценивать качество кодирования применительно к конкретному видео (те самые сложность, мелкие детали, движения, переходы). Ниже было хорошо сказано, что при кодировании блокбастеров потребуется большое число проходов, и оценить сложность и качество кодирования одним лишь полученным битрейтом - и есть, как мне кажется, весьма абстрактная задача, делающая битрейт абстрактным параметром. В отличии от того-же количества проходов.


              1. voldemar_d
                29.09.2024 13:17

                оценить сложность и качество кодирования одним лишь полученным битрейтом

                Никто и не предлагал оценивать сложность и качество кодирования одним лишь полученным битрейтом. Речь о том, что битрейт сам по себе - не абстрактное понятие, а вполне конкретное и измеряемое. Какое при этом за ним стоит качество - это уже другой вопрос. Особенно, если для понятия "качество" никаких других метрик не предлагается.

                В отличии от того-же количества проходов

                Количество проходов - это количество проходов. И как, по-вашему, можно количеством проходов оценить сложность и качество кодирования? Просто "чем больше проходов - тем выше качество"? А само качество как и чем измеряется?


                1. SergeevSkvo
                  29.09.2024 13:17

                  Качество можно, например, оценивать чисто визуально, замыленностью стоп-кадров при просмотре. Но согласен, битрейт сам по себе лишь лишь техническая характеристика потока, лишённая абстрактности. А вот при просмотре конечного видео с одинаковым (похожим) битрейтом но разным кодированием (с разным тем-же числом проходом) может дать разные по субъективной оценке качества результаты.


                  1. voldemar_d
                    29.09.2024 13:17

                    Для оценки качества существуют вполне объективные, т.е. измеряемые метрики, а не только визуальная оценка, что субъективно.

                    Многопроходное кодирование само по себе не факт, что позволит значительно повысить качество при одном и том же битрейте. Это, опять-таки, зависит от сложности кодируемого материала.


                    1. SergeevSkvo
                      29.09.2024 13:17
                      +1

                      Всё верно, для оценки качества кодирования лично я ориентируюсь именно на визуальную, априори субъективную, оценку полученного материала. Подскажите, какие есть объективные, измеряемые метрики оценки качества? Битрейт прошу не предлагать;) (шутка) - я действительно не знаю, как оценивать качество материала цифрами, на ум приходит разрешение, кадров в секунду, и ... почему-то, больше ничего:(


                      1. voldemar_d
                        29.09.2024 13:17

                        Оценивать можно разницу между исходным и перекодированным видео. Кое-что об этом написано здесь.


                      1. SergeevSkvo
                        29.09.2024 13:17

                        Спасибо, весьма познавательная статья! Цитата: "...результирующее значение (метрик) характеризует лишь количественное отличие от оригинала без оценки его качества в привычном понимании...." Таким образом, оцениваются соотношение сигнал/шум, искажения цветности, яркости, контрастности, движения и т.п. с разной степенью корреляции метрики с субъективной оценкой качества человеком, с малой в оценке PSNR (вероятно, самой быстрой) и с большой в VMAF (вероятно, самой ресурсоёмкой). Предлагаю оставить отнесение битрейта к абстрактной величине на усмотрение автора.


                      1. voldemar_d
                        29.09.2024 13:17

                        Естественно, всё это без дополнительной оценки человеком не имеет смысла.


                      1. Javian
                        29.09.2024 13:17
                        +2

                        Название программы я не помню, но была в 2000-х программа которая покадрово сравнивала исходник и пережатый файл и цифрах и картинках показывала проблемные места, где артефакты были выше установленного пользователем минимума. Кажется @3Dvideo имел к разработке этой программы отношение.

                        PS https://compression.ru/video/codec_comparison/introduction_en.html


                      1. voldemar_d
                        29.09.2024 13:17

                        Да, в МГУ этой темой много занимались. Спасибо за ссылку.


  1. nikolau
    29.09.2024 13:17
    +2

    Раньше думал, что кодеков видео очень много, типа divx, Xvid, mpeg 1...4 и и.д.. Приходилось ставить codec pack, ато какие-то видео не запускались и требовали установить кодек. А сейчас, оказывается, всего 3 осталось. А что с другими стало, они просто не актуальны стали? Или это те же кодеки, только новые версии?


    1. Realife Автор
      29.09.2024 13:17
      +5

      Можно считать их мертвыми на данный момент. Они устарели. Конечно никто никуда не пропадал, но ими вне специфичных задач, нету смысла пользоваться. Есть ещё всякие prores от apple, но у меня не про это статья.

      А что касается запуска видео, то ну просто установите VLC и бед знать не будете.


      1. voldemar_d
        29.09.2024 13:17

        Что значит "нету смысла пользоваться"? Всё зависит от задачи.


    1. Loco2k
      29.09.2024 13:17

      Их и сейчас много, но они узкоспециализированные.

      Из потребительских остались только MPEG, они же h264/265/266, они же AVC/HEVC/VVC, и свободные кодеки от Гугла и ко VP/AV1

      Отдельное место в аду заготовлено для китайских хакнутых кодеков mpeg, которые любят пихать в камеры наблюдения и т.п.


      1. voldemar_d
        29.09.2024 13:17
        +1

        MPEG - это не название конкретного кодека. Есть MPEG1 и MPEG2, например.


      1. MountainGoat
        29.09.2024 13:17

        В камеры наблюдения пихают MJPEG который перечисленным даже не родственник. Отличается хорошим соотношением сложности закодирования к сжатию, почему и применяется в камерах.


        1. Loco2k
          29.09.2024 13:17

          Уже давно не пихают mjpeg, сильно устарел.

          MPEG и JPEG соседние группы в рамках одной организации по стандартизации. Грубо говоря, I-frame кодируется как jpeg-картинка, а остальные кадры как изменения относительно этой картинки. Сейчас к этому добавили более хитроумные методы кодирования, ну и jpeg на месте не стоит.


  1. saege5b
    29.09.2024 13:17
    +5

    Для качества нужно переменный битрейт и минимум два прохода. А если есть резкие переходы от статичной картинки к динамическим сценам с перепадами яркости, то можно и три прохода.

    Кстати, за это профили/пресеты и отвечают. По возможности, "для себя", лучше не стесняться. Что бы потом, не было мучительно больно за криво пожатое с удалённым оригиналом.

    ПС. Эх, были времена... 0,3 к/с... :)


    1. CaptGg
      29.09.2024 13:17
      +9

      Для максимального качества, как самоцели, используется тот же CRF, это самый современный алгоритм для переменного битрейта.

      Два прохода кодирования нужны исключительно когда необходимо получить максимальное качество при заранее известном конечном размере файла. Чтобы максимально точно вписаться в размер какого-то носителя.

      Во всех остальных случаях CRF даст лучшее качество, но не особо предсказуемый размер.


      1. saege5b
        29.09.2024 13:17
        +1

        1/2 Проход создаёт карту битрейта по динамике сцен, так как кодировщик не знает, когда что случится.

        Особенно это заметно по первым кадрам перехода статичной сцены, в ультрадинамичную, или на стыке резкого перехода яркости (очень ярко - очень темно, или наоборот). Особенно подобные косяки вылезают на ультрабольших экранах с диагональю метра полтора и выше.

        Немного качеству помогают и разные опорные кадры, для правильного раставления которых, опять же необходимо знать расположение сцен.

        Если выводить техническую информацию, то в фильмах с большим количеством подобного добра, карта битрейта устаканивается к 5-7 проходу.

        Дальнейшее улучшение можно добиться индивидуальной матрицей квантизации.


        1. CaptGg
          29.09.2024 13:17

          1/2 Проход создаёт карту битрейта по динамике сцен, так как кодировщик не знает, когда что случится.

          Кодировщик знает, что происходит прямо сейчас и этого достаточно. Что будет дальше не имеет абсолютно никакого значения, если у вас не стоит цели ограничить битрейт, чтобы уместиться в заданный размер файла.

          CRF дает наилучшее качество всегда. В этом суть алгоритма использующего фактор постоянного оценивания. Не обращать внимание какой битрейт требуется для сцены, а использовать такой, чтобы получить заданный уровень качества. Карта битрейта для него бесполезна.


  1. Loco2k
    29.09.2024 13:17

    Самый продвинутый это h266 :)

    Исходить при выборе кодека нужно из возможностей аппаратного декодера устройства воспроизведения. Если брать первые умные телики как образец, то там и h264 может не завестись при некоторых настройках.

    Если кодировать архив хоумвидео для уменьшения места, то нужно брать аппаратный AV1 или HEVC и кодировать с переменным битрейтом. Чем выше разрешение, тем круче кодек разумнее использовать.

    B-фреймы я бы большими не делал, как и GOP, т.к. это выйдет боком в случае битовых ошибок.


    1. Realife Автор
      29.09.2024 13:17

      Имелось ввиду что h265 самый продвинутый среди представленных ранее в статье вариантов. И не в плане качества кодирования, а количества параметров кодирования и их влияния на картинку, то есть он более гибкий чем остальные варианты.


      1. Loco2k
        29.09.2024 13:17

        У вас критериев нет по которым выбирать. Я вообще с трудом представляю бытовой кейс кодирования видео. Архив домашнего видео? Тогда лучше оставить кодек с исходника. Кассеты оцифровывать? Тут нет смысла использовать крутые кодеки, разрешение маленькое.


        1. Realife Автор
          29.09.2024 13:17

          Извините, но я не понимаю что вы от меня хотите. Я не вижу в целом смысла в поднятии данного вопроса в данном случае.


          1. Loco2k
            29.09.2024 13:17

            Среди представленные вами в статье вариантов самый продвинутый AV1. Он появился позже и умеет всё тоже самое, что и HEVC плюс новые фичи, например, film grain, и прочие перечисленные в статье опции.
            От вас я бы хотел меньше логических ошибок в изложении статьи.


    1. brute11k
      29.09.2024 13:17
      +1

      Аппаратный AV1 не подходит для уменьшения веса, т.к. профили в нём зафиксированы. Для качества и низкого размера нужно использовать процессорные svt-av1, svt-av1-psy, Av1an.

      Сам пока остановился на Av1an, как наиболее продвинутом варианте с разбиением видео на несколько сцен и обработкой в параллельном режиме. Так же там сейчас разработчик пилит возможность распределённого кодирования (по сети), что позволяет ускорить кодирование во много раз: разбиваем файлы на сцены и каждая сцена кодируется на отдельной машине. Кодирование фильмов и стримов многочасовых можно в 10-100 раз ускорить.


      1. Javian
        29.09.2024 13:17

        Периодически пробуют кодирование видео по сети. Только мало кому оно необходимо.

        https://habr.com/ru/articles/218063/

        https://forum.doom9.org/showthread.php?t=117889


      1. Loco2k
        29.09.2024 13:17

        Профили в каком-то софте вы имеете ввиду?

        Я тестил на утилите nvenc с videohelp. Вполне рабочие основные опции.

        У меня получается 500 фпс с 2pass full и 600 фпс без мультипрохода на транскодинге CRF с AVC 1080р25.


  1. Alexey_U
    29.09.2024 13:17

    Подскажите, пожалуйста, какой кодек качественнее передаёт детали при плохом освещении и при каких настройках? Исходная запись h.264 с видеорегистратора, видно что идёт человек в брюках, распознать можно метров с 20, после перекодирования в h.265 VBR с CRF даже с минимальным значением этот же человек появляется без ног, которые появляются где-то уже метрах в 7. Приложение MediaCoder для Windows. Остановился на CBR с битрейтом 1350, чтобы не увеличивать размер файла. Детализация ну так себе, но хотелось бы укладываться в объем 1- слойного DVD. Может как-то можно улучшить качество (при плохом освещении) при том же объёме видео на выходе?

    С AV1 как-то не получается. Вообще.


    1. Loco2k
      29.09.2024 13:17

      Скорее всего у вас изначальное разрешение и битрейт низкие. Любое транскодирование ухудшает качество. Для начала попробуйте такие же настройки как и в оригинале, но с другим кодеком.


      1. Alexey_U
        29.09.2024 13:17

        2048х1152 при 128 кбит/с (скорее всего ошибка). Сомневаюсь что стоит пробовать.


        1. Loco2k
          29.09.2024 13:17

          Через mediainfo смотрите. Это софт такой.

          128 кбит наверно звук


    1. Javian
      29.09.2024 13:17
      +1

      Для хорошей работы кодека надо подготовить картинку - отфильтровать шумы.

      Например фильтром Neat либо чем-то подобном, что доступно в используемом ПО.

      В самом простом варианте в видеоредакторе может выглядеть так.
      В самом простом варианте в видеоредакторе может выглядеть так.


      1. Alexey_U
        29.09.2024 13:17

        Спасибо. Никогда не задумывался об этом. Возможно я что-то не так раньше делал с фильтрами, просто пропадали детали.


        1. Javian
          29.09.2024 13:17
          +1

          Пробуйте Neat - простой и аккуратный фильтр.

          например в этой статье есть пример результата

          В ходе моего недавнего проекта я вручную обработал 124 серии из разных мультфильмов в качестве Blu-ray с помощью алгоритма устранения шума (Neat Video)


    1. ArkadiyMak
      29.09.2024 13:17
      +1

      С 10-битным цветом не пробовали сжимать?


      1. Alexey_U
        29.09.2024 13:17
        +1

        Пробовал. Лучше. Но VLC не нравится, а пока только он у меня 10-битный цвет воспроизводит.


      1. voldemar_d
        29.09.2024 13:17
        +2

        Откуда в видеорегистраторе возьмётся 10 бит в исходном видео?


        1. ArkadiyMak
          29.09.2024 13:17

          Ниоткуда. И с 8битным исходником может выйти лучшее качество за счет другого квантования.


          1. voldemar_d
            29.09.2024 13:17

            Хотелось бы увидеть реальный пример, на котором видна существенная разница. А то и в обсуждаемой статье на изрядной части картинок разницы либо вовсе нет, либо я не пойму, где её увидеть предлагается.


            1. MountainGoat
              29.09.2024 13:17
              +1

              Увидеть предлагается в тёмной темноте, где 8битный цвет даёт различимые полосы, а 10битный цвет за счёт размешивания краёв этих полос делает их труднозаметными.


              1. voldemar_d
                29.09.2024 13:17

                Обычно "увидеть" - это про картинку, а не слова.


                1. MountainGoat
                  29.09.2024 13:17


                  1. voldemar_d
                    29.09.2024 13:17

                    Я не вижу разницы, честно.


                    1. Javian
                      29.09.2024 13:17
                      +1

                      Тут нагляднее
                      Тут нагляднее

                      Больше ступеней яркости - равномернее градиенты. На 8 битах будут заметны ступеньки.


                      1. voldemar_d
                        29.09.2024 13:17

                        А может, при кодировании в 10 бит какая-то дополнительная фильтрация работает?

                        Да и тоже, разница видна, но если на нее явно не показать, неспециалисту заметить её сложно.


    1. 20240919
      29.09.2024 13:17

      Мало вводных данных, какой исходный битрейт, разрешение?


    1. MountainGoat
      29.09.2024 13:17

      Приложение MediaCoder для Windows.

      Попробуйте Handbrake разок.


      1. Alexey_U
        29.09.2024 13:17

        Пробовал несколько раз. Медленнее работает.


  1. e-zig
    29.09.2024 13:17

    А вот пресет это отдельный параметр или он устанавливает значения других описанных параметров?


    1. VADemon
      29.09.2024 13:17

      Устанавливает другие параметры, зависит от версии кодировщика, что именно он вставит. Поэтому крутить параметры вручную надо только очень хорошо понимая разницу и ограничения профилей (чтобы не было "у меня на ТВ не воспроизводится, а на компе норм").


  1. edogs
    29.09.2024 13:17
    +3

    Отдельное спасибо за cropdetect, не знали.
    Иногда перекодируем старое видео, которое уже сложно найти, почти всегда с полосами.
    Еще из двух спасительных фильтров для старых видео это - деблокинг (убирает квадраты которые почти всегда есть в старых видео) и автоуровни (обычно старые видосы почему-то пересветлены). pp=al/hb/vb в командной строке. Правда не знаем (может кто в курсе?) совместимы ли они с либами кодинга на nvidia (кодируем обычно на проце).


  1. moscowman
    29.09.2024 13:17

    Делал для домашней коллекции переконвертацию 4К видео в h264 (VerySlow) и h265 (placebo) с тем-же разрешением с максимальным качеством видео на выходе.
    Так вот, на фильме "Дрожь земли" на стоп-кадре невооружённым взглядом видно, что h264 выдаёт более качественную картинку, а h265 её нещадно мылит.


    1. voldemar_d
      29.09.2024 13:17

      Всё зависит от кодера, его настроек и битрейта.


      1. moscowman
        29.09.2024 13:17
        +2

        Для ffmpeg
        h264: -vcodec libx264 -preset VerySlow
        h265: -vcodec libx265 -preset placebo


        1. voldemar_d
          29.09.2024 13:17
          +3

          ffmpeg - лишь один из кодеров. В нём же самом можно кодировать аппаратно на GPU от NVidia и Intel, например, и они дают разные результаты.


        1. MountainGoat
          29.09.2024 13:17

          Если это всё, то вы с сильно разным CRF кодировали.


          1. moscowman
            29.09.2024 13:17

            Тогда прошу подсказать "правильные" параметры для h265, которые дадут качество хотя-бы такое-же как h264.
            Я использовал самые качественные пресеты и там и там.
            В итоге самый качество от h264 оказался гораздо более лучше, чем у вышедшего позднее h265. Не говоря уже о времени кодирования.


            1. Realife Автор
              29.09.2024 13:17

              для правильного сравнения именно качества кодеков, вам необходимо было сравнивать их с данными параметрами:
              h264: -vcodec libx264 -preset veryslow -b:v 2000k (можете указать своё значение)
              h265: -vcodec libx265 -preset veryslow -b:v 2000k
              Только в таких равных условиях, мы можем говорить о качественной разнице самих кодеков. У кого будет меньше артефактов и искажений - тот и будет качественнее.


              1. moscowman
                29.09.2024 13:17

                Т.е. вы ограничиваете битрейт потока, но не качество?
                Факт того, что качество h264 будет выше при отсутствии такого ограничения Вы отвергаете?
                Другими словами, Вы почему-то апеллируете к потоку, когда я изначально говорил, что h265 откровенно мылит, если мы стремимся к качеству исходника.

                Или всё-таки при таком-же качестве полученного видео у h265 уже не будет преимущества в размере файла?

                Если не сложно, давайте изучим качество, на примере "Дрожь земли".

                Для h264: -vcodec libx264 -preset VerySlow
                Для h265 вы постараетесь указать параметры, где видео будет не хуже.

                Больше интересуют фрагменты с развевающимися волосами героев на фоне прерий.


                P.S. Второй раз редактирую ответ, извините. Но для меня реально это интересно, фильмотека занимает довольно много места и заявленная экономия h265, если она реально есть, меня очень даже выручит.
                Думаю что все мы скажем Вам ОГРОМАДНОЕ спасибо за науку.


                1. edogs
                  29.09.2024 13:17
                  +2

                  Не являемся специалистами, сразу оговорим.
                  Лично у нас h264 показывает ощутимо лучшие результаты на видео плохого качества. То есть если изначально качество видео было оцифровка vhs или небольшое разрешение или жесткая пережатка в квадраты или еще что-то, то h265 делает из видосов плавающую кашу (мало того, что детали теряются, так еще и изображение плавать начинает), а h264 картинку почти не портит. При это размер получается примерно одинаковый.

                  А вот если речь про современное видео без сильной пережатки (оригинал с гоупро или телефона), то h265 отлично уменьшает размер почти не теряя детали, а вот h264 проигрывая в уменьшении размера жестко теряет четкость.

                  crf (или как там его) используем 20/24 - под настроение (кстати дефолтовый в h265 вроде 20, а вот в h264 24), режим slow.


  1. FruttySamurai
    29.09.2024 13:17
    +2

    Отличная статья, больше бы статей на тему ffmpeg


    1. voldemar_d
      29.09.2024 13:17

      А что, их прямо мало?


  1. LeToan
    29.09.2024 13:17
    +1

    Ну и где ИИ, который определяет параметры кодирования из анализа источника?


  1. okda4ok
    29.09.2024 13:17

    А может кто знает с каким кодеком рутуб работает? Ресурс жрет как не в себя. Яндекс.Станция макс (2021 год) захлебывается при воспроизведении видео с рутуба, просто перестает реагировать на голос, с 10 раза удается докричаться. Старенький айпад вообще не воспроизводит.

    Youtube на голову выше в этом, везде работает… К сожалению, о минусах рутуба с технической стороны маловато написано.


    1. CaptGg
      29.09.2024 13:17
      +1

      В плеере Рутуба в браузере доступна весьма подробная техническая информация:

      Техническая информация
      Video Id:1ba709634e43fa0f1621814ad8e9e4ef
      Bandwidth:82 mbps
      Codecs:avc1.640029 | mp4a.40.2
      Buffer:(0, 0), (0, 212) | 13 | 212
      Screen Resolution:1920x1080
      Video Quality:1280x720 | 1670 kb
      Edge | Dive:river-3-331.rutube.ru | undefined
      isLive | isDVR:false | false
      Auto Quality Enabled:true
      Current Quality:4
      Playback Position:29 / 1665.2149999999897
      Last Ad Name:
      Volume | Muted:41% | false
      Current Domain:https://rutube.ru
      Player Version:1.65.0-wdp
      Date:Mon Sep 30 2024 11:27:49 GMT+0300 (Москва, стандартное время)
      User Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 YaBrowser/24.7.0.0 Safari/537.36
      ScreenO Lock API:false

      Используется самый распространенный и поддерживаемый всюду H.264.

      Но вот битрейт для видео судя по всему Рутуб так сурово как YouTube не ограничивает. В итоге если автор видео загрузил его с битрейтом выше чем у фильма на Blu-Ray диске, но все еще в поддерживаемом формате - вашей колонке придется это как-то воспроизводить.

      Вероятно в приложении Рутуба стоит реализовать более щадящий автоматический выбор качества, а не крутить 2К на всём подряд.


  1. erazor
    29.09.2024 13:17

    Перекодировал давеча домашнюю библиотеку, хотел добиться универсального формата для воспроизведения на всех моих устройствах. Т.е. это веб-браузеры на основе хрома(Android+windows+chromecast) ну и нативное воспроизведение через VLC. В итоге пришел к тому, что видео нужно x264, звук mp3/aac. Всё это в контейнере mp4. + в довесок выяснил, что chromecast не дружит с 6-канальным звуком, пришлось принудительно "добавить" стерео дорожку, там где ее нет... В общем не знаю как там будет с i-устройствами, но пока что результат меня устраивает.


  1. waltersullivan6
    29.09.2024 13:17

    Самый продвинутый это h266


  1. mpa4b
    29.09.2024 13:17

    Автор, расскажите о том, как заставить libx265 использовать полностью все доступные треды. Сейчас при 32 тредах (16-ядерный рызен) один инстанс ффмпега при кодировании в x265 жрёт тредов сильно меньше 32х, да и те что жрёт -- не на 100%. Для макс. использования процессора приходится стартовать несколько инстансов. Но хотелось бы наоборот -- 100% загрузки всех тредов одним инстансом.


    1. DieSlogan
      29.09.2024 13:17

      А может GPU загрузите?


      1. 1dNDN
        29.09.2024 13:17
        +4

        На GPU кодировать хорошо в реальном времени, а если не торопитесь - софтварный кодек результаты лучше даст


    1. MountainGoat
      29.09.2024 13:17

      Максимальное количество потоков зависит от разрешения видео.


  1. svpcom
    29.09.2024 13:17

    Вот только в реализации h265 декодера в ffmpeg (а так же в остальных open-source, так как они используют одну и ту же библиотеку) есть очень досадный баг: http://github.com/strukturag/libde265/issues/423 который убивает напрочь любой live streaming с ними


    1. Realife Автор
      29.09.2024 13:17

      Даже не углубляясь в вопрос, я не рассматриваю в статье какой-либо live streaming с ffmpeg.


      1. SergeevSkvo
        29.09.2024 13:17
        +1

        Не только же в live streaming кодируется поток, в приложениях OverTheTop весь поток транскодируется, и при доставке контента потребителю через интернет пакеты могут теряться... А в целом, спасибо за статью, я по-другому начал смотреть на видеокодеки! :)


      1. svpcom
        29.09.2024 13:17
        +1

        Проблема в том, что opensource реализация h265 декодера только одна и ее используют все (в том числе gstreamer и vlc). На данный момент в линуксе этому багу не подвержены только аппаратные кодеки от nvidia и рокчипа.


  1. tempart
    29.09.2024 13:17

    указание большего или меньшего значения CRF в большей степени зависит от скорости вашего накопителя, нежели от процессора

    Какое отношение уровень качества видео имеет к скорости накопителя? Вообще никакого.
    В худшем случае, от скорости накопителя будет зависеть скорость кодирования, но никак не CRF.

    В целом, статья совсем не убедила перейти с Handbrake или StaxRip на предложенную командную строку


    1. Loco2k
      29.09.2024 13:17

      В хендбрейке те же опции, что и в статье, только через ГУИ.
      При CRF-кодировании ограничение битрейта нужно для того чтобы новая порция данных успевала считаться с диска или загрузиться по сети, а также учитывается размер буфера на плеере. Без ограничений на сложной сцене битрейт может так сильно скакнуть, что слабый плеер не успеет подгрузить фрагмент и будет фриз.


      1. tempart
        29.09.2024 13:17
        +1

        В хендбрейке те же опции, что и в статье, только через ГУИ.

        Ну, у автора же посыл, что к чёрту все эти удобные штуки, побежали в командную строку, там всё гораздо интереснее

        При CRF-кодировании ограничение битрейта нужно для того чтобы новая порция данных успевала считаться с диска или загрузиться по сети, а также учитывается размер буфера на плеере

        Мы же говорим про кодирование, а не про воспроизведение?
        Каким образом я, перекодируя видео, могу предвидеть, какой там буфер у заранее неизвестного плеера и какие там скорости будут у совершенно мне неведомого носителя?

        В общем, я впервые слышу, что при выборе CRF надо учитывать параметры носителя и плеера. Возможно, для специальных случаев, но явно не "для дома, для семьи". Не могу представить, чтобы HDD даже 10-15 летней давности (SATA-II, правильно помню?) не тянули полноценный блюрей, не говоря уже о пожатых видео


        1. Loco2k
          29.09.2024 13:17

          Я вам говорю для чего эта технология сделана, как человек, который это настраивает на практике для широкого круга девайсов.
          Домашние кейсы у всех разные, у автора об этом ни слова. Для разных случаев будут разные кодеки и настройки. Просто для архива лучше взять новейших кодек и кодировать в CRF с максимальным качеством. Если нужно крутить это из домашнего облака на разных умных теликах и телефонах, нужно выбирать соответственно, то что поддерживается и уже думать про буферы\битрейты.
          Я не нашёл на что вы отвечали в изначальном комментарии, просто решил написать о технологии.


          1. Realife Автор
            29.09.2024 13:17
            +1

            Вы название статьи читали?

            А также данный абзац?

            H264 — воспроизводится без проблем практически везде, но имеет оскорбительно плохую эффективность в сжатии видео в сравнении с другими актуальными кодеками. AV1 — открытый кодек, который сжимает видео более эффективно, чем HEVC, но требует значительно больше ресурсов как для кодирования, так и для декодирования, что, несмотря на его свободу от лицензий, делает его непригодным для использования за пределами таких онлайн-кинотеатров, как Netflix или Amazon Prime, которыми как раз и поддерживается его развитие.

            Исходя из названия статьи, ну чисто логически же можно было понять что основной упор идет на hevc и я не буду рассказывать о чем-либо кроме него. Так и вот в цитате и самой статье я ни один раз упоминал что hevc это не центр вселенной и мироздания. Что для ваших "домашних кейсов" есть разные кодеки тоже упомянуто в цитате.

            Серьёзно, ваши сообщения уже больше подходят на спам. Вы уже ни один раз игнорировали доводы из статьи, хотя вроде её и читали...


            1. Loco2k
              29.09.2024 13:17

              Говоря о спаме, вы оставляете комментарий в ветке где мы обсуждаем CRF... Или вы за мной по всему Хабру будете ходить?
              Скажу прямо, ваше вступление про кодеки малосодержательное и спорное по большинству утверждений. О чем вам тут неоднократно написали разные люди.
              Если бы вы написали: вот мой перевод к опциям кодирования ffmpeg применительно к HEVC, подобных комментариев бы не было.


        1. S1re10k_4f99
          29.09.2024 13:17
          +1

          Если вы не знали, кодированное в помощью crf может иметь пики битрейта в разы больше, чем исходный blu-ray. В Blu-ray битрейт ограничен на 62.5 Мбит, уровнем 4.1. В crf я получал и по 200 мбит пики, когда средний битрейт на видео был меньше 10 мбит.

          Конечно жёсткий диск это тянет, а вот если вы решите записать на DVD, то увидите, что в местах пиков у вас фризы, диск не тянет 200 мбит.

          Но главное тут, что аппаратный декодер может не тянуть, если аппаратный декодер только до уровня 4.1, то он так же спокойно может фризить на этих пиках. Хорошо когда аппаратный декодек поддерживает уровни 5 или 5.2, тогда он это спокойно переварит.


  1. alexnissan
    29.09.2024 13:17
    +1

    ffmpeg это кайф , надо будет почитать


  1. Zip1337
    29.09.2024 13:17
    +1

    Даже сам вопрос о том, что такое кодек, ставит многих в тупик. Можно легко услышать ответ: «.avi, .mkv, .mp4...», но это лишь контейнеры, которые в большинстве случаев содержат видео, аудио и другие данные. А кодек — это преобразователь видео/аудиосигнала. 

    В рамках улучшения статьи, где даны краткие справки о HEVC, h264 и других кодеков, можно было бы добавить также и этимологию слова "кодек". Мне стало интересно, как оно образовано и пришлось заглянуть в вики:

    Ко́дек (англ. codec, от coder/decoder — шифратор/дешифратор — кодировщик/декодировщик или compressor/decompressor, слово «кодек» образовано по тому же принципу, что и слово «модем») — устройство или программа, способная выполнять преобразование данных или сигнала.


    1. Realife Автор
      29.09.2024 13:17

      Да, хорошая идея. Сделал.