Вопрос или проблема
Иногда я использую libx265
для кодирования видео, потому что он может обрабатывать градации серого. Я получил очень хорошие результаты с этой командой:
ffmpeg -y -hide_banner -err_detect ignore_err -loglevel info -stats -benchmark -ec deblock
-i "inpur.mp4" ^
-pix_fmt gray12le -vsync vfr -mbd rd -c:a libopus ^
-sws_flags +accurate_rnd -dst_range 1 -color_range 2 ^
-c:v libx265 -crf 28 -preset medium -bufsize 64M -qmin 0 -qmax 68 -subq 8 -idct auto -flags +aic+mv4+qpel+loop+gray ^
-x265-params "me=star:rd=5:rect=1:amp=1:hevc-aq=1:vbv-bufsize=12800:vbv-maxrate=1500:range=full:frame-dup=1" ^
-movflags +faststart "output.mp4"
Я хочу добавить опцию x265 “frame-dup”, но, похоже, это невозможно. Я попробовал несколько разных сборок FFMPG, включая 7.0, прочитал буквально десятки и десятки сайтов, скопировал их примеры, прочитал страницы документации x265 и искал их, и не могу найти никого, кто сказал бы, что это сработает.
Если я изменю строку x265-params на:
"me=star:rd=5:rect=1:amp=1:hevc-aq=1:vbv-bufsize=12800:vbv-maxrate=1500:range=full:frame-dup=1"
программа запускается, но я получаю:
x265 [info]: HEVC encoder version 3.5+117-b34fb2c77
x265 [info]: build info [Windows][GCC 13.2.0][64 bit] 12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x265 [warning]: hevc-aq enabled, disabling other aq-modes
x265 [warning]: Frame-duplication require NAL HRD and VBV parameters. Disabling frame duplication
x265 [info]: Unknown profile, Level-4 (High tier)
x
Я провел большое количество тестов с различными пермутациями параметров. Документация x265 не говорит о параметре “nal-hrd”, но некоторые страницы в интернете утверждают, что он существует. Я пытался добавить его, но это не помогает. Иногда программа запускается без ошибок, но все равно не включает frame-dup. А иногда я получаю сообщение об ошибке, что параметра ‘nal-hd’ нет.
Я пробовал удалить параметр hevc-aq, но это не помогает. Я могу опубликовать десятки или более результатов тестов, если кому-то это нужно, но я думаю, что это было бы пустая трата времени.
Кто-нибудь когда-нибудь действительно добивался, чтобы ffmpeg и libx264 использовали опцию frame-dup, и если да, не могли бы вы опубликовать полную команду ffmpeg, которая работает? Кто-нибудь знает, как включить NAL HRD? Это параметр или есть отдельный NAL параметр, который не указан в опубликованной документации?
Или может кто-то указать мне веб-страницу, которая однозначно говорит, что эта опция недоступна в любой сборке ffmpeg?
Ответ или решение
К сожалению, ваша проблема с использованием параметра frame-dup
в кодировщике libx265
действительно связана с тем, что для его активации необходимо правильно настроить параметры NAL HRD и VBV. Прежде всего, давайте разберем, как это сделать.
Запуск кодировщика x265 с параметром frame-dup
Для того чтобы использовать frame-dup
, необходимо добавить необходимые параметры HRD. В вашем случае вы должны указать параметры nal-hrd
и соответствующие настройки VBV, чтобы обеспечить совместимость.
Пример команды FFmpeg
Попробуйте использовать следующую команду, которая включает необходимые параметры:
ffmpeg -y -hide_banner -err_detect ignore_err -loglevel info -stats -benchmark -ec deblock \
-i "input.mp4" \
-pix_fmt gray12le -vsync vfr -mbd rd -c:a libopus \
-sws_flags +accurate_rnd -dst_range 1 -color_range 2 \
-c:v libx265 -crf 28 -preset medium -bufsize 64M -qmin 0 -qmax 68 -subq 8 -idct auto -flags +aic+mv4+qpel+loop+gray \
-x265-params "me=star:rd=5:rect=1:amp=1:hevc-aq=1:vbv-bufsize=12800:vbv-maxrate=1500:range=full:nal-hrd=vbr:frame-dup=1" \
-movflags +faststart "output.mp4"
Объяснение параметров
nal-hrd=vbr
: Активирует режим ограничения скорости передачи с переменной битовой скоростью (VBR). Это необходимо для правильной работы дублирования кадров.vbv-bufsize
иvbv-maxrate
: Устанавливаются в соответствии с вашими требованиями к битрейту и буферу. Убедитесь, что эти значения удовлетворяют требованиям вашего использования.- Уберите
hevc-aq
, если получаете предупреждение о конфликте с другими параметрами AQ.
Дополнительные советы
- Проверка сборки FFmpeg: Убедитесь, что ваша сборка FFmpeg поддерживает необходимый функционал. Для этого можно использовать команду
ffmpeg -buildconf
для проверки конфигурации. - Обновление FFmpeg и x265: Если ваша текущая сборка устарела, попробуйте обновить до последней версии FFmpeg и библиотеки x265.
- Изучение документации: Параметры и возможности кодировщика могут обновляться. Регулярно проверяйте документацию на официальном сайте для получения актуальной информации.
Если после применения этих изменений вы все еще сталкиваетесь с проблемами, пожалуйста, поделитесь выводом вашей команды и сообщениями об ошибках для дальнейшего анализа.