为了节省时间,我想在多台计算机上对大型视频文件进行分段和转码。
我使用ffmpeg转码大视频文件的片段:
ffmpeg -i large_movie.mp4 -ss 00:00:00 -t 00:01:00 -acodec libfaac seg0.flv
ffmpeg -i large_movie.mp4 -ss 00:01:00 -t 00:01:00 -acodec libfaac seg1.flv
...
并将这些片段连接起来:
ffmpeg -i concat.conf -vcodec copy -acodec copy result.flv
concat.conf 的内容:
ffsconcat version 1.0
file seg0.flv
file seg1.flv
...
现在我们得到一个结果FLV文件result.flv内容所有段。但是当我播放这个文件时,我发现片段边界音频可能会暂时中断!我确信这些段紧密相关,时间戳是正确的。
当我将段文件中的AAC样本解码为波形格式,并用CoolEdit打开波形时,我发现在文件的前端和末尾,音频样本的值非常小(静音?)!在文件的前面,有大约21毫秒的“静音”样本。在文件的最后,大约有3毫秒的“静音”样本。
静音样本是否导致暂时中断?如何顺利连接包含AAC的媒体文件?
经过进一步测试后,我发现如果将波形文件分割成小波形文件,然后使用faac将这个小波形文件编码为小型aac文件:
faac -P -R 48000 -B 16 -C 2 -X -o 1.aac 1.wav
faac -P -R 48000 -B 16 -C 2 -X -o 2.aac 2.wav
faac -P -R 48000 -B 16 -C 2 -X -o 3.aac 3.wav
faac -P -R 48000 -B 16 -C 2 -X -o 4.aac 4.wav
faac -P -R 48000 -B 16 -C 2 -X -o 5.aac 5.wav
控制台输出如下:
[hugeice@fedora19 trans]$ faac -P -R 48000 -B 16 -C 2 -X -o 5.aac 5.wav
Freeware Advanced Audio Coder
FAAC 1.28
Quantization quality: 100
Bandwidth: 16000 Hz
Object type: Low Complexity(MPEG-2) + M/S
Container format: Transport Stream (ADTS)
Encoding 5.wav to 5.aac
frame | bitrate | elapsed/estim | play/CPU | ETA
并将这个小的aac文件连接到一个大的aac文件使用:
cat 1.aac 2.aac 3.aac 4.aac 5.aac > big.aac
现在,如果你玩big.aac,那么段边界就会出现一个神奇的中断!
问题在于如何平滑地编码和连接aac文件?