1

我正在尝试使用avprobe. 这有效(尽管有一些奇怪的警告):

$ avprobe somefile.mp3
...
[mp3 @ 0x657b20] max_analyze_duration reached
[mp3 @ 0x657b20] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'somefile.mp3':
  Duration: 00:03:38.10, start: 0.000000, bitrate: 128 kb/s
    Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s

但是,如果我转身通过 STDIN 传输文件,我会遇到问题:

cat somefile.mp3 | avprobe -
...
[mp3 @ 0x255db20] max_analyze_duration reached
[mp3 @ 0x255db20] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'pipe:':
  Duration: N/A, start: 0.000000, bitrate: 128 kb/s
    Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s

持续时间报告为“N/A”。为什么从 STDIN 读取时无法计算出持续时间?

4

1 回答 1

0

据我所知,avprobe 使用两个信息来计算 mp3 文件的持续时间:

  • MP3 文件比特率。
  • MP3 文件大小。

当直接与文件一起使用时,avprobe 能够从文件统计信息中获取文件大小(参见stat "file.mp3"命令)。

当与管道输入一起使用时,avprobe 无法检测文件大小,因为管道可以是任何大小/长度。如果 mp3 文件没有持续时间元数据,则 avprobe 无法计算持续时间估计值。

于 2014-01-31T21:08:17.683 回答