批处理笔记(13) - 从视频导出高质量GIF图片

需要ffmpeg,配置ffmpeg到环境变量。

1.从视频片断导出高质量GIF

新建文本文件,将下面代码保存,并改文件名和后缀名为 gif.bat

1
2
3
4
5
6
7
8
9
10
11
@echo off
setlocal enabledelayedexpansion

set gif_filename="%2.gif"
set start_time=%3
set duration=%4
set palette="palette.png"
set filters="fps=%5,scale=%6:-1:flags=lanczos"

ffmpeg -v warning -ss %start_time% -t %duration% -i %1 -vf "%filters%,palettegen=max_colors=%7:stats_mode=diff" -y %palette%
ffmpeg -v warning -ss %start_time% -t %duration% -i %1 -i %palette% -lavfi "%filters% [x]; [x][1:v] paletteuse=dither=floyd_steinberg" -y %gif_filename%

gif.bat 放在视频所在文件夹,

在视频文件夹图标上,按住 Shift, 点击鼠标右键选择:在此处打开命令窗口

运行命令:

gif.bat input.mp4 output 00:00:25 00:00:35 10 640 256

对应解释:

gif.bat 导入视频源 导出Gif图片名 开始时间 结束/持续时间 帧率 宽度 色彩数(4-256)

2.整个视频导出高质量GIF

同样准备文件 gif-all.bat

1
2
3
4
5
6
7
8
9
@echo off
setlocal enabledelayedexpansion

set gif_filename="%2.gif"
set palette="palette.png"
set filters="fps=%3,scale=%4:-1:flags=lanczos"

ffmpeg -v warning -i %1 -vf "%filters%,palettegen=max_colors=%5:stats_mode=diff" -y %palette%
ffmpeg -v warning -i %1 -i %palette% -lavfi "%filters% [x]; [x][1:v] paletteuse=dither=floyd_steinberg" -y %gif_filename%

调用:gif-all.bat input.mp4 output 10 640 256

FPS

  • 5 (max 60 seconds)
  • 7 (max 40 seconds)
  • 10 (max 30 seconds)
  • 20 (max 15 seconds)
  • 25 (max 10 seconds)

如果要导多个gif图片,可以先记录好视频中各出入点,一行行编写到另一个批处理文件,然后再 start

(本篇结束)

许可协议:自由转载-保持署名-非商业性使用-禁止演绎 (CC BY-NC-ND 4.0)

By 小可 from https://xinlu.ink/tech/batch-in-action-13-export-high-quality-gif-pictures-from-video.html