作为输入我得到一个mp3文件(input.mp3),然后我需要将它分成两个独立的部分(完成)并在这些部分之间插入另一个mp3(second.mp3)。
问题:我尝试过使用每一个……
使用 修剪 , asetpts ,和 CONCAT 过滤器:
ffmpeg -i input.mp3 -i second.mp3 -filter_complex "[0:a]atrim=end=10,asetpts=N/SR/TB[begin];[0:a]atrim=start=10,asetpts=N/SR/TB[end];[begin][1:a][end]concat=n=3:v=0:a=1[a]" -map "[a]" output
注意:所有相应的流必须在所有段中具有相同的参数;过滤系统将自动选择音频流的通用样本格式,采样率和通道布局。这些常用参数将根据输入参数而有所不同,因此请添加 aformat 过滤(或等效),如果你想要一致的结果:
ffmpeg -i input.mp3 -i second.mp3 -filter_complex "[0:a]atrim=end=10,aformat=sample_rates=44100:channel_layouts=stereo,asetpts=N/SR/TB[begin];[1:a]aformat=sample_rates=44100:channel_layouts=stereo[middle];[0:a]atrim=start=10,aformat=sample_rates=44100:channel_layouts=stereo,asetpts=N/SR/TB[end];[begin][middle][end]concat=n=3:v=0:a=1[a]" -map "[a]" output
如何连接两个非常不同的mp3文件(diff比特率,通道,采样率,bitdeph)?
让我们从每个组件开始......
比特率
这个没关系。 MP3流可以(并且可以!)改变比特率中流。只要你加入一个框架标题,你就没事了。
一位深度
MP3中不存在采样位深度的概念。您可以24位捕获,编码为MP3,解码器将解码为16位。 (或者,使用一些命令行开关,反之亦然!)这不是问题,因为位深度不适用。
抽样率
这通常是个问题。大多数玩家并不认为他们会在中途改变输出采样率。大多数玩家不会尝试重新采样以坚持他们已经输出的速率。我对你在采样率变化方面遇到麻烦并不感到惊讶。
渠道
这类似于采样率问题,因为它需要更改输出设备的配置。即使玩家支持它,它也不会是无缝的。 (除非你从立体声变为单声道,单声道可以很容易地上升到立体声。)
这实际上提出了另一个你没有问过的问题......时机。 MP3适用于相对较大的帧(通常为576个样本),这将成为您可以拼接的分辨率。不好。此外,轨道的开始通常有一两帧初始化。
第三个问题是比特储层。这是来自一帧的内容存储在可能具有额外空间的不同帧中的地方。
在一天结束时,您将不得不将所有内容解码为常规PCM样本,进行拼接并重新编码为MP3。您还必须将所有内容重新采样到通用时钟速率,并混合到特定的通道数。幸运的是,一旦解码到PCM,这都是微不足道的标准。一旦您的输入流兼容,您就可以在PCM帧上任意拼接,这是最精细的。