ffmpeg表达式理解:⾳量减弱渐强(淡⼊淡出)+混⾳ ⼀个⾳频在10秒后5秒内逐渐削弱效果
起始⽬的: 想混合a和b两个⾳频(重叠), b时长10秒, a时长⼤于10秒, 在b播放的10秒⾥a ⾳频⾳量为30%, b播放完毕后a恢复正常⾳量100%, 先度娘 参考资料:
得到公式⼀枚:
volume='if(lt(t,10),1,max(1-(t-10)/5,0))':eval=frame
理解:
lt(t,10)
t=当前秒数
如果当前时间⼩于10秒, 则返回1, 否则返回0
10秒前
if(1,1,max(1-(t-10)/5,0))
if(x,y,z), 如果x=1 则返回1, 否则返回z
第三届世界佛教论坛如果⼩于10秒, volume=1, 否则 volume=z
钱德勒max(1-(t-10)/5,0)3721助手
max(x, y) 返回x和y中的更⼤的值
t-10
10秒前
0-10=-10
-10/5=-2
1-(-2)=3
1-(-1.8)=2.8
10秒后
11-10=1
1/5=0.2
1-0.2=0.8 -> 11秒
1-0.4=0.6 -> 12秒
1-0.6=0.4 -> 13秒
1-0.8=0.2 -> 14秒
1-1=0 -> 15秒
其中可调参数10=正常时长, 5=削弱时长
volume='if(lt(t,10),1,max(1-(t-10)/5,0))':eval=frame
eval=frame //每经过⼀帧, 执⾏⼀次表达式
所以, 每秒钟的⾳量值都通过表达式计算结果来动态赋值 张志琴初始⾳量30%,10秒后3秒内逐渐恢复正常⾳量
t=经过的秒数, 通过时间的变化, 思考表达式
t=10 : (t-10)=0 -> (t-10)/3=0.00 -> 0.3+(t-10)/3*0.7=0.30 -> min(0.3+(t-10)/3*(1-0.3),1)=0.30
t=11 : (t-10)=1 -> (t-10)/3=0.33 -> 0.3+(t-10)/3*0.7=0.53 -> min(0.3+(t-10)/3*(1-0.3),1)=0.53
t=12 : (t-10)=2 -> (t-10)/3=0.66 -> 0.3+(t-10)/3*0.7=0.76 -> min(0.3+(t-10)/3*(1-0.3),1)=0.76
t=13 : (t-10)=3 -> (t-10)/3=0.99 -> 0.3+(t-10)/3*0.7=1.00 -> min(0.3+(t-10)/3*(1-0.3),1)=1.00
t=14 : (t-10)=4 -> (t-10)/3=1.33 -> 0.3+(t-10)/3*0.7=1.23 -> min(0.3+(t-10)/3*(1-0.3),1)=1.00
表达式参考资料:
min(x, y) 返回x和y中的更⼩的值
skyp2pmin(0.3+(t-10)/3*(1-0.3),1) //如果⼤于1则返回1, 13秒过后保持正常⾳量播放
1-0.3=0.7 //初始值为0.3 要在0.3的基础往上加
所以
帅府家风volume='if(lt(t,10),0.3,min(0.3+(t-10)/3*(1-0.3),1))':eval=frame
完整命令
ffmpeg -i 111.aac -af "volume='if(lt(t,10),0.3,min(0.3+(t-10)/3*(1-0.3),1))':eval=frame" 333.aac 使⽤滤镜混⾳(叠加):
ffmpeg -i 333.aac -i 444.mp3 -filter_complex amix=inputs=2:dropout_transition=0 555.aac 参考资料
若⾳频⽐视频长,画⾯停留在最后⼀帧,继续播放声⾳。
ffmpeg -i 222.mp4 -i 555.aac 666.mp4
ffmpeg -i input.mp4 -vcodec copy -an output.mp4
单独提取⾳频(去掉视频)
ffmpeg -i input.mp4 -acodec copy -vn output.mp3
常⽤的⼀些命令(参考资料)