bash - ffmpeg 将音频混合代码组合成复杂的连接脚本

标签 bash ffmpeg

我目前有 2 个不同的 ffmpeg 脚本,我想组合它们。我没有很好的 ffmpeg 经验,这些代码大多是 googel 代码,所以请耐心等待

第一个代码是连接 3 个视频:

ffmpeg -y -i "$vid1" -i "$fp" -i "$vid1" -filter_complex \
"[0:v]scale=$cResolution:force_original_aspect_ratio=decrease,pad=$cResolution:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v0]; \
 [1:v]scale=$cResolution:force_original_aspect_ratio=decrease,pad=$cResolution:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v1]; \
 [2:v]scale=$cResolution:force_original_aspect_ratio=decrease,pad=$cResolution:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v2]; \
 [0:a]aformat=sample_rates=48000:channel_layouts=stereo[a0]; \
 [1:a]aformat=sample_rates=48000:channel_layouts=stereo[a1]; \
 [2:a]aformat=sample_rates=48000:channel_layouts=stereo[a2]; \
 [v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[v][a]; \
 [v]drawtext=text='example..':y=h-line_h-$h3:x=w/30*mod(t\,20):enable='gt(mod(t,$dr2),$Introdr_rounded)'[v]; \
 [v]drawtext=text='example..':y=h-line_h-$hcentral:x=w/20*mod(t\,100):enable='gt(mod(t,$dr2),$Introdr_rounded)'[v]; \
 [v]drawtext=text='example..':y=h-line_h-23:x=w/30*mod(t\,20):enable='gt(mod(t,$dr2),$Introdr_rounded)'[v]" \
 -map "[v]" -map "[a]" -c:v libx264 -crf 22 -preset veryfast -c:a aac -movflags +faststart "$fp_dest"

第二个代码是在无限循环中将背景 mp3 覆盖到从上面创建的视频。重要的是要知道此代码确实与视频的音频重叠并且不会替换它。将来我会降低 mp3 文件的音量以用作背景音乐
ffmpeg -y -i "$fp_dest" -filter_complex "amovie=$audio:loop=0,asetpts=N/SR/TB[aud];[0:a][aud]amix[a]" -map 0:v -map '[a]' -c:v copy -c:a aac -b:a 256k -shortest ./test.mp4


所以目前我有 2 个步骤,我想将它们合并为 1 个步骤。你能帮我把第二个代码包含在第一个代码中而不改变代码的任何逻辑吗?

最佳答案

使用 amix 混合音乐和连接的音频。 stream_loop应用于音乐以循环播放。

ffmpeg -y -i "$vid1" -i "$fp" -i "$vid1" -stream_loop -1 -i "$audio" -filter_complex \
"[0:v]scale=$cResolution:force_original_aspect_ratio=decrease,pad=$cResolution:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v0]; \
 [1:v]scale=$cResolution:force_original_aspect_ratio=decrease,pad=$cResolution:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v1]; \
 [2:v]scale=$cResolution:force_original_aspect_ratio=decrease,pad=$cResolution:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v2]; \
 [0:a]aformat=sample_rates=48000:channel_layouts=stereo[a0]; \
 [1:a]aformat=sample_rates=48000:channel_layouts=stereo[a1]; \
 [2:a]aformat=sample_rates=48000:channel_layouts=stereo[a2]; \
 [v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[v][a]; \
 [a][3]amix=duration=first[a]; \
 [v]drawtext=text='example..':y=h-line_h-$h3:x=w/30*mod(t\,20):enable='gt(mod(t,$dr2),$Introdr_rounded)'[v]; \
 [v]drawtext=text='example..':y=h-line_h-$hcentral:x=w/20*mod(t\,100):enable='gt(mod(t,$dr2),$Introdr_rounded)'[v]; \
 [v]drawtext=text='example..':y=h-line_h-23:x=w/30*mod(t\,20):enable='gt(mod(t,$dr2),$Introdr_rounded)'[v]" \
 -map "[v]" -map "[a]" -c:v libx264 -crf 22 -preset veryfast -c:a aac -b:a 256k -movflags +faststart "$fp_dest"

关于bash - ffmpeg 将音频混合代码组合成复杂的连接脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61811125/

相关文章:

bash - 如何在 bash 中进行二进制加法

android - 如何在 ffmpeg 命令的时间戳日期中添加日期后缀 [st,nd,rd,th]?

delphi - 使用 shellExecute 从 delphi 执行 ffmpeg.exe

c# - FFMPeg Windows C# H264

php - 我想知道如何在执行 ffmpeg 命令时获取成功或失败消息

arrays - 循环遍历数组,将新值赋给数组中的变量

bash - grep 从特定文本 block 中提取字符串

bash - 如果只有一个实例正在运行,是否继续执行脚本?

从终端在 mac 中找不到 mysql 命令

c++ - ffmpeg AVFrame 到 opencv Mat 转换