我想从现有的MP3文件中生成一个新的(完全有效的)MP3文件。新文件应仅包含曲目的最后N秒。
-t
中有avconv
个选项可获得前N秒:
-t持续时间(输出)
在持续时间到达持续时间后停止写入输出。持续时间可以是以秒为单位的数字,也可以是“hh:mm:ss [.xxx]”形式。
可以选择裁剪最后N秒吗?在我的情况下,avconv
不是必需的,所有其他工具都是可以接受的。
答案 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.