我在一个文件夹中有数百个视频,我想为其制作 gif。每个视频的长度都不同,但所有视频的长度都超过 30 秒。我想在整个视频过程中从视频中获取 10 个 3 秒的 gif 图像。例如,如果视频时长为 25 分钟,则应每 2.5 分钟(150 秒)拍摄3 秒录制的gif。
完成的 gif 也必须与视频同名,但以 .gif 结尾,所有视频均为 .mp4
gif 应为 560x340
用一个命令来做到这一点会很好。
llo*_*gan 10
脚步:
ffprobe。示例脚本:
#!/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
Run Code Online (Sandbox Code Playgroud)
这可以满足您的许多要求:
ffmpeg) 命令| 归档时间: |
|
| 查看次数: |
2137 次 |
| 最近记录: |