FFmpeg - 用间距集中音频文件

FFmpeg - 用间距集中音频文件

请看图片:

在此处输入图片描述

每个音频片段具有相同的编解码器/采样率,但持续时间不同,每个空间也不同。片段之间总是有空间,没有重叠。所以没有理由重新编码因为这基本上是一个流复制工作。这很重要,因为我应该保留每个剪辑的原始质量。

现在,假设我找到了我要找的东西。我给这个命令起了个假名“-开始时间”,它会在给定时间将剪辑插入音频流。使用此伪命令,我将设置每个剪辑的开始时间。其余工作应由 ffmpeg 命令/过滤器/脚本等完成。

ffmpeg -start_at 00.00 -i audio1.opus  -start_at 06.30 -i audio2.opus  -start_at 21.15 -i audio3.opus  -start_at 26.35 -i audio4.opus

只是想想 ffmpeg 会自动用无声的声音填补空白。

那么,是否有一个 ffmpeg 命令/过滤器可以实现这个功能?或者一个 ffmpeg gui/脚本等?

答案1

FFmpeg 能够处理这个问题。你需要使用filter_complex使用过滤器链。您可以使用aevalsrc。要创建 5 秒的静音音频,

aevalsrc=0:d=5

因此以下命令将适合您。

ffmpeg -i input_audio_1 -i input_audio_2 -i input_audio_3 -filter_complex "
aevalsrc=0:d=10[s1];
aevalsrc=0:d=15[s2];
aevalsrc=0:d=20[s3];
[s2][1:a]concat=n=2:v=0:a=1[ac1];
[s3][2:a]concat=n=2:v=0:a=1[ac2];
[0:a][s1][ac1][ac2]amix=inputs=4[aout]" -map [aout] output_audio

这里我假设每个音频的长度为 5 秒,并且重新编码是可选的,例如,

-c:a libmp3lame -ac 2 -b:a 128k

作为amix导致音频重叠,我在每个输入音频中添加了一个静音音频。您也可以尝试amergeadelay其中文档本身有清晰的解释。

希望这对你有帮助!

答案2

以下是音频连接示例:

ffmpeg -y -f s16be -i /dev/zero -af "[in]anullsink;amovie=1.wav[a1];amovie=silence.wav[a2];amovie=2.wav[a3];amovie=4.wav[a4];[a1][a2][a3][a4]concat=n=4:v=0:a=1[out]" -shortest -t 12 output.wav

请注意这里有几件你需要知道的事情:

  1. 我从一个干净的输入开始/dev/zero,这很好,但是,可能有更好的方法来做到这一点。
  2. 制作剪辑之前你需要知道剪辑的总时长(t=12
  3. 我预先制作了silence.wav文件。您可以使用过滤器,例如anullsrcnb_samples参见文档) 或者其他,但如果你问我,这确实很痛苦。
  4. -shortest有时,使用这种方法,FFmpeg 不知道何时停止,但是,由于应用了参数,它不会创建空的静音轨道。

相关内容