【问题标题】:insert audio into another audio file (eg a censor bleep)将音频插入另一个音频文件(例如检查器哔哔声)
【发布时间】:2017-12-28 18:04:03
【问题描述】:

我需要使用 linux 和/或 php 在另一个音频文件中插入一个短哔声(类似于审查哔声)。

我认为应该有某种方法可以使用 ffmpeg (与 -t、concat、map、async、adelay、itsoffset 的某种组合?)或 avconvmkvmerge - 但没有t 发现有人这样做。也许我需要以某种方式分两个阶段完成?

例如,如果我有一个 60 秒的 mp3,并且想在 2 个地方发出 2 秒的哔哔声,那么所需的结果将是:

0:00-0:15  from original
0:15-0:17  beep (overwrites the 2 secs of original)
0:17-0:40  from original
0:40-0:42  beep
0:42-0:60  from original

我有一个 2 秒的 beep.mp3,但可以使用其他内容,例如 -i "sine=frequency=1000:duration=2"

【问题讨论】:

  • 谢谢@pepperjack - 我刚刚重读stackoverflow.com/help/on-topic 进行检查,我认为这是正确的地方。一个很好的线索是上面的 ffmpeg 标签有 14k 个问题 :-) (超级用户对同一个标签有 4k 个问题 - 也许知道答案的人只会在那里看到它,但我认为最好先在这里尝试)。

标签: audio ffmpeg avconv


【解决方案1】:

您可以使用 concat demuxer。

创建一个文本文件,例如

file main.wav
inpoint 0
outpoint 15
file beep.wav
file main.wav
inpoint 17
outpoint 40
file beep.wav
file main.wav
inpoint 40
outpoint 42

然后

ffmpeg -f concat -i list.txt out.mp3

将哔声文件转换为与主音频具有相同的采样率和通道数。

【讨论】:

  • 太棒了!为你+1。我能够concat 文件,但我的入点和出点有问题。我在这里发布了一个问题:stackoverflow.com/questions/51305770/…我希望你能看看并帮助我解决这个问题。再次感谢。
【解决方案2】:

首先,您需要让 beep.mp3 时间等于 60 秒或比您的 mp3 文件时间短一点。

然后,可以使用ffmpeg代码-ss <start_time> -t <duration> -i <your_file>.mp3

ffmpeg -ss 00:00:00 -t 15 -i ./original.mp3 -ss 00:15:00 -t 2 -i ./beep.mp3 -ss 00:17:00 -t 23 -i ./original.mp3 -ss 00:40:00 -t 2 -i ./beep.mp3 -ss 00:42:00 -i ./original.mp3 -filter_complex '[0:0][1:0] concat=n=2:v=0:a=1[out]' -map '[out]' ./output.mp3

最后你会得到你需要的 output.mp3 文件。

【讨论】:

  • 您在某些输入之前缺少-iffmpeg 不会自动连接或缩混这些段,因此输出将只包含最长的段。您需要使用过滤器来执行此操作,例如 concat 过滤器。
  • 哦!我错过了添加过滤器复杂和-i。谢谢洛根。我已经编辑了上面的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多