将音频快速分割成多段然后加入适当的空白间隔再合并

我想跟读一首朗诵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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值