Почему при перекодировке FFmpeg и записи субтитров dvbsub неправильный цвет субтитров?

Вопрос или проблема

Я пытаюсь транскодировать прямой эфир с помощью FFmpeg и одновременно хочу добавить dvbsub. Этот процесс должен быть экономичным с точки зрения использования процессора, поэтому работу должна выполнять графическая карта, это карта потока:

Stream #0:1[0xb5f]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, top first), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 50 tbr, 90k tbn
Stream #0:2[0xb60](rum): Audio: mp2 ([4][0][0][0] / 0x0004), 48000 Hz, stereo, s16p, 256 kb/s
Stream #0:3[0xb64](rum): Subtitle: dvb_subtitle (dvbsub) ([6][0][0][0] / 0x0006)

Я сумел наложить субтитры (с использованием процессора) и транскодировать с помощью графической карты, и все хорошо. Это команда, которую я использую:

ffmpeg -fflags +genpts -nostats -nostdin -hide_banner -c:v h264_cuvid -deint 2 -drop_second_field 1 -surfaces 10 -i input -filter_complex "[0:s:0] scale=1920:1080 [sub],[0:v][sub] overlay=x=0:y=0:format=auto" -vcodec hevc_nvenc -b_ref_mode 0 -preset fast -cq 10 -g 150 -b:v 3500k -minrate 3000k -maxrate 4000k -bufsize 1002k -map 0:a:0 -c:a libfdk_aac -ac 2 -b:a 192k  out

Субтитры корректно добавлены с помощью процессора
Но субтитры добавлены с помощью процессора.

В команде ниже я пытаюсь добавить субтитры с помощью графической карты. Но цвет не совсем правильный, и вот решение, которое я нашел на данный момент:

ffmpeg -hwaccel cuvid -c:v h264_cuvid -canvas_size 1820x1080 -i input -filter_complex "[0:v]hwdownload,format=nv12[base];
[0:s:0]scale=1920:1080[subtitle]; [base][subtitle]overlay=y=500:x=620[v];
[v]hwupload_cuda=0,yadif_cuda=0:-1:0[v]" -map "[v]" -vcodec hevc_nvenc -rc-lookahead 20 -i_qfactor 0.75 -b_qfactor 1.1 -b_ref_mode 0 -preset llhq -tune ll -cq 10 -g 150 -b:v 3500k -minrate 3000k -maxrate 4000k -bufsize 2002k -map 0:a:0 -c:a libfdk_aac -ac 2 -b:a 192k out

Субтитры некорректны, добавлены с помощью графической карты

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

Как я могу получить тот же результат при добавлении субтитров с помощью графической карты?

Ответ или решение

Для решения проблемы с неправильным отображением цвета субтитров при использовании FFmpeg и аппаратного ускорения через GPU, сначала необходимо понять, что привело к искаженному воспроизведению цвета. Основная проблема заключается в том, что аппаратное ускорение может использовать другой цветовой формат, который влияет на отображение субтитров. Рассмотрим несколько шагов, которые могут помочь решить данную проблему:

1. Понимание причины проблемы

Когда вы используете аппаратное декодирование и наложение субтитров через GPU, как в вашем случае, разные цветовые форматы (например, NV12) могут влиять на правильность отображения цвета субтитров. Это отличие связано с разной обработкой цветов при использовании различного оборудования и драйверов.

2. Применение нужных фильтров и настроек

На ваш скрипт влияет использование фильтра hwdownload, который преобразует видеоданные из GPU обратно в CPU-совместимую форму для наложения субтитров, и обратно в hwupload_cuda для передачи их на GPU. Попробуйте следующие изменения для улучшения цветопередачи:

ffmpeg -hwaccel cuvid -c:v h264_cuvid -canvas_size 1920x1080 -i input -filter_complex "[0:v]hwdownload,format=nv12[base];
[0:s:0]scale=1920:1080[subtitle]; [base][subtitle]overlay=y=500:x=620[v];
[v]format=nv12,hwupload_cuda" -map "[v]" -vcodec hevc_nvenc -preset llhq -cq 10 -g 150 -b:v 3500k -map 0:a:0 -c:a libfdk_aac -ac 2 -b:a 192k out

3. Использование бэкграунда для субтитров

Если проблема с цветовым отображением субтитров не исчезает, можно добавить фон к субтитрам. Это позволит избежать искажения цвета самим видео за счет фона под текстом субтитров:

[0:s:0]scale=1920:1080,format=rgba,drawbox=color=black@0.5:t=fill[subtitle]; [base][subtitle]overlay=y=500:x=620[v]

4. Отладка и тестирование

Проверьте все изменения на небольшом отрезке видео, чтобы убедиться в корректности результата, и постепенно вносите изменения, контролируя качество субтитров. Также убедитесь, что используемые кодеки и фильтры поддерживаются вашей версией FFmpeg и GPU.

5. Дополнительные рекомендации

  • Убедитесь, что используете последнюю версию FFmpeg и драйвера для вашей видеокарты.
  • Проверьте документацию по использованию nvenc и hwaccel, чтобы удостовериться в правильной настройке и совместимости с вашим оборудованием.

Используйте указанные шаги для диагностики и исправления проблем с цветом субтитров, и вы сможете получить стабильный и качественный результат даже при использовании аппаратного ускорения через GPU.

Оцените материал
Добавить комментарий

Капча загружается...