如何将一段较长的随机视频制作成 30 秒的 GIF?

如何将一段较长的随机视频制作成 30 秒的 GIF?

我文件夹中有数百个视频,我想为它们制作一个 gif。每个视频的长度都不同,但所有视频都超过 30 秒。我想在视频播放过程中从视频中截取 10 个 3 秒的 gif 图像。例如,如果视频长度为 25 分钟,则 3 秒已录制每 2.5 分钟(150 秒)应拍摄一次 gif。

完成的 gif 也必须具有与视频相同的名称,但以 .gif 结尾,所有视频均为 .mp4

GIF 尺寸应为 560x340

用一个命令来完成这个任务就好了。

答案1

脚步:

  1. 获取持续时间ffprobe
  2. 使用持续时间作为选择筛选。
  3. 创建 gif
  4. 编写一切脚本。

示例脚本:

#!/bin/bash
mkdir 30gif
for f in *.mp4; do
  duration=$(ffprobe -loglevel error -show_entries format=duration -of default=nk=1:nw=1 "$f")
  ffmpeg -i "$f" -filter_complex "[0:v]select='lt(mod(t,${duration}/10),3)',setpts=N/(FRAME_RATE*TB),scale=560:340:force_original_aspect_ratio=decrease,pad=560:340:(ow-iw)/2:(oh-ih)/2,setsar=1,split[v0][v1];[v0]palettegen[p];[v1][p]paletteuse[v]" -map "[v]" "30gif/${f%.mp4}.gif"
done

这可以满足您的许多要求:

  • 输出 30 秒 GIF,由 3 秒片段组成,长度与输入时长相等
  • 560x340 输出尺寸
  • 一个 ( ffmpeg) 命令
  • 使用 bashfor 循环这样你就可以自动转换数百个视频
  • 输出名称与输入名称相同,但将 .mp4 替换为 .gif

相关内容