- 为了丰富文章,本文也会演示一些动画效果,如跑马灯效果,淡入淡出等效果
- 在上一篇文章中,我们使用了把gif图片转化为mov透明底的视频,使用ffmpeg画中画的滤镜效果,把动画加入到了视频中。
- 使用到了视频的剪辑和合并技术
- 使用到了视频的语音提取,剪辑,替换视频语音等技术。
- 使用到了视频的编码和解码技术
- 那么本次,我们使用简单一点的技术去实现在视频中第n秒出现gif动图,并播放声音特效,简单说,就是在视频某个时间,出现了一个大大的赞的动图,并说 biubiubiu...
- 这个技术竟然还有人在网上发博客,说是自己钻研很久才有了方案,需要付费探讨,让人汗颜。ffmpeg本来就是开源,我们还是本着开源的精神来!
- 注:本文为了方便演示,都是在源文件目录下执行的命令,如果不同目录请使用具体路径
- 好了,废话到此结束!开始干活!
处理音频文件
- 先看一下目录文件,有源文件001.mp4 ,动图87.gif,特效语音tx.wav 字幕文件皮肤粗糙_棒棒-2.ass
zhangguofu@zhangguofudeMacBook-Pro test2 $ ls
001.mp4 87.gif tx.wav 皮肤粗糙_棒棒-2.ass
- 提取源视频的音频
ffmpeg -i 001.mp4 -vn -acodec copy 001.aac
- 使用混合音效,将特效和音频合并在一起,特效在音频播放6s后开始播放
ffmpeg -y -i 001.aac -itsoffset 6 -i tx.wav -filter_complex amix=inputs=2:duration=first:dropout_transition=4 -async 1 t2.wav
-itsoffset 6 就是 延迟6s的意思 amix是将两个音频混合一起播放 inputs=2是说两个音频资源
- 替换原视频的音频文件
ffmpeg -i 001.mp4 -i t2.wav -c:v copy -map 0:v:0 -map 1:a:0 001_1.mp4
-map 0:v:0将输入的第一(索引0)视频流映射到输出中的第一(索引0)视频流。 -map 1:a:0将输入的第二(索引1)音频流映射到输出中的第一(索引0)音频流。 如果音频比视频长,则需要-shortest在输出文件名之前添加。这个参数在上篇文章用到过。 不指定音频编解码器,将自动选择一个有效的编解码器。您可以指定一个,例如-c:a libvorbis在之后添加-c:v copy。
- 那么此刻。biubiu的音效已经加入到视频中去了。001_1.mp4 就是我们想要的文件
把gif图加入到视频中去
ffmpeg -y -i 001_1.mp4 -ignore_loop 0 -itsoffset 6 -i 87.gif -filter_complex '[0:0]scale=iw:ih[a];[1:0]scale=300:300,fade=t=in:st=6:d=3:alpha=1[wm];[a][wm]overlay=x=350:y=60:shortest=1' s01.mp4
-ignore_loop 0 表示动画会一直循环播放,1表示播放一次 -itsoffset 6 表示第6s开始播放动画 [0:0]scale=iw:ih 表示源视频的大小 [1:0]scale=300:300 表示动画的大小是300*300 fade=t=in:st=6:d=3:alpha=1第6s开始淡入,持续3s,添加Alpha频道, 再补充一点小知识,[0:v] fade=in:0:10; 表示0到10帧淡入 overlay=x=350:y=60 表示坐标
- 为了效果,我加上字幕
ffmpeg -i s01.mp4 -vf ass=皮肤粗糙_棒棒-2.ass -b:v 3000K s01_1.mp4
- 播放效果如下
- 接下来再给大家演示一下,动图跑马灯的效果
ffmpeg -i 001.mp4 -i 87.gif -filter_complex "[0:v][1:v] overlay=y='if(gte(t,2), -h+(t-2)*800, NAN):x=20" run.mp4
这样那个gif动画就会从天而降了
- 另外再补充一条命令,如何在gif动图以某个角度 出现在 视频里面呢
ffmpeg -i 87.gif -i 001.mp4 -filter_complex '[0]format=pix_fmts=rgba[v0];[v0]rotate=a=PI/6:c=ffffff00[v1];[1][v1]overlay[v2]' -map [v2] -c:v libx264 test.ts
rotate=a=PI/6 PI 是180度 /6就是30度