Почему мое видео H.264 имеет зеленое наложение после применения видеофильтра? - PullRequest
0 голосов
/ 07 июня 2019

При выполнении следующего кода:

ffmpeg -i input.mov -c:v libx264 -preset veryslow -pix_fmt yuv420p -filter_complex "drawtext=fontfile=font.ttf:fontcolor=white@1:fontsize=h/6:x=(w-text_w)/2:y=(h-text_h)/2:text='Henk de Vries'[watermark];[0][watermark]blend=all_mode=difference:all_opacity=1" output.mp4

Выходной файл имеет зеленое наложение. При использовании других режимов наложения результаты различаются, в некоторых режимах отображаются правильные цвета, а в других - зеленый и розовый.

Я знаю, что входной файл имеет цветовое пространство yuv420p. Я думаю, что смешивающий фильтр поддерживает только режимы RGBA, но я не уверен.

Как мне избежать наложения зеленого и получить оригинальные цвета? (например, как выглядит исходное видео)

1 Ответ

1 голос
/ 11 июня 2019

Вы смешиваете видео с почти идентичной копией в разностном режиме, поэтому большинство пикселей будут обнулены. В YUV-кодировании 0-значный пиксель в обоих каналах цветности представляет зеленый цвет. Канал яркости (Y) не является чистым представлением яркости, и поэтому значение яркости 0 вместе с обеими насыщенными цветами как 0 приводит к отображению зеленого цвета.

Ответ Rotem находится в правильных строках, но промежуточные файлы не требуются. Просто преобразуйте в RGB пространство заранее.

ffmpeg -i input.mov -c:v libx264 -preset veryslow -pix_fmt yuv420p -filter_complex "[0]format=gbrp,split=2[text][orig];[text]drawtext=fontfile=font.ttf:fontcolor=white@1:fontsize=h/6:x=(w-text_w)/2:y=(h-text_h)/2:text='Henk de Vries'[watermark];[orig][watermark]blend=all_mode=difference:all_opacity=1" output.mp4

...