gpt4 book ai didi

python - 如何用ffmpeg(ffmpeg-python)填充颜色渐变绘制文本?然后与音乐混合?

转载 作者:行者123 更新时间:2023-12-04 22:47:43 25 4
gpt4 key购买 nike

我想实现这个结果(在视频顶部放置带有渐变或任何图片填充的文本):
enter image description here
所以我决定做一张渐变的图片:
enter image description here
然后使用色度键技术将其转换为此(具有透明背景):
enter image description here
然后把它放在视频上。
这是带有 ffmpeg-python 的代码:

font_path = 'fonts/my_font.ttf'
input_video = ffmpeg.input('vid01.mp4')
split = input_video.filter_multi_output('split')
split_main = split[0]
split_txt_bg = split[1]

text_bg_black = ffmpeg.filter(text_bg, 'eq', brightness=-1000, saturation=0) # generate black bg from video input
text_mask = ffmpeg.filter(text_bg_black, 'drawtext', text='some text', fontcolor='0xFFFFFF', fontsize=85, x='(w-text_w)/2', y='68-(text_h/2)', fontfile=font_path) #draw text
text_mask_transparent = ffmpeg.filter(text_mask, 'colorkey', color='0xFFFFFF', similarity=0.45, blend=0.1)
text_on_bg = ffmpeg.filter([fill_gradient_gold, text_mask_transparent], 'overlay', x='(W-w)/2', y='(H-h)/2')
text = ffmpeg.filter(text_on_bg, 'colorkey', color='0x000000', similarity=0.45, blend=0.01)

comp1 = ffmpeg.filter([split_main, text], 'overlay', x='(W-w)/2', y='(H-h)/2')

comp.output('vid01_comp1.mp4').overwrite_output().run()
该解决方案有效,但存在问题:
  • 在最后它降低了原始渐变图片的亮度,我根本不想要
  • 它似乎并不优雅(因为色键解决方案)

  • 是否可以使用 drawtext 制作 alpha 掩码?然后用它来切割渐变?
    如果您在 ffmpeg-python 中提供答案会更好因为我是新手,我很难转换命令行 ffmpegffmpeg-python , 谢谢你!
    我也不知道如何混合生成的视频 comp1带有音乐文件,请帮助。

    最佳答案

    我们可以在黑色背景上绘制文本,并使用alphamerge用于创建带有彩色渐变文本的透明背景。
    然后我们可以在输入视频上叠加渐变(带有透明背景)。
    我不知道我建议的解决方案是否最优雅,但不是降低渐变图片的亮度。

    建议的解决方案适用于以下阶段:

  • 定义合成黑色视频源(1 帧)。
  • 在黑色视频帧上绘制白色文本。
  • 添加“黑色背景上的白色文本”作为渐变图像的 Alpha channel 。
    只有白色文本是不透明的,黑色背景是完全透明的。
  • 将上面的帧覆盖在视频上。

  • 首先创建用于测试的合成黄色视频文件(带有正弦音频):
    # Build first synthetic video, for testing:
    (
    ffmpeg
    .output(ffmpeg.input('sine=frequency=500', f='lavfi'),
    ffmpeg.input('color=yellow:size=1920x1080:rate=1', f='lavfi'),
    'in.mp4', vcodec='libx264', crf=17, pix_fmt='yuv444p', acodec='aac', ar=22050, t=10)
    .overwrite_output()
    .run()
    )

    解决方案代码示例:
    import ffmpeg

    # Example using FFmpeg CLI:
    # ffmpeg -y -i text_bg.png -f lavfi -i color=0x505050:size=1920x1080:rate=1:duration=1 -filter_complex "color=black[blk];[blk][0:v]scale2ref[b][v0];[b]drawtext=text='some text':fontcolor='0xFFFFFF':fontsize=300:x='(w-text_w)/2':y='(h-text_h)/2',format=gray[a];[v0][a]alphamerge[txt];[1:v][txt]overlay=format=yuv444" -frames:v 1 overlayed_text.png

    input = ffmpeg.input('in.mp4')
    input_video = input.video
    input_audio = input.audio

    bg = ffmpeg.input('text_bg.png').video # Gradient image

    blk = ffmpeg.input('color=black:size=1920x1080:rate=1:duration=1', f='lavfi').video # Black background

    # White text on black background - used as alpha channel
    txt = blk.filter('drawtext', text='some text', fontcolor='0xFFFFFF', fontsize=400, x='(w-text_w)/2', y='(h-text_h)/2').filter('format', pix_fmts='gray')

    # Add txt as alpha channel to bg - only the white text is opaque, the black background is transparent.
    txt_on_bg = ffmpeg.filter([bg, txt], 'alphamerge')

    # Overlay txt_on_bg on input_video
    comp1 = ffmpeg.filter([input_video, txt_on_bg], 'overlay', x='(W-w)/2', y='(H-h)/2', format='yuv444')

    ffmpeg.output(comp1, input_audio, 'vid01_comp1.mp4', vcodec='libx264', crf=17, pix_fmt='yuv444p', acodec='copy').overwrite_output().run()

    样本输出:
    enter image description here

    关于python - 如何用ffmpeg(ffmpeg-python)填充颜色渐变绘制文本?然后与音乐混合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71051645/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com