我正在尝试使用avprobe
查找MP3文件的持续时间。这有效(虽然有一些奇怪的警告):
$ 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读取时的持续时间?
答案 0 :(得分:0)
据我所知,avprobe使用两个信息来计算mp3文件的持续时间:
当直接与文件一起使用时,avprobe可以从文件统计信息中获取文件大小(请参阅stat "file.mp3"
命令)。
当与管道输入一起使用时,avprobe无法检测文件大小,因为管道可以是任何大小/长度。如果mp3文件没有持续时间元数据,avprobe无意计算持续时间估计值。