【问题标题】:Can you insert text from a file in real time with ffmpeg streaming?您可以使用 ffmpeg 流实时插入文件中的文本吗?
【发布时间】:2020-12-14 11:46:13
【问题描述】:

我有这段代码用于流式传输文件并将视频显示的名称在视频的某个时间 (name_of_show) 放在屏幕顶部,屏幕底部取名为从 video_title.txt 中删除节目并将其放在屏幕底部。

我想做的是每隔 1 或 2 分钟找到一种方法,提取 video_title.txt 中当前的任何文本并将其放入视频中几秒钟。

我会从另一个 python 程序更新 video_title.txt。下面是我当前的代码。

           command = [
        "ffmpeg" , "-re" , "-i" , video[0] ,
        "-vf" ,  "[in]drawtext=fontsize=40:fontcolor=white:box=1:boxcolor=black@0.8:boxborderw=5:fontfile=/home/fonts/timeless.ttf: text='" + name_of_show + "':x='W-(W+tw)*mod(t\,10)/10':y='H/20':enable='between(t,50,70)',drawtext=fontsize=20:fontfile=/home/fonts/timeless.ttf:textfile=/video_title.txt:fontcolor=white:box=1:boxcolor=black@0.8:boxborderw=5:x=W-w+5:y=h-th-50:enable='1'[out]"
        "-vcodec" , "libx264", "-pix_fmt", "yuv420p",
        "-preset" , "medium" , "-r" , "30" , "-g" , "48" , "-b:v" , "2500k" ,
        "-acodec" , "libmp3lame" , "-ar" , "44100", "-threads" , "6" ,
        "-q:a" , "3" , "-b:a" , "712000" ,"-bufsize", "512k" , "-f" ,
        "flv" , STREAM_URL,

最终我想要达到的效果是在 twitch/youtube 上播放一长串,比如说 1 小时,有人可以发送一条短信,它会出现在信息流中。

【问题讨论】:

    标签: python ffmpeg streaming


    【解决方案1】:

    在 drawtext 中使用 reload=1textfile 选项。来自drawtext filter documentation

    reload
    如果设置为 1,文本文件将在每次之前重新加载 框架。请务必以原子方式更新它,否则可能会被部分读取, 甚至失败。

    textfile
    包含要绘制的文本的文本文件。文本必须是 UTF-8 编码字符序列。
    如果没有使用参数text 指定文本字符串,则此参数是必需的。
    如果同时指定了texttextfile,则会发生错误。

    例子:

    ffmpeg -i input.mp4 -vf "drawtext=texfile=mytext.txt:reload=1:fontsize=22:fontcolor=white" output.mp4
    

    要自动更新,您可以使用 mv 或等效项:

    mv temp.txt mytext.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 2016-04-22
      • 2015-09-10
      • 2018-10-23
      相关资源
      最近更新 更多