为什么这两个ffmpeg文件不同(管道与文件输出)?

时间:2017-11-04 05:47:18

标签: ffmpeg

我有源声音audio.mp3,我想将其转换为audio.aiff。 当我做的时候

ffmpeg -i audio.mp3 -acodec pcm_s16le -ac 1 -ar 44100 -vn audio.aiff

我输出的文件tim_tum.aiff完全符合我的预期,可以播放。但是,我发现当我做的时候

ffmpeg -i audio.mp3 -acodec pcm_s16le -ac 1 -ar 44100 -vn -f aiff pipe:1 > audio_pipe.aiff

我收到一个audio_pipe.aiff文件,该文件无法播放,与原始audio.aiff文件不同,如

所示
$ diff audio.aiff audio_pipe.aiff
Binary files audio.aiff and audio_pipe.aiff differ

我希望两个文件都是相同的,并且无法弄清楚它们为什么会以不同的方式出现,但最重要的是,为什么一个文件可以播放而另一个文件不可播放?

1 个答案:

答案 0 :(得分:2)

通过对这两个AIFF编码文件的标题进行比较,您可以发现它们在第一行的3-4列不同

xxd audio.aiff | head

没有管道

00000000: 464f 524d 0199 9040 4149 4643 4656 4552  FORM...@AIFCFVER

<强>管道

00000000: 464f 524d 0000 0000 4149 4643 4656 4552  FORM....AIFCFVER

根据AIFF的文件规范,此位置的数据应为ckDataSize,它指定块的数据部分的大小。由于管道版本的值为零,我最好的猜测是通过使用管道,ffmpeg无法事先正确地确定输出流的数据大小,因此它留空,使编码文件有些格式不正确。

flac等几个工具可以通过使用--ignore-chunk-sizes等选项来解决这些格式错误的标头,无论如何都能正确读取文件,但我建议尽可能避免在媒体文件转换过程中使用管道。