FFmpeg 视频转 GIF
Filtergraph
在 ffmpeg 命令中,可以使用 -filter、-vf、-af 或 -filter_complex 选项指定 filter graph
Filtergraph 由 filter chain 组成,语法如下:
filterchain_1;filterchain_2;...
filterchain 由 filter 连接而成,上一个 filter 的输出成为下一个 filter 的输入,语法如下:
filter_1,filter_2,...
filter 语法:
[in_link_1]...[in_link_N]filter_name@id=key1=value1:key2=value2:...[out_link_1]...[out_link_M]
key 可以省略,如果省略,则只能放在具名参数前面,实际参数会根据 filter 的定义分配
如果 value 的值是列表类型,则每个元素由 | 隔开
示例:
fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer:bayer_scale=1
等价于:
fps=10,scale=width=320:height=-1:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer:bayer_scale=1
Video 转 Gif
ffmpeg -ss 1 -t 9 -i foo.mp4 -vf "fps=10,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer:bayer_scale=1" -loop 0 output.gif
解释:
-ss 1: 从输入视频的第 1 秒开始处理。
-t 9: 从起始时间起提取 9 秒的内容(即从第 1 秒到第 10 秒)。
-i foo.mp4: 指定输入文件为
foo.mp4。-vf: 应用视频过滤器,后面跟着过滤器的详细设置。
过滤器的具体内容是:
- fps=10: 设置输出 GIF 的帧率为每秒 10 帧。
- split[s0][s1]: 将视频流分成两个相同的流,分别命名为
s0和s1。 - [s0]palettegen=stats_mode=diff[p]: 对第一个流
s0生成一个调色板p,使用差异统计模式来优化颜色。 - [s1][p]paletteuse=dither=bayer:bayer_scale=1: 对第二个流
s1使用生成的调色板p,并应用 Bayer 抖动(dithering),使 GIF 的色彩更平滑。
-loop 0: 指定 GIF 循环播放,
0表示无限循环。output.gif: 指定输出文件名为
output.gif
filter graph 可视化:
[s0] [p]
input ---> fps ---> split ------> palettegen -----> paletteuse ---> output
| ^
| [s1] |
+---------------------------------+
使用上面的命令创建 GIF 可能会遇到产生出来的 GIF 文件后面几帧有卡顿现象,这时可以使用两步法:
palette="/tmp/palette.png"
filters="fps=10"
# 1. 先生成调色板
ffmpeg -v warning -i foo.mp4 -vf "$filters,palettegen" -y $palette
# 2. 再结合调色板生成 GIF
ffmpeg -v warning -i foo.mp4 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y output.png
参考:
FFmpeg 视频转 GIF的更多相关文章
- c# ffmpeg视频转换
c# ffmpeg视频转换 什么是ffmpeg,它有什么作用呢,怎么可以使用它呢,带着问题去找答案吧!先参考百度百科把,我觉得它很强大无奇不有,为了方便大家我就把链接提供了! http://baik ...
- c# ffmpeg视频转换【转载】
c# ffmpeg视频转换 什么是ffmpeg,它有什么作用呢,怎么可以使用它呢,带着问题去找答案吧!先参考百度百科把,我觉得它很强大无奇不有,为了方便大家我就把链接提供了! http://baik ...
- Android 音视频深入 二十一 FFmpeg视频剪切
视频剪切我意外的发现上一次的视频压缩的代码能够运行FFmpeg视频剪切的命令,但是不能做视频合并的命令,因为不能读取记录了几个视频的路径的txt文件. 这里我就说直说视频剪切的过程,不说代码,只说lo ...
- C# 使用ffmpeg视频截图
<appSettings> <add key="ffmpeg" value="E:\ffmpeg\ffmpeg-20141012-git-20df026 ...
- nginx RTMP FFmpeg 视频直播
/**************************************************************************** * nginx RTMP FFmpeg 视频 ...
- 视频编解码的理论和实践2:Ffmpeg视频编解码
近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术.因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术. 相关阅读推荐 &l ...
- php ffmpeg视频和序列帧转化
php ffmpeg视频和序列帧转化 <pre>$cmd=shell_exec("ffmpeg -i ".__DIR__ . "/shipin1.mp4 -r ...
- C# ffmpeg 视频处理格式转换具体案例
C# ffmpeg 视频处理格式转换 C# ffmpeg 视频处理格式转换avi到MP4格式 1.代码如下: using System;using System.Diagnostics; namesp ...
- ffmpeg 视频过度滤镜 gltransition
ffmpeg 视频过度滤镜 gltransition 上次随笔中提到的 ffmpeg-concat 可以处理视频过度,但是缺点是临时文件超大. 经过查找 ffmpeg 还有 gltransition ...
- ffmpeg视频格式转换(Java)
命令: 高品质: ffmpeg -i E:\input\a.wmv -ab 128 -acodec libmp3lame -ac 1 -ar 22050 -r 29.97 -qscale 4 -y E ...
随机推荐
- mybatis-plus系统化学习之查询专题
1.背景 查询在实际生产中用得最多,也最灵活. 2.查询案例 表结构: CREATE TABLE `sys_user` ( `id` int(32) NOT NULL AUTO_INCREMENT C ...
- sublime 快速生成html基础代码
一.快速生成HTML5的头部信息的步骤: 1.Ctrl + N,新建一个文档: 2.Ctrl + Shift + P,打开命令模式,再输入 sshtml 进行模糊匹配,将语法切换到html模式: 3. ...
- Canvas简历编辑器-图形绘制与状态管理(轻量级DOM)
Canvas简历编辑器-图形绘制与状态管理(轻量级DOM) 在前边我们聊了数据结构的设计和剪贴板的数据操作,那么这些操作都还是比较倾向于数据相关的操作,那么我们现在就来聊聊基本的图形绘制以及图形状态管 ...
- Linux input 子系统详解
1. 模块概述 1.1.相关资料和代码研究 drivers/input/ include/uapi/linux/input-event-codes.h 2. 模块功能 linux核心的输入框架 3. ...
- WM_CONTEXTMENU
通知用户希望显示上下文菜单的窗口. 用户可能已在窗口中单击鼠标右键 (右键单击) .按 Shift+F10 或按应用程序键 (上下文菜单键) 某些键盘上可用 #define WM_CONTEXTMEN ...
- TwinCAT3 - 实现自己的Tc2_SerialCom
目录 1,前言 2,原生Tc2_SerialCom简单使用 3,实现自己的Tc2_SerialCom 3.1,EL6inData22B,EL6outData22B 3.2,ComBuffer 3.3, ...
- css flex属性
css学的不咋熟,搞一个复杂一点的水平居中,用display 属性 + position属性 + float属性,搞了好久居然没搞出来,然后我去翻资料,发现我最不常用的flex能解决这个问题,于是我就 ...
- Python 潮流周刊#68:2023 年 Python 开发者调查结果(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- Serilog文档翻译系列(三) - 基础配置
Serilog 使用简单的 C# API 来配置日志记录.当需要外部配置时,可以(慎用)通过使用 Serilog.Settings.AppSettings 包或 Serilog.Settings.Co ...
- Redis 入门 - C#|.NET Core客户端库六种选择
经过前面的Redis基础学习,今天正式进入编码阶段了,进入编码阶段我们又同样面临一道多选题,选择什么客户端库?要是有选择困难症的又要头疼了.不过别担心我先头疼,今天就给大家介绍6款.NET系Redis ...