2017-11-04 146 views
2

我有一个源声音audio.mp3,我想将其转换为audio.aiff。 当我做为什么这两个ffmpeg文件不同(管道与文件输出)?

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 

我希望这两个证明文件是相同的,不知道为什么他们会出现不同的,但最重要的是,为什么一个文件可以播放,而另一个不是?

回答

2

通过使这两个AIFF编码的文件的头一个对比,你可以观察到,他们在3-4列在第一行

xxd audio.aiff | head 

没有管道

00000000: 464f 524d 0199 9040 4149 4643 4656 4552 [email protected] 
不同

管道

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

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

flac有几个工具可以解决这些错误头部使用的选项,如--ignore-chunk-sizes正确读取文件,而不管,但是我可能会建议,以避免在媒体文件转换使用管道只要有可能。

相关问题