我有一个输入视频 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
答案1
基本 GIF 示例
ffmpeg -i input.mp4 -filter_complex "[0]reverse[r];[0][r]concat=n=2:v=1:a=0" output.gif
GIFffmpeg
默认会永远循环,因此您不需要添加任何循环选项。
高质量 GIF 示例
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
改编自如何使用 ffmpeg 将视频转换为 GIF 并获得合理的质量?
通过缩小尺寸和降低帧速率来减小文件大小
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
避免重复第一帧和最后一帧
通过添加修剪和设定点过滤器。本例中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
另请参阅使用 ffmpeg 获取帧数。