我有一堆长度各异的 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'