如何用 FFmpeg 合并两个 M4A 文件

http://teahour.fm 是一个面向互联网开发人员的 Podcast 音频类节目,因为我们都是做技术的,所以我们录制节目的时候采用的是一整套免费的解决方案,具体见如何使用GarageBand和Skype录制Podcast

剪辑2013年最后一期Teahour podcast的时候,我遇到一个非常奇怪的问题,当导出剪辑好的音频时,GarageBand出现下面这个报错信息:

Screen Shot 2013-12-31 at 12.30.06 AM.png

在网上Google了一圈没有找到解决办法,看到某个论坛里面说这是GarageBand的一个Bug,本期节目只有一小时四十分钟,我曾经录制过超过两小时的节目都没有遇到过这个问题,后来经过摸索找到一个办法。首先将音频文件分割成两个部分分别导出,然后借助工具将两个导出的文件合并即可。

首先安装FFmpeg,在Mac下用Homebrew安装非常简单:

brew install ffmpeg  

然后用FFmpeg的Concat demuxer的方式合并,建立一个叫做mylist.txt的文件

file '/Users/Daniel/Desktop/teahour_1.m4a'  
file '/Users/Daniel/Desktop/teahour_2.m4a'  

然后执行下面的命令就搞定了。

ffmpeg -f concat -i mylist.txt -c copy output.m4a  
ffmpeg version 1.2.4 Copyright (c) 2000-2013 the FFmpeg developers  
  built on Dec 31 2013 00:45:03 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.4 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    54. 63.104 / 54. 63.104
  libavdevice    54.  3.103 / 54.  3.103
  libavfilter     3. 42.103 /  3. 42.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[concat @ 0x7feda9004a00] Estimating duration from bitrate, this may be inaccurate
Input #0, concat, from 'mylist.txt':  
  Duration: 00:00:00.01, start: 0.000000, bitrate: 64 kb/s
    Stream #0:0: Audio: aac (mp4a / 0x6134706D), 32000 Hz, stereo, fltp, 63 kb/s
Output #0, ipod, to 'output.m4a':  
  Metadata:
    encoder         : Lavf54.63.104
    Stream #0:0: Audio: aac (mp4a / 0x6134706D), 32000 Hz, stereo, 63 kb/s
Stream mapping:  
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help  
size=   48984kB time=01:42:53.31 bitrate=  65.0kbits/s  
video:0kB audio:48229kB subtitle:0 global headers:0kB muxing overhead 1.565309%