Perl 音频文件持续时间

Perl Audio file duration

我正在编写一个音频播放列表生成器。但是,我希望它不仅在严格的行中输出名称和编号,而且还音频文件的持续时间。如果没有像这样的黑客,我有什么办法可以做到这一点:

print "#: $number\tDuration: ";
system("mp3info -p \"%m:%s\" \"$track\"");
print "\tNAME: $name";

如果有什么重要的话,我的perl版本是v5.16.3

理想情况下,您希望根据文件内容而不是扩展名来确定文件类型,File::Type 可以派上用场。 MP3::Info 和 Audio::Flac::Header 是写得很好的 perl 模块。

use File::Type;
use MP3::Info;
use Audio::FLAC::Header;

my $duration = -1;
my $ft = File::Type->new()->checktype_filename($track);

$duration = Audio::FLAC::Header
              ->new($track)
              ->tags()
              ->{trackTotalLengthSeconds} 
              if($ft eq 'audio/flac');

$duration = MP3::Info
              ->get_mp3info($track)
              ->{SECS} 
              if($ft eq 'audio/mpeg3');