裁剪MP3持续N秒

时间:2015-06-14 11:15:41

标签: ffmpeg mp3 avconv

我想从现有的MP3文件中生成一个新的(完全有效的)MP3文件。新文件应仅包含曲目的最后N秒。

-t中有avconv个选项可获得前N秒:

  

-t持续时间(输出)

     

在持续时间到达持续时间后停止写入输出。持续时间可以是以秒为单位的数字,也可以是“hh:mm:ss [.xxx]”形式。

可以选择裁剪最后N秒吗?在我的情况下,avconv不是必需的,所有其他工具都是可以接受的。

2 个答案:

答案 0 :(得分:3)

您只需使用ffprobe -i input_audio -show_entries format=duration -v quiet -of csv="p=0" 即可获得音频的持续时间。

ffmpeg

计算nth_second并将其与ffmpeg -i input_audio -ss nth_second output_file

一起使用
#!/bin/bash
duration=$(ffprobe -i ${1} -show_entries format=duration -v quiet -of csv="p=0")
nth_second=$(echo "${duration} - ${2}"|bc)
ffmpeg -i ${1} -ss ${nth_second} ${3}

以下是该流程的shell脚本。

<a href=\"Projectname/classname?myparam=" +  date + "\"  >

答案 1 :(得分:1)

如果你想发布脚本,你应该检查以确保安装mp3info,参数计数等,但这应该让你开始。将其另存为.sh并使用mp3lastnsecs.sh input.mp3 output.mp3 numsecs

进行调用

此外,您还需要为标记,比特率等添加其他ffmpeg标志。

#!/usr/bin/bash

SECS=$(mp3info -p "%S" $1)
if [ "$SECS" -ge "$3" ]; then
  START=$((SECS-$3))
else
  echo 'Error: requested length is longer than the song.'
  exit 1
fi

#echo Starting song $1 from $START seconds.
ffmpeg -i "$1" -ss $START "$2"

示例输出:

[  @  tmp] ./lastN.sh 01-glaube.mp3 output.mp3 20
Starting song 01-glaube.mp3 from 96 seconds.
ffmpeg -i 01-glaube.mp3 -ss 96 output.mp3 # I had an echo in there for testing, it now calls ffmpeg directly
[  @  tmp] ./lastN.sh 01-glaube.mp3 output.mp3 1234
Error: requested length is longer than the song.