如何让 FFmpeg 在单循环静音视频中自动注入 mp3 音轨?

Posted

技术标签:

【中文标题】如何让 FFmpeg 在单循环静音视频中自动注入 mp3 音轨?【英文标题】:How to make FFmpeg automatically inject mp3 audio tracks in the single cycled muted video? 【发布时间】:2021-03-16 17:09:06 【问题描述】:

大家都在这里!所以基本上这就是我想要实现的目标:

我有一个大约 3 分钟长的静音视频。 我有一个 mp3 格式的音轨列表(一个文件夹中有 40 首歌曲,每首时长为 2 到 6 分钟)

我希望此视频自动循环播放,从播放列表中获取歌曲并将它们一一注入到视频中。每次一首歌曲完成时,列表中的下一首歌曲应该立即开始播放。视频继续播放,不关心曲目的持续时间。

我认为这是在 youtube 上以 24/7 模式播放带有视频背景的广播的第一步,能够将其他曲目添加到播放列表而无需停止翻译。

我的问题是我是 FFmpeg 的新手,如果有任何关于开始调查哪个 FFMpeg 主题以实现我的目标的建议,我将不胜感激

【问题讨论】:

【参考方案1】:

使用连接解复用器

您可以对concat demuxer 的播放列表进行实时更新,但每个音频文件必须具有相同的属性、相同的流数和相同的格式。

    创建 input.txt 包含:

    ffconcat version 1.0
    file 'audio1.mp3'
    file 'audio2.mp3'
    file 'audio3.mp3'
    file 'audio40.mp3'
    

    所有文件名都必须是“安全的”,否则将失败并显示Unsafe file name。文件名中基本上没有特殊字符,只使用绝对路径。请参阅concat demuxer 了解更多信息。

    运行 ffmpeg 以流式传输到 YouTube:

    ffmpeg -re -framerate 10 -loop 1 -i image.jpg -re -f concat -i input.txt -map 0:v -map 1:a -c:v libx264 -tune stillimage -vf format=yuv420p -c:a aac -g 20 -b:v 2000k -maxrate 2000k -bufsize 8000k -f flv rtmp://youtube
    

    当您准备好添加新歌曲时,请让temp.txt 包含:

    ffconcat version 1.0
    file 'audio41.mp3'
    file 'audio42.mp3'
    file 'audio43.mp3'
    

    原子地替换input.txt

    mv temp.txt input.txt
    

有关更多信息,请参阅FFmpeg Wiki: Concatenate。

如果你的音频文件不一样

input.txt 中列出的文件必须都相同:

格式(AAC、MP3 等,但不能混合) 采样率(48000、44100 等) 通道数(单声道、立体声等)。

如果它们有所不同,那么您必须在将它们添加到播放列表之前对其进行预处理。 Bash 示例使每个音频符合立体声 (-ac 2) 和 44100 采样率 (-ar 44100) 并在 M4A 容器中保存为 AAC 格式:

mkdir conformed
for f in *.mp3; do ffmpeg -i "$f" -map 0:a -ac 2 -ar 44100 -c:a aac "conformed/$f%.*.m4a"; done

建议输出到 AAC 以流式传输到 YouTube。

如果您这样做,则可以避免将 ffmpeg 命令中的音频重新编码到 YouTube。只需在第 2 步中将 -c:a aac 更改为 -c:a copy运行 ffmpeg 以流式传输到 YouTube

【讨论】:

感谢您的详细解释!我可以开始尝试处理它。顺便说一句,你说“文件不一样”是什么意思?不同的持续时间、频率、编解码器等?还有一种方法可以从音频文件元数据/标签中额外获取艺术家/歌曲的名称,并在适当的歌曲开始播放时将其作为文本放在视频上? 1) 必须是相同的格式(AAC、MP3 等,但不能混合)、相同的采样率(48000、44100 等)、相同数量的通道(单声道、立体声等)。持续时间可以不同。 2)添加文本是一个完全不同的主题,应该作为一个新问题提出。 今天我已经尝试了你建议的一切,它似乎工作。此外,我需要在广播质量和可用互联网带宽之间找到平衡,以及如何在不中断翻译的情况下不断添加新曲目并以随机顺序播放它们。非常感谢您的帮助!我还会向您提出一个关于视频文本的单独问题。快等着吧。。 这里是question regarding adding a text over the video

以上是关于如何让 FFmpeg 在单循环静音视频中自动注入 mp3 音轨?的主要内容,如果未能解决你的问题,请参考以下文章

在 ffmpeg 中添加静音音频

跨浏览器视频自动播放循环

即使手机处于静音或振动状态,如何让视频播放声音? [复制]

面临问题让用户选择取消静音自动播放 vimeo iframe 嵌入

没有静音的 HTML 视频自动播放(或者 youtube 是如何做到的)?

Chrome中的静音自动播放仍然无法正常工作