Toodarday Asked: 2019-03-22 09:42:20 +0800 CST2019-03-22 09:42:20 +0800 CST 2019-03-22 09:42:20 +0800 CST 如何从长的随机视频中创建 30 秒的 GIF? 772 我的文件夹中有数百个视频,我想为其制作 gif。每个视频长度不同,但所有视频都超过 30 秒。我想在视频过程中从视频中获取 10 个 3 秒的 gif 图像。例如,如果视频长度为 25 分钟,则应每 2.5 分钟(150 秒)拍摄3 秒的录制gif。 完成的 gif 文件还必须与视频同名,但以 .gif 结尾,所有视频都是 .mp4 GIF 应该是 560x340 用一个命令来做到这一点会很好。 ffmpeg mp4 gif 1 个回答 Voted Best Answer llogan 2019-03-22T10:06:29+08:002019-03-22T10:06:29+08:00 脚步: 使用 获取持续时间ffprobe。 使用持续时间作为选择过滤器中的值。 创建 gif。 编写所有内容。 示例脚本: #!/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) 命令 使用 bash for 循环,您可以自动转换数百个视频 输出名称与输入名称相同,但将 .mp4 替换为 .gif
脚步:
ffprobe
。示例脚本:
这可以满足您的许多要求:
ffmpeg
) 命令