Как преобразовать 10-битное видео H.265 в H.264 без потери качества

У меня есть файл MPEG-H Part2/HVEC (H.265) .mkv (Planar 4:2:0 YUV 10-bit LE). Поскольку мой проектор LG PF 1500 читает не H.265, а H.264, я хотел бы преобразовать его (HVEC -> H.264). Я думаю, что ручной тормоз - удобная программа для этого.

Какие настройки следует использовать, чтобы получить файл H.264 такого же качества, как и оригинал (HVEC)?

Я думаю, что я должен выбрать H.264 10-бит в качестве видеокодера. Однако я не уверен в настройке качества (RF). Как узнать, что такое настройка качества HVEC, и как выбрать равную настройку для H.264?

Это информация, извлеченная с помощью MediaInfo:

Формат: Matroska Версия формата
: Версия 4 Размер файла: 1,48 ГиБ Продолжительность: 52 мин 46 с Общий битрейт: 4 012 кбит/с Дата кодирования
: UTC 2018-05-26 19:19:57 Приложение для записи: mkvmerge v20.0.0 ( 'I Am The Sun') 64-разрядная библиотека записи
: libebml v1.3.5 + libmatroska v1.4.8 Интерфейс записи
: StaxRip v1.7.0.6

Идентификатор видео : 1 Формат
: HEVC Формат/Информация : Высокоэффективное кодирование видео Профиль формата : Основной 10@L4@Main ID кодека : V_MPEGH/ISO/HEVC Продолжительность : 52 мин 46 с Скорость передачи : 3 529 кб/с Ширина : 1
920 пикселей Высота : 1 080 пикселей Соотношение сторон дисплея : 16:9 Режим частоты кадров
: Постоянный Частота кадров : 23,976 (24000/1001) кадров в секунду Цветовое пространство : YUV Подвыборка цветности : 4:2:0 Разрядность
: 10 бит Бит/(пиксель*кадр) : 0,071 Размер потока : 1,30 ГиБ (88%) Библиотека записи : x265 2.7+346-69aafa6d70ad: [Windows][GCC 7.3.0][64 бит] 10 бит Настройки кодирования : cpuid= 1111039/frame-threads=2/numa-pools=4/wpp/no-pmode/no-pme/no-psnr/ssim/log-level=2/input-csp=1/input-res=1920x1080/interlace= 0 / total-frames = 75917 / level-idc = 0 / high-tier = 1 / uhd-bd = 0 / ref = 3 / no-allow-non-conformance / no-repeat-headers / Annexb / no-aud / no-hrd / info / hash=0 / no-temporal-layers / open-gop / min-keyint=23 / keyint=250 / gop-lookahead=0 / bframes=8 / b-adapt=2 / b-pyramid / bframe-bias = 0 / rc-lookahead = 50 / lookahead-slices = 6 / scenecut = 40 / radl = 0 / no-intra-refresh / ctu = 64 / min-cu-size = 8 / no-rect / no- amp / max-tu-size=32 / tu-inter-depth=1 / tu-intra-depth=1 / limit-tu=0 / rdoq-level=0 / dynamic-rd=0.00 / no-ssim-rd / signhide / no-tskip / nr-intra=0 / nr-inter=0 / no-constrained-intra / no-strong-intra-smoothing / max-merge=3 / limit-refs= 3 / режимы без ограничений / я = 3 / субме = 3 / merange = 57 / темпоральный-мвп / весp / без весаb / без анализа-изображения-источник / deblock = 0: 0 / sao / no-sao- без деблокировки / rd = 3 / без раннего пропуска / без rskip / без быстрого внутреннего пропуска / без tskip-быстрого / без cu-без потерь / без b-внутри / без раздельного пропуска / rdpenalty= 0 / psy-rd=2.00 / psy-rdoq=0.00 / no-rd-refine / no-lossless / cbqpoffs=0 / crqpoffs=0 / rc=crf / crf=20.0 / qcomp=0.60 / qpstep=4 / stats- запись = 0 / статистика чтения = 0 / ipratio = 1,40 / pbratio = 1,30 / aq-mode = 3 / aq-strength = 1.00 / cutree / zone-count = 0 / no-strict-cbr / qg-size = 32 / no-rc-grain / qpmax = 69 / qpmin = 0 / no-const-vbv / sar = 0 / overscan = 0 / videoformat=5 / range=0 / colorprim=2 / transfer=2 / colormatrix=2 / chromaloc=0 / display-window=0 / max-cll=0,0 / min-luma=0 / max-luma=1023 / log2-max-poc-lsb=8 / vui-timing-info / vui-hrd-info / slices=1 / no-opt-qp-pps / no-opt-ref-list-length-pps / no-multi- pass-opt-rps/scenecut-bias=0.05/no-opt-cu-delta-qp/no-aq-motion/no-hdr/no-hdr-opt/no-dhdr10-opt/no-idr-recovery- sei / analysis-reuse-level = 5 / scale-factor = 0 / Refine-Intra = 0 / Refine-Inter = 0 / Refine-mv = 0 / No-Limit-Sao / Ctu-Info = 0 / No-Lowpass- dct/refine-mv-type=0/copy-pic=1/max-ausize-factor=1.0/no-dynamic-refine/no-single-sei По умолчанию0 / min-luma = 0 / max-luma = 1023 / log2-max-poc-lsb = 8 / vui-timing-info / vui-hrd-info / slices = 1 / no-opt-qp-pps / no- opt-ref-list-length-pps / no-multi-pass-opt-rps / scenecut-bias=0.05 / no-opt-cu-delta-qp / no-aq-motion / no-hdr / no-hdr- opt / no-dhdr10-opt / no-idr-recovery-sei / analysis-reuse-level = 5 / scale-factor = 0 / Refine-Intra = 0 / Refine-Inter = 0 / Refine-mv = 0 / No- limit-sao/ctu-info=0/no-lowpass-dct/refine-mv-type=0/copy-pic=1/max-ausize-factor=1.0/no-dynamic-refine/no-single-sei По умолчанию0 / min-luma = 0 / max-luma = 1023 / log2-max-poc-lsb = 8 / vui-timing-info / vui-hrd-info / slices = 1 / no-opt-qp-pps / no- opt-ref-list-length-pps / no-multi-pass-opt-rps / scenecut-bias=0.05 / no-opt-cu-delta-qp / no-aq-motion / no-hdr / no-hdr- opt / no-dhdr10-opt / no-idr-recovery-sei / analysis-reuse-level = 5 / scale-factor = 0 / Refine-Intra = 0 / Refine-Inter = 0 / Refine-mv = 0 / No- limit-sao/ctu-info=0/no-lowpass-dct/refine-mv-type=0/copy-pic=1/max-ausize-factor=1.0/no-dynamic-refine/no-single-sei По умолчанию05 / no-opt-cu-delta-qp / no-aq-motion / no-hdr / no-hdr-opt / no-dhdr10-opt / no-idr-recovery-sei / анализ-повторное использование-уровень = 5 / масштабный фактор = 0 / уточнение-внутри = 0 / уточнение-интер = 0 / уточнение-mv = 0 / без ограничения-sao / ctu-info = 0 / без lowpass-dct / уточнение-mv-тип = 0 / copy-pic=1 / max-ausize-factor=1.0 / no-dynamic-refine / no-single-sei По умолчанию05 / no-opt-cu-delta-qp / no-aq-motion / no-hdr / no-hdr-opt / no-dhdr10-opt / no-idr-recovery-sei / анализ-повторное использование-уровень = 5 / масштабный фактор = 0 / уточнение-внутри = 0 / уточнение-интер = 0 / уточнение-mv = 0 / без ограничения-sao / ctu-info = 0 / без lowpass-dct / уточнение-mv-тип = 0 / copy-pic=1 / max-ausize-factor=1.0 / no-dynamic-refine / no-single-sei По умолчанию
: Да Принудительно : Нет

