ffmpeg 回旋镖效果转 GIF

Mar*_*him 6 ffmpeg

我有一个输入视频 mp4。我需要创建一个 2 秒输出媒体,其中前进 1 秒,后退 1 秒(飞去来器效果),好的,如果我也将输出设置为 mp4,那么效果很好,但我需要将其输出设置为 GIF。我怎样才能做到这一点?

ffmpeg -t 1 -i input.mp4 -filter_complex "[0]reverse[r];[0][r]concat,loop=1:2,setpts=N/25/TB" output.mp4
Run Code Online (Sandbox Code Playgroud)

llo*_*gan 12

基本 GIF 示例

使用反向连续过滤器:

ffmpeg -i input.mp4 -filter_complex "[0]reverse[r];[0][r]concat=n=2:v=1:a=0" output.gif
Run Code Online (Sandbox Code Playgroud)

默认情况下, GIFffmpeg将永远循环,因此您无需添加任何循环选项。

高品质 GIF 示例

使用reverseconcatsplitpalettegenpaletteuse过滤器:

ffmpeg -i input.mp4 -filter_complex "[0]reverse[r];[0][r]concat=n=2:v=1:a=0,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
Run Code Online (Sandbox Code Playgroud)

改编自如何使用 ffmpeg 将视频转换为 GIF,并具有合理的质量?

通过缩小尺寸和降低帧速率来减小文件大小

与上面相同,但添加了比例fps过滤器:

ffmpeg -i input.mp4 -filter_complex "[0]scale=320:-1,reverse[r];[0][r]concat=n=2:v=1:a=0,fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
Run Code Online (Sandbox Code Playgroud)

避免重复第一帧和最后一帧

通过添加修剪设置过滤器。在此示例中,input.mp4帧速率为 10,长度为 3 秒。请注意,在修剪滤镜中,#0 帧是第一帧。

ffmpeg -i input.mp4 -filter_complex "[0]trim=start_frame=1:end_frame=29,setpts=PTS-STARTPTS,reverse[r];[0][r]concat=n=2:v=1:a=0,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
Run Code Online (Sandbox Code Playgroud)

另请参阅使用 ffmpeg 获取帧计数

  • @llogan 当缩小“输入链接 in0:v0 参数(大小 320x180,SAR 0:1)与相应的输出链接 in0:v0 参数(3840x2160,SAR 0:1)”时,我收到以下错误 (2认同)