bedosh
July 10, 2021, 3:19pm
1
I am trying to get GLMakie record to work.
Trying the example code from http://makie.juliaplots.org/stable/animation.html:
using GLMakie
using Makie.Colors
fig, ax, lineplot = lines(0..10, sin; linewidth=10)
# animation settings
nframes = 30
framerate = 30
hue_iterator = range(0, 360, length=nframes)
record(fig, "color_animation.mp4", hue_iterator; framerate = framerate) do hue
lineplot.color = HSV(hue, 1, 0.75)
end
Results in a window opening with the plot, but saving the animation to a movie file fails. Error given is:
ERROR: LoadError: IOError: write: broken pipe (EPIPE)
Stacktrace:
[1] unsafe_write
@ ./io.jl:646 [inlined]
[2] write(s::Base.PipeEndpoint, a::Matrix{RGB{FixedPointNumbers.N0f8}})
@ Base ./io.jl:669
[3] recordframe!(io::VideoStream)
@ Makie ~/.julia/packages/Makie/ppunD/src/display.jl:426
[4] Record(func::var"#1#2", scene::Figure, iter::StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}; framerate::Int64)
@ Makie ~/.julia/packages/Makie/ppunD/src/display.jl:596
[5] #record#913
@ ~/.julia/packages/Makie/ppunD/src/display.jl:587 [inlined]
[6] top-level scope
@ ~/dev/learn/julia/learnjulia/makie/tutorial.jl:13
[7] include(fname::String)
@ Base.MainInclude ./client.jl:444
[8] top-level scope
@ REPL[1]:1
in expression starting at /home/ben/dev/learn/julia/learnjulia/makie/tutorial.jl:13
I’m looking for advice how to debug where this error is coming from.
Thanks,
Ben
Versioninfo():
Julia Version 1.6.1
Commit 6aaedecc44* (2021-04-23 05:59 UTC)
Platform Info:
OS: Linux (x86_64-pc-linux-gnu)
CPU: AMD Ryzen 9 3950X 16-Core Processor
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-12.0.0 (ORCJIT, znver2)
GLMakie version
(@v1.6) pkg> st --manifest GLMakie
Status `~/.julia/environments/v1.6/Manifest.toml`
[e9467ef8] GLMakie v0.4.2
Seems like a platform specific issue…
If you have some time, this should be an MWE to debug the problem:
using FFMPEG, Colors
using Colors: N0f8
process = @ffmpeg_env open(`$(FFMPEG.ffmpeg) -framerate 30 -f rawvideo -pixel_format rgb24 -r 30 -s:v 500x500 -i pipe:0 -vf vflip -y test.mkv`, "w")
write(process, rand(RGB{N0f8}, 500, 500))
close(process)
wait(process)
bedosh
July 10, 2021, 3:59pm
3
Thanks a lot for the quick reply!
This test gives me the error below. Unfortunately, I still don’t see what is wrong. ffmpeg seems to get invoked fine, but perhaps I am missing something.
I see a “WARNING: library configuration mismatch” in the output, trying to find out where that is coming from. Not sure if it is relevant or not.
A simple ffmpeg command like
ffmpeg -loop 1 -i test.png -c:v libx264 -t 15 -pix_fmt yuv420p -vf scale=320:240 out.mkv
works fine (video is created fine), so my ffmpeg setup is not completly broken at least…
ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 8.1.0 (GCC)
configuration: --enable-cross-compile --cross-prefix=/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu- --arch=x86_64 --target-os=linux --cc=cc --cxx=c++ --dep-cc=cc --ar=ar --nm=nm --objcc=objc --sysinclude=/workspace/destdir/include --pkg-config=/usr/bin/pkg-config --pkg-config-flags=--static --prefix=/workspace/destdir --sysroot=/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root --extra-libs=-lpthread --enable-gpl --enable-version3 --enable-nonfree --disable-static --enable-shared --enable-pic --disable-debug --disable-doc --enable-avresample --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libx264 --enable-libx265 --enable-libvpx --enable-encoders --enable-decoders --enable-muxers --enable-demuxers --enable-parsers --enable-openssl --disable-schannel --extra-cflags=-I/workspace/destdir/include --extra-ldflags=-L/workspace/destdir/lib --enable-nvenc --enable-cuda-llvm
WARNING: library configuration mismatch
avutil configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
avcodec configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
avformat configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
avdevice configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
avfilter configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
swscale configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
swresample configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
postproc configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
libavutil 56. 51.100 / 56. 70.100
libavcodec 58. 91.100 / 58.134.100
libavformat 58. 45.100 / 58. 76.100
libavdevice 58. 10.100 / 58. 13.100
libavfilter 7. 85.100 / 7.110.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 9.100
libswresample 3. 7.100 / 3. 9.100
libpostproc 55. 7.100 / 55. 9.100
ERROR: LoadError: IOError: write: broken pipe (EPIPE)
Stacktrace:
[1] unsafe_write
@ ./io.jl:646 [inlined]
[2] write(s::Base.Process, a::Matrix{RGB{N0f8}})
@ Base ./io.jl:669
[3] top-level scope
@ ~/dev/learn/julia/learnjulia/makie/test.jl:4
[4] include(fname::String)
@ Base.MainInclude ./client.jl:444
[5] top-level scope
@ REPL[1]:1
in expression starting at /home/ben/dev/learn/julia/learnjulia/makie/test.jl:4
``
bedosh
July 10, 2021, 4:16pm
4
I noticed that julia is using its own version of ffmpeg, not the one my system has installed.
For testing, I removed that version (by deleting the ffmpeg file from .julia/artifacts…) and at least the test code you provided works now.
(I cannot play the video, but I have the same issue with any video I create with ffmpeg and pix_fmt rgb24)
When using the code from the tutorial using “record” I get this error now:
ERROR: LoadError: IOError: could not spawn `/home/ben/.julia/artifacts/7f40eeb66d90d3026ae5fb68761c263b57adb840/bin/ffmpeg -loglevel quiet -i '/tmp/jl_OF6ZyS/##video#264.mkv' -crf 20 -c:v libx264 -preset slow -r 30 -profile:v high422 -pix_fmt yuv420p -c:a libvo_aacenc -b:a 128k -y /tmp/jl_SAsXCJ/out.mp4`: no such file or directory (ENOENT)
which is not very surprising, since I removed it, I was hoping it would default to my system ffmpeg automatically.
I have something to work with now at least, trying to find out why the version that comes from julia does not seem to work on my system.
bedosh
July 10, 2021, 8:26pm
5
For now, my workaround is to symlink/.julia/artifacts/7f40eeb66d90d3026ae5fb68761c263b57adb840/bin/ffmpeg to /usr/bin/ffmpeg.
Encountered same issue here. Forturnately, the workaround works for me.
Extra info from Pluto REPL:
From worker 4: dyld: Library not loaded: @rpath/libglib-2.0.0.dylib
From worker 4: Referenced from: /Users/lyx/.julia/artifacts/d30bf8e9f9b903de5e42ffdad9e1118722c08cd8/bin/ffmpeg
From worker 4: Reason: Incompatible library version: ffmpeg requires version 6801.0.0 or later, but libglib-2.0.0.dylib provides version 0.0.0
My Julia:
Julia Version 1.6.0
Commit f9720dc2eb (2021-03-24 12:55 UTC)
Platform Info:
OS: macOS (x86_64-apple-darwin19.6.0)
CPU: Intel(R) Core(TM) i7-8850H CPU @ 2.60GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-11.0.1 (ORCJIT, skylake)