FFMPEG剪切和连接MP3而不重新编码

3

你好,

我想知道是否可以使用ffmpeg将一个mp3文件的一部分与另一个文件“连接”起来,而不需要重新编码。我需要在音频mp3文件前添加静音以确保其长度为60秒。

例如,如果我的音频文件a.mp3长度为40秒,则需要在不重新编码的情况下添加20秒的静音。

我的想法是创建一个60秒长的静音mp3文件(silence.mp3),采样率和比特率与我的音频文件相同(44100和40kbps)。然后,我需要适当地“修剪”此文件并将其与音频文件(a.mp3)合并/连接。

我有一个Linux脚本计算所需的秒数进行前置操作,并尝试使用以下filter_complex表达式:

ffmpeg -i silence.mp3 -i a.mp3 -filter_complex "[1]adelay=20000[b];[0][b]amix=2" out.mp3

这个方法可以实现,但是由于需要重新编码,处理时间较长。我正在寻找一种无需重新编码的解决方案,可以将正确大小的 silence.mp3 部分直接拼接到 a.mp3 中。命令需要包含一个参数,即必须从整个 silence.mp3 文件中使用多长时间的静音。欢迎提供任何建议。
1个回答

2

您的要求是不重新编码,但这正是您的方法所做的。

假设您已经准备好所需时长的无声MP3。

创建一个名为list.txt的文本文件。

file silence.mp3
outpoint 20
file main.mp3

并加入

ffmpeg -f concat -i list.txt -c copy merged.mp3

我假设 silence.mp3 的属性与主音频文件相匹配,包括通道数和采样率。

谢谢,是的,我找到的唯一可行的方法需要重新编码,所以它并不适用,如果这一点不清楚,我向你道歉。问题是我没有所需长度的静音文件。我有一个总长度的静音文件,必须在处理过程中进行修剪。 - QuickPrototype
似乎工作正常,但我的两个MP3输入文件是CBR格式,但由于某种原因,输出被MediaInfo识别为VBR格式。 - QuickPrototype
在这里进行了测试,得到的是CBR。展示所有3个文件的ffprobe读取结果 - silence、main和output。 - Gyan
outpoint 20 是什么意思? - albertopasqualetto
读取 silence.mp3 的前 20 秒静音。 - Gyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接