x264/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
и узнать номера кадров начала / конца этого временного региона. И я думаю, что мне нужно было бы запустить видео через автономный CLI x265
, потому что я думаю, что зоны - это функция интерфейса командной строки, а не сама библиотека. (И поэтому не поддерживается через -x265-params
для передачи пар ключ / значение в libx265).
Я проверил, поддерживает ли Handbrake какие-либо зоны, и не вижу его в графическом интерфейсе. (И в пакете Handbrake 1.0.7 Arch Linux по-прежнему используется x265 2.1, поэтому он даже не имеет обновленных таблиц Lambda с x265 2.4, выпущенного более 9 месяцев назад. Ручной тормоз хорош, за исключением того, что он содержит устаревшие частные копии кодеков, вместо того, чтобы строить против системной версии, которая определенно все еще имеет значение для x265.)