前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FFmpeg如何将一个gif嵌入视频指定位置并指定显示时间

FFmpeg如何将一个gif嵌入视频指定位置并指定显示时间

作者头像
乔达摩@嘿
发布2023-09-21 08:45:10
2800
发布2023-09-21 08:45:10
举报
文章被收录于专栏:嘿dotNet

背景

很简单的需求:我需要将一个gif嵌入到视频里面的指定位置,并要指定时间播放;

环境

windows11 64位专业版

ffmpeg version 2022-04-07-git-607ecc27ed-full_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers

输入:input.mp4(6秒), 1.gif(1.24秒)

第一版:先将gif嵌入指定位置

代码语言:javascript
复制
ffmpeg -i input.mp4  -stream_loop -1 -i 1.gif -filter_complex "[0:v][1:v] overlay=10:10:shortest=1" output1.mp4 -y

参数释义:

  • -stream_loop -1:-1 表示 GIF 文件无限循环播放。也可以指定播放次数,如:2,播放两次;
  • -i 1.gif:设置 1.gif 作为第二个输入文件。
  • -filter_complex "[0:v][1:v] overlay=10:10:shortest=1":设置一个复杂滤镜。此滤镜将 GIF 文件(第二个输入,即 [1:v])叠加到视频文件(第一个输入,即 [0:v])上。叠加的位置在坐标 (10,10) 上。shortest=1 表示当任何一路输入结束时,输出也将结束。
  • output1.mp4 -y:将结果输出到 output1.mp4。如果文件已存在,-y 选项会直接覆盖它。

运行结果:没有问题,gif被嵌入到指定位置,并正常播放;

注意:shortest=1 参数如果没写,视频会无限渲染,最终搞嘎机器;

第二版:指定gif显示时间段

错误写法

我这里写的时候以为shortest参数跟shortest互斥的,这样写:

代码语言:javascript
复制
#错误写法
ffmpeg -i input.mp4  -stream_loop 1 -i 1.gif -filter_complex "[0:v][1:v] overlay=10:10:enable='between(t,3,4)'" output1.mp4 -y

参数释义:

-stream_loop 1: 这里指定了gif播放的次数(这里指定1次,实际播放两次,暂搞不明白,可能跟gif的循环次数设置有关);

enable='between(t,3,4)' 表示这个动画只有在视频的第3秒到第4秒之间才会显示。

运行结果: 发现gif位置正确,显示时间正确,就是不会动了,花了不少时间找原因;

最后排查到gif不动原因是:

1、gif是从视频一开始加载就播放的,并不是到(t,3,4)再播放,between控制的是显示时间;

2、这里指定播放次数1(但实际播放两次),耗时1.24*2=2.48s,也就是2.48秒后,gif就不动了,破案;

所以正确写法是

1、-stream_loop -1 :gif无限循环;

2、shortest=1:以视频流的播放结束作为输出结束条件;再用between控制显示时间即可;

代码语言:javascript
复制
ffmpeg -i input.mp4  -stream_loop -1 -i 1.gif -filter_complex "[0:v][1:v] overlay=10:10:enable='between(t,3,4)':shortest=1" output1.mp4 -y

运行结果:完美!收工

总结

有时候很简单的东西,不熟还是要踩坑;

参考

https://www.bannerbear.com/blog/how-to-overlay-an-animated-gif-on-a-video-using-ffmpeg/#overlaying-a-static-png

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 环境
    • 第一版:先将gif嵌入指定位置
      • 第二版:指定gif显示时间段
        • 错误写法
        • 所以正确写法是
    • 总结
    • 参考
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档