From caca1b2e3c56cad4a9107e6dc7ac2a3483a39e35 Mon Sep 17 00:00:00 2001 From: Iain Skett Date: Tue, 8 Oct 2019 00:17:21 +0100 Subject: [PATCH] Generalise fps to support fractional arguments (rational or float) as well as integer. --- src/animation.jl | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/animation.jl b/src/animation.jl index 7d55b567..aa8fe78e 100644 --- a/src/animation.jl +++ b/src/animation.jl @@ -64,10 +64,12 @@ gif(anim::Animation, fn = giffn(); kw...) = buildanimation(anim, fn; kw...) mov(anim::Animation, fn = movfn(); kw...) = buildanimation(anim, fn, false; kw...) mp4(anim::Animation, fn = mp4fn(); kw...) = buildanimation(anim, fn, false; kw...) +ffmpeg_framerate(fps) = "$fps" +ffmpeg_framerate(fps::Rational) = "$(fps.num)/$(fps.den)" function buildanimation(anim::Animation, fn::AbstractString, is_animated_gif::Bool=true; - fps::Integer = 20, loop::Integer = 0, + fps::Real = 20, loop::Integer = 0, variable_palette::Bool=false, show_msg::Bool=true) if length(anim.frames) == 0 @@ -76,20 +78,21 @@ function buildanimation(anim::Animation, fn::AbstractString, fn = abspath(expanduser(fn)) animdir = anim.dir + framerate = ffmpeg_framerate(fps) if is_animated_gif if variable_palette # generate a colorpalette for each frame for highest quality, but larger filesize palette="palettegen=stats_mode=single[pal],[0:v][pal]paletteuse=new=1" - ffmpeg_exe(`-v 0 -framerate $fps -loop $loop -i $(animdir)/%06d.png -lavfi "$palette" -y $fn`) + ffmpeg_exe(`-v 0 -framerate $framerate -loop $loop -i $(animdir)/%06d.png -lavfi "$palette" -y $fn`) else # generate a colorpalette first so ffmpeg does not have to guess it ffmpeg_exe(`-v 0 -i $(animdir)/%06d.png -vf "palettegen=stats_mode=diff" -y "$(animdir)/palette.bmp"`) # then apply the palette to get better results - ffmpeg_exe(` -v 0 -framerate $fps -loop $loop -i $(animdir)/%06d.png -i "$(animdir)/palette.bmp" -lavfi "paletteuse=dither=sierra2_4a" -y $fn`) + ffmpeg_exe(` -v 0 -framerate $framerate -loop $loop -i $(animdir)/%06d.png -i "$(animdir)/palette.bmp" -lavfi "paletteuse=dither=sierra2_4a" -y $fn`) end else - ffmpeg_exe(`-v 0 -framerate $fps -loop $loop -i $(animdir)/%06d.png -pix_fmt yuv420p -y $fn`) + ffmpeg_exe(`-v 0 -framerate $framerate -loop $loop -i $(animdir)/%06d.png -pix_fmt yuv420p -y $fn`) end show_msg && @info("Saved animation to ", fn)