Эта команда в окне командной строки работает нормально и записывает весь экран:
ffmpeg -f gdigrab -framerate 24 -i desktop -preset ultrafast -pix_fmt yuv420p out.mp4
эта командная строка добавляет текст водяного знака белого цвета в центр экрана:
ffmpeg -f gdigrab -framerate 24 -i desktop -vf "drawtext=fontfile=path/to/arial.ttf:text='All rights reserved to ...':fontsize=24:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2" -preset ultrafast -pix_fmt yuv420p out.mp4
Проблема в том, что текст водяного знака белый, и я вижу его только тогда, когда цвет фона окна черный, например, когда я вывожу на передний план окно консоли ffmpeg:
но когда он записывает какое-то окно с белым фоном, то из-за того, что текст белый, его не видно.
Я хочу обновить командную строку ffmpeg, чтобы сделать ее динамичной: если фон окна черный, отображать текст водяного знака белым, а если я открываю окно с белым фоном, автоматически менять текст водяного знака на черный.
Это команда, которую я попробовал для динамического эффекта, но она не сработала, у меня возникли ошибки, и я перепробовал множество версий командной строки, но ничего не помогло и не сработало.
ffmpeg -f gdigrab -framerate 24 -i desktop -filter_complex "[0:v]drawtext=text='Watermark Text':x=(w-text_w)/2:y=(h-text_h)/2:fontfile=arial.ttf:fontsize=24,format=rgba [txt];[txt]split=2 [bw][wc];[bw]lut=r=val*2 [b];[wc]lut=r=val*0.5+0.5:g=val*0.5+0.5:b=val*0.5+0.5 [wc];[wc][b]alphamerge [wm];[wm][0:v]overlay=10:10[outv]" -c:v libx264 -preset ultrafast -map "[outv]" out.mp4
и также попробовал это
ffmpeg -f gdigrab -framerate 24 -i desktop -filter_complex "[0:v]drawtext=text='Watermark Text':x=(w-text_w)/2:y=(h-text_h)/2:fontfile=Arial.ttf:fontsize=24,format=rgba [txt];[txt]split=2 [bw][wm];[bw][1:v]split=3 [b][g][r];[b]geq=r=0:g=0.5:b=0 [b];[g]geq=r=0:g=0:b=0.5 [g];[r]geq=r=0.5:g=0:b=0 [r];[wm][b][g][r]merge=3,format=rgba [watermark];[0:v][watermark]overlay=x=(W-w)/2:y=(H-h)/2" -map "[watermark]" -map 0:a? -c:v libx264 -c:a copy -preset ultrafast out.mp4