我试图将 .mov 转换为 .gif,但没有成功。
错误如下:
ffmpeg -pix_fmt rgb24 -i yesbuddy.mov output.gif
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
built on Jun 12 2012 17:47:34 with clang 2.1 (tags/Apple/clang-163.7.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/0.11.1 --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/clang --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --disable-ffplay
libavutil 51. 54.100 / 51. 54.100
libavcodec 54. 23.100 / 54. 23.100
libavformat 54. 6.100 / 54. 6.100
libavdevice 54. 0.100 / 54. 0.100
libavfilter 2. 77.100 / 2. 77.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 15.100 / 0. 15.100
libpostproc 52. 0.100 / 52. 0.100
Option pixel_format not found.
如果我省略 -pix_fmt rgb24 部分,它会报错。有什么想法可以解决吗?
答案1
命令行参数的顺序很重要。此命令行应该可以工作,但会生成一个巨大的文件:
ffmpeg -i yesbuddy.mov -pix_fmt rgb24 output.gif
请注意,您可能希望在转换时降低帧速率和大小,并指定开始时间和持续时间。您可能不想以原始分辨率和帧速率转换整个文件。
ffmpeg -ss 00:00:00.000 -i yesbuddy.mov -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif
文件大小仍然很大。您可以使用图像魔术师的 GIF 优化器来减小尺寸:
convert -layers Optimize output.gif output_optimized.gif
答案2
转换后:
ffmpeg -i input.mp4 input.gif
尝试优化框架:
convert input.gif -verbose -coalesce -layers OptimizeFrame input_optframe.gif
并用来gifsicle
进行最终优化:
gifsicle -O2 input_optframe.gif -o optimized.gif
从 12.2mb 的视频中获得 6.8mb 的 GIF,质量几乎相同!
答案3
ffmpeg -i <input source> -filter_complex "[0:v] fps=12,scale=<width>:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse" <output file>
在此命令中,您需要插入 3 个标记。<input source>
将类似于your-recording.mov
,应该<width>
是您希望最终 gif 的宽度,并且<output file>
将类似于recording.gif
。
该命令的含义如下:
filter_complex
我们将把一些过滤器连接在一起[0:v] fps=12
以每秒 12 帧的速度获取容器中的第一个视频流scale=1024:-1
调整宽度为 1024,并保持高度的纵横比split [a][b]
获取当前流并将其拆分为两个(基本上是克隆它);
新的过滤器即将到来[a] palettegen [p]
获取“a”流并生成名为“p”的调色板;
新的过滤器即将到来[b][p] paletteuse
采用“b”流并应用“p”调色板
对于屏幕录制来说,调色板并不总是必要的,但对于录制的视频来说,它绝对是必需的,因为它能使颜色更好。
如果您要剪辑它,您也可以根据需要-ss 00:00:00.000
插入。-t 00:00:00.000
答案4
ffmpeg -y -i input.mp4 -f image2pipe -vcodec ppm - | convert -delay 2 -loop 0 -layers Optimize - gif:- | gifsicle -d 3 -O3 -o optimized.gif
首先使用 ffmpeg 通过管道将 mp4 文件转换为图像,然后使用 imagemagick 将其压缩为 gif,最后使用 gifsicle 对其进行优化
我不知道为什么直接使用 gifscicle 不起作用。
或者你可以用这个把 gif 缩小一点
convert -dither none -matte -depth 8 -deconstruct -layers optimizePlus -colors 32 in.gif out.gif