【发布时间】:2021-03-17 13:22:54
【问题描述】:
在我之前打开的主题中:
How to make FFmpeg automatically inject mp3 audio tracks in the single cycled muted video
我从@llogan 那里得到了详细的解释,如何在 youtube 上播放循环的短静音视频,在不中断翻译的情况下自动在其中注入音轨。
我计划增强流程,我面临的下一个问题是如何动态地将附加文本添加到广播中。
先决条件:
- youtube 广播由 ffmpeg 启动并运行
- 3 分钟短视频无限循环播放
- 播放列表中的音轨由“ffmpeg concat”自动获取并一一注入视频中
这是开始翻译的基本命令:
ffmpeg -re -fflags +genpts -stream_loop -1 -i video.mp4 -re -f concat -i input.txt -map 0:v -map 1:a -c:v libx264 -tune stillimage -vf format=yuv420p -c:a copy -g 20 -b:v 2000k -maxrate 2000k -bufsize 8000k -f flv rtmp://a.rtmp.youtube.com/live2/my-key
我想带来的改进
- 我打算在音频文件中存储一些元数据(基本上是艺术家名和歌曲名)
- 在一首特定歌曲开始播放时,艺术家/歌曲名称应从元数据中获取,并在整首歌曲播放期间作为文本显示在视频上。
- 当当前歌曲结束并且新歌曲开始播放时,应将之前的艺术家/歌曲文本替换为新歌曲等
我的问题是如何正确获取元数据并将其添加到使用 ffmpeg 的现有广播配置中?
【问题讨论】:
-
可以使用带有
reload和textfile选项的drawtext 过滤器(请参阅Can you insert text from a file in real time with ffmpeg streaming?)。问题是input.txt中列出的音频文件基本上都被当作单一输入,失去了“个性”。所以问题变成了时间问题:你怎么知道什么时候更新标题? -
因此,如果没有办法使用音频文件的元数据作为文本的输入,这将成为一项非常复杂的任务。我可以假设的是,如果我们在
input.txt中有名为 file1.m4a, file2.m4a 的文件,那么我们需要有与 file1.txt 等文件名对应的单独文本文件, file2.txt 包含文本并从中取出文本。然后可能每次新歌曲开始时,我们应该确定其文件名持续时间或保留一个单独的文件(-s),其中包含有关所有曲目持续时间的信息。但这似乎不是一个简单的解决方案 -
基本上这个 youtube 频道是我想要实现的 lil-peep radio 我意识到他们可以使用完全不同的方法,例如使用 OBS 的流、Streamlabs 覆盖、一些音频播放器作为音频输入。但我认为 ffmpeg 是一种更轻量级且硬件消耗更少的解决方案
标签: audio video ffmpeg stream broadcast