在 Linux / FreeBSD 中获取 MP3 长度

ari*_*ayu 33 linux mp3 freebsd ffmpeg

我有一堆不同长度的mp3文件。我想把它剪短到 50%-60% 的长度。说,从 1 分钟减少到 30 秒。使用 ffmpeg 应该很简单。但是,我不知道如何确定它的原始长度作为使用 ffmpeg 进行处理的基础。

有人有想法吗?

A D*_*arf 34

使用 ffmpeg,我无法将长度作为可以在脚本上使用的变量。但是mp3info可以。

mp3info -p "%S" sample.mp3   // total time in seconds
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,这仅提供整数形式的长度。因此对于某些用例可能不够准确。 (4认同)
  • 添加“\n”也可以打印新行。 `> mp3info -p "%S\n" Sample.mp3` // 总时间(以秒为单位) (3认同)

qua*_*ote 26

ffmpeg如果你不给它任何其他参数,将打印它知道的关于文件的所有内容。使用grep剥离出来的一切,但“持续时间”:

$ ffmpeg -i foo.mp3 2>&1 | grep Duration
  Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s
Run Code Online (Sandbox Code Playgroud)

您也可以使用mplayer. “ID_LENGTH=”行的 Grep:

$ mplayer -ao null -identify -frames 0 foo.mp3 2>&1 | grep ID_LENGTH
ID_LENGTH=3740.00
Run Code Online (Sandbox Code Playgroud)

  • $ ffmpeg -i foo.mp3 2>&1 | awk '/Duration/ { print substr($2,0,length($2)-1) }' 只是时间部分 (4认同)

nik*_*nik 9

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

$ exiftool somefile.mp3
ExifTool 版本号:7.98
文件名:somefile.mp3
目录 : 。
文件大小:49 MB
文件修改日期/时间:2009:09:10 11:04:54+05:30
文件类型 : MP3
MIME 类型:音频/mpeg
MPEG 音频版本:2.5
音频层:3
音频比特率:64000
采样率:8000
通道模式:单通道
MS 立体声:关闭
强度立体声:关闭
版权标志:错误
原始媒体:真实
重点:无
ID3 尺寸:26
类型:布鲁斯
持续时间:1:47:46(大约)