我想跟读一首朗诵mp3,需要标记好位置,然后在位置处插入适当时长的空白音频。
空白音频是用ffmpeg单独制作的,我做了blank1-10的10段空白音频文件,下边是生成一段10秒命令行:
ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -t 10 blank10.mp3
1.使用audacity做好标签,并导出标签文件,为了加速,定位后使用快捷键ctrl+b。内容label.txt如下格式:
5.901144 5.901144
11.191825 11.191825
15.465068 15.465068
17.830613 17.830613
第一列就是各个截断的时间点。
2.使用ffmpeg进行批处理分割,这需要写一段awk代码。在windows下需要安装busybox,可使用awk ls等命令,ffmpeg需要单独安装,并要保证在命令行下可用,在保证命令行可用时,输入:busybox sh进入命令行。
{buff[NR]=$1}
END{
buff[0]=0;
buff[NR+1]=10000;
n=1;
for(i=1;i<=NR+1;i+=1){
f=sprintf("%03d",n)
len=buff[i]-buff[i-1]
t="ffmpeg -i n.mp3 -ss " buff[i-1] " -t " len " -c copy " f ".mp3"
n+=1
system(t)#分割好的音频
nlen=int(len+0.5)
f=sprintf("%03d",n)
n+=1
if(nlen>0 && nlen<=10){
t2="cp blank" nlen ".mp3 " f ".mp3"
}else
t2="cp blank10.mp3 " f ".mp3"
system(t2)#添加空白音频
}
system("ls [0-9][0-9][0-9].mp3 >filelist.txt") #列出生成的mp3文件列表到文件
system("sed -i 's/^/file /' filelist.txt") #每行添加file字样,使ffmpeg能够识别
system("ffmpeg -f concat -safe 0 -i filelist.txt -c copy concat-result.mp3")#最后连接
}
#以下是几行注释写出了单条命令的格式
#ffmpeg -i 01.mp3 -ss 00:00:16.0 -t 00:22:20.0 -c copy output.mp4
#ffmpeg -f concat -safe 0 -i list.txt -c copy concat-result.mp3
#ffmpeg -i 01.mp3 -ss 0 -t 3 -c copy output.mp3
#ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -t 10 output.mp3
运行命令行如下:awk -f g.awk label.txt
运行前必备文件如下:10个空白音频,1个标签文件label.txt,awk代码文件,原始音频mp3