Трудно найти исчерпывающую документацию по манипулированию цветовым диапазоном с помощью ffmpeg. Я хотел бы знать рекомендуемый способ справиться со следующими случаями:

  1. Вход ограничен диапазоном, я хочу вывести полный диапазон
  2. Ввод полный диапазон 4:2:2, я хочу вывести в 4:2:0 полный диапазон
  3. Вход ошибочно помечен как полный диапазон, я хочу, чтобы ремукс или перекодировать в ограниченном диапазоне

Например, чтобы решить дело № 2, я просто добавляю -pix_fmt yuvj420p . Это работает, но у меня есть предупреждение о том, что формат пикселя устарел. Я пытаюсь найти решение с помощью -pix_fmt yuv420p -color_range 2 но вывод размыт (ограниченный диапазон воспроизводится как полный)

1 ответ1

2

Вход ограничен диапазоном, я хочу вывести полный диапазон

Используйте масштабный фильтр, -vf scale=in_range=limited:out_range=full

и установите диапазон цветов для кодера и контейнера *, -color_range 2 ,

* при записи в MP4 также добавьте -movflags +write_colr


Ввод полный диапазон 4:2:2, я хочу вывести в 4:2:0 полный диапазон

-pix_fmt yuvj420p и те же меры, что и выше, для кодировщика + контейнер.


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

Перекодировать такое же, как 1, но установить правильные значения in_range и out_range.

Для ремикса H264 добавьте -bsf:v h264_metadata=video_full_range_flag=0-c:v copy).

Для ремикса H265 добавьте -bsf:v hevc_metadata=video_full_range_flag=0-c:v copy).

-color_range 1 для ограниченного диапазона.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .