FFmpeg如何将一个gif嵌入视频指定位置并指定显示时间
背景
很简单的需求:我需要将一个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嵌入指定位置
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
互斥的,这样写:
#错误写法
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控制显示时间即可;
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
运行结果:完美!收工
总结
有时候很简单的东西,不熟还是要踩坑;
参考
FFmpeg如何将一个gif嵌入视频指定位置并指定显示时间的更多相关文章
- (转载) popupWindow 指定位置上的显示
popupWindow 指定位置上的显示 标签: androidpopupWindowpopupWindow具体位置放置 2014-07-09 16:23 1114人阅读 评论(0) 收藏 举报 分 ...
- java格式化字符串,在指定位置插入指定字符串,兼容中英文以及特殊字符,例如:换行,用于解决生成pdf换行问题等问题
本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. http://www.cnblogs.com/king-xg/p/6370890.html 如果觉得对您有 ...
- sql中从指定位置截取指定长度字符串
1. 字符串函数应用 --从指定索引截取指定长度的字符串 ,) --获取字符串中指定字符的索引(从1开始) select charindex(',','ab,cdefg') --实际应用中的语句 , ...
- android学习——popupWindow 在指定位置上的显示
先看效果图,免得浪费大家时间,看是不是想要的效果 . 直接上代码 ,核心方法. [java] view plaincopy private void showPopupWindow(View pare ...
- popupWindow 在指定位置上的显示
先看效果图,免得浪费大家时间,看是不是想要的效果 . 直接上代码 ,核心方法. private void showPopupWindow(View parent) { if (popupWindow ...
- java如何实现替换指定位置的指定字符串的功能
/** * @创建日期 2013-07-15 * @创建时间 14:25:59 * @版本号 V 1.0 */ public class CosTest { public static ...
- Java分享笔记:RandomAccessFile流 & 在文件指定位置插入内容
RandomAccessFile流:随机存取文件流,该类定义了一个记录指针,通过移动指针可以访问文件的任意位置,且对文件既可以读也可以写.使用该类的write方法对文件写入时,实际上是一种覆盖效果,即 ...
- python 批量修改预定字符串并将修改后的字符串插入文件指定位置
下面的例子是在文件的指定位置增加指定字符串的例子 修改配置文件: def add_str(pre_str): lines = [] flag = True f = open("z.txt&q ...
- 【C语言】编写函数,将一个数的指定位置置0或置1
//编写函数,将一个数的指定位置置0或置1 #include <stdio.h> unsigned int set_bit(unsigned int num, int pos, int f ...
- FFmpeg 入门(1):截取视频帧
本文转自:FFmpeg 入门(1):截取视频帧 | www.samirchen.com 背景 在 Mac OS 上如果要运行教程中的相关代码需要先安装 FFmpeg,建议使用 brew 来安装: // ...
随机推荐
- [Py] Jupyter 写入和执行 python 文件
以 %%writefile request.py 开头. 下面写 python 代码,然后 shift + enter 键,可以把 python 代码写入开头指定的文件中,没有则自动创建. 以 %ru ...
- 2019-11-29-dotnet-代码调试方法
title author date CreateTime categories dotnet 代码调试方法 lindexi 2019-11-29 8:50:0 +0800 2019-6-5 9:4:4 ...
- SQL server 查看脚本
原文出处:http://blog.csdn.net/xiaochunyong/article/details/7455051 --Siuon --查看存储过程源码 create procedure m ...
- Docker镜像基本原理
前言 Docker系列文章: 如果没有安装过Docker请参考本文最后部分,大家从现在开始一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么学习Docker Docker基本概念 什 ...
- 003_Orcad菜单讲解与偏好设置
003_Orcad菜单讲解与偏好设置 菜单栏用的比较多的是File和Options项. 网格建议用lines,比较方便对齐. Auto Reference和Intertool Commuication ...
- Hive中的FileFormat、RowFormat和SerDe总结
Hive如何读写数据? 我们知道,hive表的数据是存储在hdfs文件系统中的.那么Hive是如何将hdfs上的数据文件,映射成一张张表呢,今天就来理清楚这个问题. 官方文档中对于Hive读数据的流程 ...
- 三:瑞芯微OK3399-C开发板
场景一 给广告机加上一双智慧的眼睛,时刻关注这经过自己面前的每一个人,把他(她)们的性别.年龄.胖瘦.着装风格.经过频次.观看广告的时间.每个广告观看的人数等等一一记录下来,为广告机运营商.广告创业设 ...
- chgrp chown
chgrp 用来改变文件所属群组,如果要改变的群组不在/etc/group里面,将会报错. chown 用来改变文件的所有者,如果改变的所有者便在/etc/passwd里面,将会报错. 需要注意的是c ...
- Js实现抽奖转盘,和点击返回某个模块顶部的功能
最近写了几个转盘抽奖的活动页面: 1.设定旋转的角度: HTML部分:转盘代码: <div class="lottery"> <div class="l ...
- CentOS7离线部署JDK
一. 下载JDK 官网地址: https://www.oracle.com/java/technologies/downloads/#java18 网盘地址: 链接:https://pan.baidu ...