Основанный на времени вместо основанных на кадре зон (с различными CRF) для кодирования ffmpeg+x264/x265?
х264/5 есть zones
Параметр для поддержки различных настроек кодирования для части видео, но он принимает только номера кадров, а не временные метки.
Это небольшое неудобство с видео с постоянной частотой кадров, но основное неудобство при использовании фильтра ffmpeg, такого как mpdecimate
отбросить (почти) точные дубликаты кадров. Или с VFR видео в целом. (И если это не работает с ffmpeg
только вариант для автономного интерфейса командной строки, что также будет большим неудобством.)
libx265 (и libx264) имеют API, который позволяет вызывающей стороне изменять конфигурацию некоторых параметров кодировщика на лету, поэтому оболочки кодировщиков libx264 и libx265 ffmpeg теоретически могут настраивать параметры CRF или других кодировщиков в определенном диапазоне временных отметок, отдельно от собственных x264 " зоны "
У ffmpeg действительно есть диапазоны запуска / остановки для фильтров, поэтому его синтаксический анализ командной строки / параметров, вероятно, содержит большую часть кода, необходимого для этого.
Но AFAIK, это в настоящее время не реализовано. ffmpeg -h encoder=libx265
не показывает ничего актуального; -x265-params
анализируется для настройки энкодера один раз при запуске, и поддерживается только пара других опций. (libx264
имеет много других опций ffmpeg, но не какие-либо зоны, которые я вижу.)
Есть ли альтернативный способ кодирования с -vf mpdecimate
(или произвольный источник VFR) и имеют CRF30 для большей части видео, но CRF=24 от 00:30:00
в 00:30:30
, например?
В моем случае есть один визуально интересный клип, на который стоит потратить лишние биты по качеству, и я бы предпочел не разрезать видео и использовать упорядоченные главы MKV просто для того, чтобы это произошло. Хотя, если есть какая-то прямая ffmpeg
Синтаксис для этого (особенно за один проход), это было бы хорошо. То, что может вписаться в оболочку bash "один вкладыш", - это то, к чему я стремлюсь.
Чтобы сделать это с зонами, я думаю, что мне нужно запустить видео через mpdecimate
и узнайте номера кадров начала / конца этого временного региона. И я думаю, что мне нужно запустить видео через автономный x265
CLI, потому что я думаю, что зоны являются частью интерфейса командной строки, а не самой библиотеки. (И поэтому не поддерживается через -x265-params
передать пары ключ / значение в libx265).
I checked to see if Handbrake supported any kind of zones, and I don't see it in the GUI. (And Arch Linux's Handbrake 1.0.7 package is still using x265 2.1, so it doesn't even have the updated Lambda tables from x265 2.4, which came out over 9 months ago. Handbrake is nice except for having outdated private copies of codecs instead of building against the system version, which definitely still matters for x265.)