使用Plots的gif, 显示ffmpeg not defined

我想用Plots做动态图,在使用gif保存动态图的时候出错,显示ffmpeg not defined,我在命令行中执行ffmpeg 显示已经安装了ffmpeg,这个该怎么办?

julia> gif(anim,“/home/jiangnan/image/ddd”)
ERROR: UndefVarError: ffmpeg not defined
Stacktrace:
[1] ffmpeg_exe(::Cmd) at /home/jiangnan/.julia/packages/FFMPEG/guN1x/src/FFMPEG.jl:144
[2] buildanimation(::Animation, ::String, ::Bool; fps::Int64, loop::Int64, variable_palette::Bool, show_msg::Bool) at /home/jiangnan/.julia/packages/Plots/12uaJ/src/animation.jl:90
[3] buildanimation at /home/jiangnan/.julia/packages/Plots/12uaJ/src/animation.jl:75 [inlined] (repeats 2 times)
[4] #gif#263 at /home/jiangnan/.julia/packages/Plots/12uaJ/src/animation.jl:63 [inlined]
[5] gif(::Animation, ::String) at /home/jiangnan/.julia/packages/Plots/12uaJ/src/animation.jl:63
[6] top-level scope at REPL[6]:1

jiangnan@jiangnan-PC:~$ ffmpeg
ffmpeg version 3.2.12-1~deb9u1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --prefix=/usr --extra-version=‘1~deb9u1’ --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil 55. 34.101 / 55. 34.101
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.101 / 57. 56.101
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]… {[outfile options] outfile}…

Use -h to get full help or, even better, run ‘man ffmpeg’

这个包自带依赖 FFMPEG_jll.jl 应该不是用的系统环境的。
估计是 build 没成功。

你可以试试 GitHub - JuliaIO/FFMPEG.jl: Julia Package for the FFMPEG builder binaries Readme 里提到的各种输出版本信息

  • FFMPEG.exe("-version")
  • ffmpeg_exe("-version")
  • FFMPEG.versioninfo()

不成功就是 build 有问题。


临时用就直接存图,一帧一帧的,然后手工转一下

转换为 mp4
ffmpeg -framerate 60 -i ./frame/%04d.png -c:v libx264 -r 30 out.mp4

  • 这里的 -framerate 指读取时的帧率,这里输出为 -r 30 ,所以相当于 60/30=2 倍加速。
  • -i ./frame/%04d.png 输入文件,注意文件名格式统一。
  • -c:v libx264 x264 编码
  • -r 30 输出 30 fps
  • out.mp4 输出文件名

MP4 转 GIF

ffmpeg -ss 00:00 -t 5 -i out.mp4 -vf "fps=25,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palet
  • -ss 00:00 -t 5 从 00:00 开始,剪辑 5 秒
  • -i out.mp4 输入文件
  • -vf -filter:v 的缩写,视频过滤器,后面的字符串是指定的参数
  • -loop 0 gif 无限循环; -1 不循环(只播放一遍)
  • out.gif 输出文件
1 个赞

非常感谢,确实是FFMPEG 在build的时候出了问题,我重新build了一下FFMPEG,再打开用就好了!

请问怎么重新build啊,我重新add了ffmpeg还是没用

进 Julia 输入 ] build FFMPEG 就行了。

重新build了,还是用不了@gif :sweat_smile:

julia> import FFMPEG
julia> FFMPEG.exe(“-version”)
ERROR: UndefVarError: ffmpeg not defined
Stacktrace:
[1] exe(args::String)
@ FFMPEG ~/.julia/packages/FFMPEG/OUpap/src/FFMPEG.jl:64
[2] top-level scope
@ REPL[5]:1