在 Linux / FreeBSD 中获取 MP3 长度

在 Linux / FreeBSD 中获取 MP3 长度

我有一堆长度各异的 mp3 文件。我想将其长度缩短至 50%-60%。也就是说,从 1 分钟缩短到 30 秒。使用 ffmpeg 应该很容易。但是,我不知道如何确定其原始长度作为使用 ffmpeg 进行处理的基础。

有人有想法吗?

答案1

使用 ffmpeg,我不知道如何将长度作为可在脚本中使用的变量。但是mp3信息做。

mp3info -p "%S" sample.mp3   // total time in seconds

答案2

ffmpeg如果您不提供任何其他参数,它将打印有关该文件的所有内容。使用以下命令grep删除除“持续时间”之外的所有内容:

$ ffmpeg -i foo.mp3 2>&1 | grep Duration
  Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s

您还可以使用mplayer. Grep 查找行“ID_LENGTH=”:

$ mplayer -ao null -identify -frames 0 foo.mp3 2>&1 | grep ID_LENGTH
ID_LENGTH=3740.00

答案3

有趣的是EXIF工具应用程序将 MP3 持续时间作为最后一行!

$ exiftool 一些文件.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 立体声:关闭
强度立体声:关闭
版权标记:False
原始媒体:真实
重点:无
ID3 大小:26
类型 : 布鲁斯
时长:1:47:46(大约)

答案4

我觉得这些解决方案ffmpeg有点脆弱,因为它们解析的输出并不是完全设计成界面的。但无论如何,它们可能还会继续工作几年。

ffmpeg附带一个工具ffprobe来获取有关音频文件(许多格式,包括 mp3)的信息,并可以生成机器可读的输出。以下命令获取歌曲时长。

ffprobe -show_streams -print_format json song.mp3 -v fatal | jq '.streams[0].duration'

相关内容