Perl音频文件持续时间

Perl音频文件持续时间,perl,audio,metadata,Perl,Audio,Metadata,我正在写一个音频播放列表生成器。但是,我希望它不仅在一个严格的行中输出名称和数字,而且还输出音频文件的持续时间。如果没有这样的黑客,我是否可以这样做: print "#: $number\tDuration: "; system("mp3info -p \"%m:%s\" \"$track\""); print "\tNAME: $name"; 如果它很重要,我的perl版本是v5.16.3理想情况下,如果您希望根据文件内容而不是扩展名来确定文件类型,file::type对此很方便。MP3::

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

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');

您看过MP3::Info模块了吗@TrentonTrama恐怕它只适用于mp3,不适用于其他音频格式。更准确地说,我只需要mp3和flac。如果您只需要这两种格式,您可以使用mp3::Info和Audio::flac::Decoder或Audio::flac::Header的组合。解码器有一个返回总秒数的
time\u total
函数。Header返回包含文件时间段的哈希。是否可以使用某种通用方法,而不是使用不同方法包含不同的模块?您可以使用库,例如libavcodec—ffmpeg背后的引擎。它知道不同的文件类型,但核心引擎是c。我可以做你想做的。一旦我克服了安装FFmpeg模块的错误,我就会回答。在我的例子中,我使用了这个答案:with
my$duration=`FFmpeg-I\'$track\'2>&1 | grep duration | awk'{print\$2;}| tr d,`