Answers:
使用ffmpeg,我无法知道将长度作为可在脚本上使用的变量。但是mp3info确实如此。
mp3info -p "%S" sample.mp3 // total time in seconds
\n
打印新行也。> mp3info -p "%S\n" sample.mp3
//总时间(秒)
ffmpeg
如果你没有给它任何其他参数,它将打印它所知道的关于该文件的所有内容。用于grep
除去“持续时间”以外的所有内容:
$ ffmpeg -i foo.mp3 2>&1 | grep Duration
Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s
你也可以用mplayer
。线“ID_LENGTH =”的Grep:
$ mplayer -ao null -identify -frames 0 foo.mp3 2>&1 | grep ID_LENGTH
ID_LENGTH=3740.00
TOTLENGTH=0; for f in *.mp3; do LENGTH=$(mplayer -ao null -identify -frames 0 "$f" 2>&1 | awk -F= '/ID_LENGTH/ {print $2}' | awk -F. '{print $1}'); TOTLENGTH=$(($TOTLENGTH + $LENGTH)); done; echo $TOTLENGTH
方式在几秒钟内打印所有文件中的音频总长度。它可以更有效地完成,但由于我把它写成一次性,它足以满足我的需求。(第二个awk调用剥离小数,因此结果不是100%准确,但再次,足以满足我的需要。)
Estimating duration from bitrate, this may be inaccurate
。我认为这个答案仅适用于Constant Bitrate MP3。
有趣的是,EXIFTool应用程序将MP3持续时间作为最后一行!
$ exiftool somefile.mp3 ExifTool版本号:7.98 文件名:somefile.mp3 目录 : 。 文件大小:49 MB 文件修改日期/时间:2009:09:10 11:04:54 + 05:30 文件类型:MP3 MIME类型:audio / mpeg MPEG音频版:2.5 音频层:3 音频比特率:64000 采样率:8000 频道模式:单频道 MS立体声:关闭 强度立体声:关闭 版权标志:错误 原创媒体:真的 重点:没有 ID3尺寸:26 类型:蓝调 持续时间:1:47:46(约)
使用的解决方案ffmpeg
让我略显脆弱,因为它们解析的输出并不是设计为接口。这说他们可能会继续工作几年,无论如何。
ffmpeg
附带一个工具ffprobe
来获取有关音频文件(许多格式,包括mp3)的信息,并可以生成机器可读输出。以下命令获取歌曲持续时间。
ffprobe -show_streams -print_format json song.mp3 -v fatal | jq '.streams[0].duration'
ffprobe -show_entries stream=duration -of compact=p=0:nk=1 -v fatal song.mp3
我个人使用Mplayer来提取信息,主要是因为我已经安装了它,并且无需担心不必要地安装新软件。这样做的好处是它不仅限于mp3文件,而且应该与Mplayer可以处理的任何媒体文件一起使用。以下单行将以秒为单位返回轨道长度。
mplayer -identify -ao null -vo null -frames 0 Filename.mp3 | grep ^ID_LENGTH= | cut -d = -f 2
这是我上面简单的使用参考。
mp3_full_path="$HOME/i/want/the/length/of/file.mp3"
ffmpeg -i "$mp3_full_path" 2>&1 | grep Duration | awk -F ' ' '{print $2}' | awk -F '[,|.]' '{print $1}'
10:47:15
我将该值发送到变量mp3_full_length
mp3_full_path="$HOME/i/want/the/length/of/file.mp3"
read -r mp3_full_length <<< `ffmpeg -i "$mp3_full_path" 2>&1 | grep Duration | awk -F ' ' '{print $2}' | awk -F '[,|.]' '{print $1}'`
# I can use this variable for my own purpose!
echo $mp3_full_length
10:47:15
谢谢上面的人!我用你的想法和知识谢谢你的阅读,祝你有愉快的一天!;)