Пытался найти решение в книге: Video Coding Standards and Video Formats by Rao, однако толкового подсказки не нашел.

Ответы (1)

похоже, что видео закодировано со скоростью 4000 кбит/с, а не с коэффициентом скорости (RF).
Но дело не в этом. Проблема в том, что хотя 264 и поддерживает кодирование без потерь, он не является широко совместимым! (вы бы сделали это, установив цветовой формат на hi444 и -cq 0(спасибо Gyan за указание на это)

Если вам нужно наилучшее качество, но также и самый большой файл, вам нужен файл RF = 1.
Если вам нужно очень хорошее качество, но все же огромные файлы, вам нужно RF <= 16
хорошее качество с большими файлами, 16 < RF <=24
посредственное качество со средним размером файла 24 < RF <= 28
до 51 становится все хуже и меньше.

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

ffmpeg материал

Ссылка: https://ffmpeg.zeranoe.com/builds/
Полная документация: https://ffmpeg.org/documentation.html
Если вам нужно хорошее качество, но длительное время кодирования, используйте это в CMD, который может видеть ffmpeg.exe :

ffmpeg -i my_input_file.mkv -map 0:v? -map 0:a? -map 0:s? -c:v libx264 -preset:v medium -profile:v high -rc-lookahead 900 -crf 16 -c:a copy -c:s copy my_output_file.mkv

Параметры означают следующее:
-i <file>файл для перекодирования
-map 0:v?использовать все видеопотоки из входа 0. Знак вопроса означает «если они существуют»
-map 0:a?использовать все аудиопотоки
-map 0:a?использовать все потоки субтитров
-c:v libx264преобразовать видео с помощью libx264кодировщика.
-preset:v mediumиспользуйте среднюю скорость. Альтернативы: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo(чем быстрее, тем больше файл, более медленный профиль приводит к уменьшению результатов. placeboзанимает время, кратное veryslow, но приводит к уменьшению размера менее чем на 0,1%,
-profile:v highиспользуйте высококачественное кодирование. ( другие варианты просто для обратной совместимости)
-rc-lookahead 900просматривать до 900 кадров вперед, чтобы найти наилучшую кодировку текущего кадра. Чем больше результатов, тем лучше (как у плацебо) качество по размеру, меньше наоборот. тот же принцип, что и в -presetприменяется.
-crf 16тарифный фактор . Чем выше число, тем меньше размер и некрасивее изображение. Примерно через каждые 6 точек половина размера файла. Большинство людей не заметят разницы с -crf 20. Многие даже не -crf 24
-c:a copyоставляют аудио как есть.
-c:s copyоставьте субтитры как есть.

Если у вас есть графический процессор nVidia, вы можете использовать встроенный модуль кодирования. Вместо этого используйте эту команду:

ffmpeg -i my_input_file.mkv -map 0:v? -map 0:a? -map 0:s? -c:v h264_nvenc -preset:v medium -profile:v high -rc constqp -qp 16 -c:a copy -c:s copy my_output_file.mkv

Похожие параметры. presetограничен fast, medium, slow, где slowпотребуется дополнительная настройка помимо этого ответа.
Основное изменение заключается в том, что кодировщик nvidia не поддерживает просмотр вперед, и поэтому это не вариант crf. По этой причине мы используем cqопцию (Constant Quantization). Разница между ними заключается в том, что они crfпытаются колебаться вокруг определенного значения, основываясь на текущем и последующем изображениях, в то время как cqостаются на этом точном значении в течение всего времени.

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

Надеюсь это поможет

Привет

264 не поддерживает кодирование без потерь --> и стандарт H.264, и кодировщик x264 поддерживают кодирование без потерь как часть профиля Hi444p, но это не является широко совместимым.
Вы правы OO Исправление этого в ответе
Просто, если у кого-то такая же проблема, как у меня, что устройство Smart Beamer не читает 10-битное (только 8-битное): добавьте -vf format=yuv420решение от @PinggerShikkoken для преобразования 10-битного H.265 в 8-битный H.264.