• ffmpeg 特效 转场 放大缩小


    案例

    1. ffmpeg \
    2. -i input.mp4 \
    3. -i image1.png \
    4. -i image2.png \
    5. -filter_complex \
    6. [1:v]scale=100:100[img1]; \
    7. [2:v]scale=1280:720[img2]; \
    8. [0:v][img1]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[bkg];\
    9. [bkg][img2]overlay=0:0 \
    10. -y output.mp4

    -i input.mp4//这个是原始文件
    -i image1.png//第一个水印图片
    -i image2.png//第二个水印图片
    -y output.mp4//输出文件

    [1:v]这个里头两个参数,1表示的是操作对象的编号。在本例中

    0就是原始视频文件input.mp4,

    1就是image1.png,

    2就是image2.png,

    3就是output.mp4。

    而另一个参数v表示操作对象里的视频信息。
    [img1]是这个操作过滤器的名字。(当然名字可以随便起)

    [1:v]scale=100:100[img1]; \
    所以这头一句[1:v]scale=100:100[img1]的意思就是对图片imagei.png进行调节尺寸的操作,并将这个操作的结果命名为img1。

    [2:v]scale=1280:720[img2]; \
    后面的[2:v]和[img2]也是一个意思。

    [0:v][img1]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[bkg];\
    我们继续,overlay前面[0:v][img1]凑一起是什么意思呢

    0自然就是指的原始视频input.mp4,这句的意思就是将[img1]叠加到0对象的视频上。本例中就是把image1.png叠加到input.mp4上。

    这里需要注意的就是顺序:后一个对象叠加到前一个上,后一个对象在上层。如果写成[img1][0:v],那相对本例其实就是把视频叠加到图片imge1.png上。这样的话一般来说由于视频通常是全屏,等于用视频覆盖了图片,水印完全看不到了。
    好,我们又把这个操作的结果命名为[bkg],

    [bkg][img2]overlay=0:0 \        

    那么接下来[bkg][img2]的意思就很明了了。就是把image2.png再叠加上去,image2.png是在最上层的,如果位置重合的话,他会遮盖 image1.png的水印。
    于是,事就这样成了。

    转场动画

    1. ffmpeg \
    2. -loop 1 -t 3 -i img001.jpg \
    3. -loop 1 -t 3 -i img002.jpg \
    4. -loop 1 -t 3 -i img003.jpg \
    5. -loop 1 -t 3 -i img004.jpg \
    6. -loop 1 -t 3 -i img005.jpg \
    7. -filter_complex \
    8. "[0][1]xfade=transition=circlecrop:duration=0.5:offset=2.5[f0]; \
    9. [f0][2]xfade=transition=smoothleft:duration=0.5:offset=5[f1]; \
    10. [f1][3]xfade=transition=pixelize:duration=0.5:offset=7.5[f2]; \
    11. [f2][4]xfade=transition=hblur:duration=0.5:offset=10[f3]" \
    12. -map "[f3]" -r 25 -pix_fmt yuv420p -vcodec libx264 output-swipe-custom.mp4

    duration:动效时间

    offset:指前一个视频做转场的起始位置,是从视频头开始算

    [0:1]这个里头两个参数,0表示的是操作对象的编号。在本例中0就是img001.jpg,1就是img002.jpg,2就是img003.jpg。

    [f0]是这个操作过滤器的名字。(当然名字可以随便起)

                                    |<==offset

                                    |<==duration==>|

    AAAAAAAAAAAAAAAAAAAAAAAA

                                    BBBBBBBBBBBBBBBBBBBBBBBBBBB

    1. ffmpeg -i v0.mp4 -i v1.mp4 -i v2.mp4 -i v3.mp4 -i v4.mp4 -filter_complex \
    2. "[0][1:v]xfade=transition=fade:duration=1:offset=3[vfade1]; \
    3. [vfade1][2:v]xfade=transition=fade:duration=1:offset=10[vfade2]; \
    4. [vfade2][3:v]xfade=transition=fade:duration=1:offset=21[vfade3]; \
    5. [vfade3][4:v]xfade=transition=fade:duration=1:offset=25,format=yuv420p; \
    6. [0:a][1:a]acrossfade=d=1[afade1]; \
    7. [afade1][2:a]acrossfade=d=1[afade2]; \
    8. [afade2][3:a]acrossfade=d=1[afade3]; \
    9. [afade3][4:a]acrossfade=d=1" \
    10. -movflags +faststart out.mp4
    inputinput duration+previous xfade offset-xfade durationoffset =
    v0.mp44+0-13
    v1.mp48+3-110
    v2.mp412+10-121
    v3.mp45+21-125

    Merging multiple video files with ffmpeg and xfade filter - Stack Overflow

    转场+放大

    1. ffmpeg \
    2. -t 5 -i 1.jpg \
    3. -t 5 -i 2.jpg \
    4. -t 5 -i 3.jpg \
    5. -t 5 -i 4.jpg \
    6. -filter_complex \
    7. "[0:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=out:st=4:d=1[v0]; \
    8. [1:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
    9. [2:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
    10. [3:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
    11. [v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p[v]" -map "[v]" -s "800x450" -t 40 ./out_fade.mp4

    参数v表示操作对象里的视频信息。

    st=0 表示动画的开始时间,这里是4

    d=3 表示动画的时间

    1. ffmpeg \
    2. -loop 1 -t 2 -i 1.jpg \
    3. -loop 1 -t 2 -i 2.jpg \
    4. -loop 1 -t 2 -i 3.jpg \
    5. -loop 1 -t 2 -i 4.jpg \
    6. -loop 1 -t 2 -i 5.jpg \
    7. -filter_complex \
    8. "[0:v]xfade=transition=wiperight:duration=1:offset=1[v0]; \
    9. [1:v]xfade=transition=wiperight:duration=1:offset=1[v1]; \
    10. [2:v]xfade=transition=wiperight:duration=1:offset=1[v2]; \
    11. [3:v]xfade=transition=wiperight:duration=1:offset=1[v3]; \
    12. [v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p[v]" \
    13. -map "[v]" \
    14. -y out.mp4

    FFmpeg中转场滤镜xfade的时间参数(duration和offset)与算法解读_ffmpeg xfade_Jack_Chai的博客-CSDN博客

    How to Create a Slideshow from Images with FFmpeg - Bannerbear

    Creating an FFmpeg image slideshow with zoompan and fade in/out - Super User

    FFmpeg实现音视频同步的精准片段拼接_ffmpeg atrim_Jack_Chai的博客-CSDN博客

    所有转场效果: Xfade – FFmpeg

    xfade官方文档:FFmpeg Filters Documentation

    fade滤镜:FFmpeg Filters Documentation

    zoompan

    FFmpeg滤镜效果--镜头聚焦和移动走位 - 知乎

  • 相关阅读:
    十一、指针
    皕杰报表之小程序代码质量检测
    【MySQL数据库】(一)MySQL 概述
    基于JAVA师生交流平台计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    【硅谷甄选】P44 element-plus 含有多个子菜单的菜单的折叠字体图标溢出
    transformer学习资料
    避免分库分表,绿普惠的分布式数据库选型与实践
    盘点检索任务中的损失函数
    互联网最全cka真题解析-2022.9.9
    八、鼎捷T100生产管理之委外管理篇
  • 原文地址:https://blog.csdn.net/linzhiji/article/details/132840284