m4a 文件的串联太长或太短

m4a 文件的串联太长或太短

我想连接两个m4a文件,一个文件长度为 20:49,另一个文件长度为 10:23。以下这一页,第一个选项是:

ffmpeg -i 'concat:file1.m4a|file2.m4a' -c copy output.m4a

它只处理第一个文件,例如标准输出显示:

size=   10921kB time=00:20:48.69

输出文件与第一个文件一样为20分钟。

第二种选择是:

ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.m4a

哪里mylist.txt

file 'file1.m4a'
file 'file2.m4a'

此命令使用这两个文件,如标准输出所示:

size=   16339kB time=00:33:56.73

但时长不对,应该是 31:42。此外,从操作系统 (macOS) 播放时,输出文件的时长为 32:06。

如何让 FFMPEG 按照其持续时间连接两个文件?

答案1

文件的连接有时不是很直观 - 这是因为许多格式包含时间戳,可能从零开始也可能不从零开始,是连续的等等,这取决于该文件的创建和编辑历史。

这就是为什么在广播世界格式规则中,只能连接:MPEGTS(需要关注连续性计数器)或RAW(原始 PCM 或原始 h.264)。

如果可以选择重新编码,我建议你将原始文件转换为原始 PCM,如下所示

ffmpeg -i file1.m4a -c:a pcm_s16le -ac 2 -ar 48000 -f s16le file1.pcm
ffmpeg -i file2.m4a -c:a pcm_s16le -ac 2 -ar 48000 -f s16le file2.pcm

这将创建 2 个原始 PCM 文件,-ac 2每个文件有 2 个通道(立体声),采样率为 48KHz(-ar 48000

您现在可以连接这些文件,例如通过cat file2.pcm >> file1.pcm- 这将创建一个没有时间戳的文件的新原始表示,只有普通的音频样本。

要将结果重新编码为 AAC,请按照以下方式操作

ffmpeg -f s16le -ac 2 -ar 48000 -i file1.pcm -c:a aac -b:a 192K -ac 2 output.m4a

让我们详细分析一下:

  • 首先我告诉 ffmpeg 打开一个原始 PCM 格式的文件(有符号的 16 位低端-f s16le),其中包含 2 个音频通道(-ac 2),采样率为 48KHz(-ar 48000)并存储在 file1.pcm 中(与 ffmpeg 一样,参数的顺序很重要)
  • 然后使用 AAC ( -c:a) 和 192Kbit/s ( -ba:a) 带宽重新编码为立体声 ( -ac 2)

相关内容