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

为什么这两个ffmpeg文件不同(管道与文件输出)?,ffmpeg,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管道:1>audio_管道.aiff 我得到一个audio\u pip

我有一个源声音
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管道:1>audio_管道.aiff

我得到一个
audio\u pipe.aiff
文件,该文件无法播放,与原始
audio.aiff
文件不同,如下所示:

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

我希望这两个文件都是相同的,并且无法找出它们的不同之处,但最重要的是,为什么一个文件可以播放而另一个文件不能播放?

通过对这两个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
管道输送

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
可以通过使用
--忽略块大小
等选项来正确读取文件,从而解决这些格式错误的头文件,但我可能建议尽可能避免在媒体文件转换期间使用管道