使用ffmpeg在音频中添加随机背景音并保持原长度和格式

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

ffmpeg 在音频文件中添加随机的背景音,同时保持原音频的长度,编码格式不变 。

回答:

要使用 ffmpeg 在音频文件中添加随机的背景音,同时保持原音频的长度和编码格式不变,你可以按照以下步骤操作:

  1. 准备背景音频文件:确保你有一个或多个背景音频文件,可以随机选择其中一个。

  2. 使用 ffmpeg 命令:你可以编写一个脚本来随机选择背景音频文件,并使用 ffmpeg 将其与原音频文件混合。

以下是一个示例脚本,假设你有一个名为 input.mp3 的原音频文件和一个包含背景音频文件的目录 backgrounds/

#!/bin/bash

# 原音频文件
input_audio="input.mp3"

# 背景音频文件目录
background_dir="backgrounds/"

# 随机选择一个背景音频文件
background_audio=$(ls $background_dir | shuf -n 1)

# 获取原音频文件的长度
duration=$(ffmpeg -i $input_audio 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,//)

# 混合音频文件
ffmpeg -i $input_audio -i "$background_dir/$background_audio" -filter_complex "[1]adelay=delays=0:all=1,apad[A];[0][A]amix=inputs=2:duration=first:dropout_transition=3" -t $duration -c:a copy output.mp3

解释

  1. 随机选择背景音频文件

    • ls $background_dir | shuf -n 1:列出背景音频文件目录中的所有文件,并随机选择一个。
  2. 获取原音频文件的长度

    • ffmpeg -i $input_audio 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,//:使用 ffmpeg 获取原音频文件的时长。
  3. 混合音频文件

    • ffmpeg -i $input_audio -i "$background_dir/$background_audio" -filter_complex "[1]adelay=delays=0:all=1,apad[A];[0][A]amix=inputs=2:duration=first:dropout_transition=3" -t $duration -c:a copy output.mp3
      • adelay=delays=0:all=1:确保背景音频从头开始播放。
      • apad:填充背景音频以确保其长��与原音频一致。
      • amix=inputs=2:duration=first:dropout_transition=3:将两个音频混合,使用原音频的长度。
      • -t $duration:设置输出音频的长度与原音频一致。
      • -c:a copy:保持原音频的编码格式不变。

运行这个脚本将生成一个名为 output.mp3 的文件,其中包含了原音频和