ffmpeg如何将gif动图加入到视频中,并实现动图出现时播放声

2021-03-16  本文已影响0人  张清柏

处理音频文件

zhangguofu@zhangguofudeMacBook-Pro test2 $ ls
001.mp4                   87.gif                    tx.wav                    皮肤粗糙_棒棒-2.ass

ffmpeg -i 001.mp4  -vn -acodec copy 001.aac
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。

把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动画就会从天而降了


image.png
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度


image.png

-附带其他相关命令

ffmpeg -c:v libvpx-vp9 -i webm2.webm out%04d.png

ffmpeg -i 001.mp4 -vf "movie=out0022.png[watermark];[in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] " output.flv

ffmpeg -re -i 001.mp4 -vf "movie=z.mov,scale=200*200[test]; [in][test] overlay=x=465:y=215:eof_action=2 [out]" -vcodec libx264 r001.flv

ffmpeg  -i dog.gif out%04d.png
ffmpeg -i /Users/website/default/test2/动画特效/尴尬1.mov -f gif -lavfi split[v],palettegen,[v]paletteuse gg.gif

ffmpeg -ss 00:00:00 -t 00:00:15 -i 001.mp4 -vcodec copy -acodec copy test_1.mp4

ffmpeg -y -i 002.mp4  -ignore_loop 0 -itsoffset 2  -i 87.gif  -filter_complex "[0:0]scale=iw:ih[a];[1:0]scale=300:300[wm];[a][wm]overlay=y='if(gte(t,5), NAN, 100):x=400:shortest=1" s01.mp4

ffprobe -print_format json -show_format -show_streams -i 87.gif

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 87.gif

ffmpeg  -loop 1  -i  ./jpg/qp1.png  -i 903.mp4 -filter_complex "[0]format=pix_fmts=rgba[v0];[v0]rotate=sin(2*PI/3*t):ow='max(iw,ih)':oh=ow:c=none[v1];[1][v1]overlay=y='if(gte(t,2), if(gte(t,5), NAN,200 ),NAN ):x=50:shortest=1'[v2]" -map [v2] -c:v libx264 test1.flv
上一篇 下一篇

猜你喜欢

热点阅读