FFmpeg - 用间距合并音频文件

dan*_*ndi 4 audio video ffmpeg

请看图:

在此处输入图片说明

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

现在,让我们想想我找到了我要找的东西。我给这个命令一个伪名称"-start_at",它在给定的时间将剪辑插入到音频流中。使用这个伪命令,我将设置每个剪辑应该开始的时间。其余的工作应该由 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
Run Code Online (Sandbox Code Playgroud)

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

那么,是否有 ffmpeg 命令/过滤器?还是 ffmpeg gui/脚本等?

Cha*_*ath 5

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

aevalsrc=0:d=5
Run Code Online (Sandbox Code Playgroud)

所以下面的命令对你有用。

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
Run Code Online (Sandbox Code Playgroud)

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

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

由于amix音频重叠,我在每个输入音频中附加了一个静音音频。您也可以尝试amergeadelay其中的文档本身具有明确的解释。

希望这对你有帮助!

  • 仅供参考:每当尝试通过过滤器处理源内容时,重新编码都是必要的。`-c copy` 尝试 *应该* 导致为输出流 0:0 请求的 `Streamcopy,它是从一个复杂的过滤器图提供的。过滤和流复制不能一起使用。`消息。要保持源音频质量,请将您的音频输出到无损编解码器,然后将其通过管道传输到合适的编码器,例如:`-map [aout] -c:a pcm_s16le -ac 2 -ar 44100 - | ffmpeg -i - -c:a libmp3lame -b:a 320k ConcatenatedAudio.mp3` (2认同)