j-snow
@j-snow
Java junior developer

Почему видео становится темнее после конвертации в DNxHD (DNxHR)?

Привет всем!
Почему видео становится темнее (контрастнее) после конвертации из h264/265 в DNxHD/DNxHR?

5e294b589f759374815640.jpeg

Конвертирую с помощью ffmpeg:
ffmpeg -i in.mov -c:v dnxhd -profile:v dnxhr_hqx -vf "scale=in_range=pc" out.mov

Пробовал разные сочетания in/out_range. Видео на выходе всегда отличается.

ORIGINAL MediaInfo
General
Format : MPEG-4
Format profile : QuickTime
Codec ID : qt 0000.02 (qt )
File size : 124 MiB
Duration : 10 s 40 ms
Overall bit rate : 103 Mb/s

Video
ID : 1
Format : HEVC
Format/Info : High Efficiency Video Coding
Format profile : Main 10@L5.1@High
Codec ID : hvc1
Codec ID/Info : High Efficiency Video Coding
Duration : 10 s 40 ms
Bit rate : 101 Mb/s
Width : 3 840 pixels
Height : 2 160 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 25.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 10 bits
Bits/(Pixel*Frame) : 0.487
Stream size : 121 MiB (98%)
Language : English
Color range : Full
Color primaries : BT.709
Transfer characteristics : BT.601
Matrix coefficients : BT.601
Codec configuration box : hvcC

DNxHR MediaInfo
General
Format : MPEG-4
Commercial name : DNxHR HQX
Format profile : QuickTime
Codec ID : qt 0000.02 (qt )
File size : 873 MiB
Duration : 10 s 40 ms
Overall bit rate mode : Constant
Overall bit rate : 730 Mb/s
Writing application : Lavf58.29.100

Video
ID : 1
Format : VC-3
Commercial name : DNxHR HQX
Format version : Version 3
Format profile : RI@HQX
Codec ID : AVdh
Codec ID/Info : Avid DNxHR
Duration : 10 s 40 ms
Bit rate mode : Constant
Bit rate : 728 Mb/s
Width : 3 840 pixels
Height : 2 160 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 25.000 FPS
Color space : YUV
Chroma subsampling : 4:2:2
Bit depth : 10 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 3.512
Stream size : 872 MiB (100%)
Language : English
  • Вопрос задан
  • 698 просмотров
Решения вопроса 1
nidalee
@nidalee
Color primaries : BT.709
Transfer characteristics : BT.601
Matrix coefficients : BT.601
Вероятно, вам нужно не только выставить in_range, но еще и все характеристики и коэффициенты.
См.: color_range=, color_space=, color_transfer=, color_primaries=
Можете почитать, в частности, эту статью, с говорящим названием "Color Hell: Ffmpeg Transcoding and Preserving BT.601"
Кроме того, у вас 4:2:0 превращаются в 4:2:2 - это тоже не добавляет точности цветам.

С какой целью конвертируете?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Balling
Надо понимать дефолты swscale компонента ffmpeg. Во-первых, по умолчанию он использует BT.601 матрицу (это YCbCr кодирование), во-вторых limited range. Таким образом, без -vf scale=out_range=pc (но и еще -color_range pc) вы не получите full range. И кстати. Я вообще не уверен, что VC-3 имеет full range. А также нужно добавить 1 -color_primaries bt709 -color_trc bt601 -colorspace smpte170m

BT.601 матрица с BT.709 праймериз это не совсем стандартная механика. Для правильного отображения следует использовать mpv.

О, и кстати. Следует проверить, что ваш .hevc исходник реально full, это стандартный баг android.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы