Skip to contents

Renderer functions that combine individual frame images into a final animation file. These are factory functions that return the actual rendering function.

Usage

gifski_renderer_3d(file = NULL, loop = TRUE)

av_renderer_3d(file = NULL, vfilter = "null", codec = NULL)

file_renderer_3d(dir = tempdir(), prefix = "ggcube_frame", overwrite = FALSE)

Arguments

file

Output file path. If NULL, a temporary file is used.

loop

Logical. Should the GIF loop? Default is TRUE.

vfilter

A video filter string for ffmpeg (passed to av).

codec

Video codec name. Default lets av choose.

dir

Directory to copy frame files into. Defaults to a session temporary directory (tempdir()). For animations you want to keep, pass an explicit directory.

prefix

Filename prefix for copied frame files.

overwrite

Logical. Overwrite existing files? Default is FALSE.

Value

A function with signature function(frames, fps, width, height) that produces the animation output.

Examples

# \donttest{
p <- ggplot() +
  geom_function_3d(
    fun = function(x, y) sin(x) * cos(y),
    xlim = c(-pi, pi), ylim = c(-pi, pi),
    fill = "steelblue", color = "steelblue") +
  coord_3d()

# GIF output (default)
animate_3d(p, yaw = c(0, 360), renderer = gifski_renderer_3d())
#> Rendering 100 frames...
#> Assembling animation...

# Video output
animate_3d(p, yaw = c(0, 360), renderer = av_renderer_3d())
#> Rendering 100 frames...
#> Assembling animation...

# Keep individual frame files in a chosen directory
animate_3d(p, yaw = c(0, 360),
    renderer = file_renderer_3d(dir = file.path(tempdir(), "my_frames")))
#> Rendering 100 frames...
#> Assembling animation...
#>   [1] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0001.png"
#>   [2] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0002.png"
#>   [3] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0003.png"
#>   [4] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0004.png"
#>   [5] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0005.png"
#>   [6] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0006.png"
#>   [7] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0007.png"
#>   [8] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0008.png"
#>   [9] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0009.png"
#>  [10] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0010.png"
#>  [11] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0011.png"
#>  [12] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0012.png"
#>  [13] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0013.png"
#>  [14] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0014.png"
#>  [15] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0015.png"
#>  [16] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0016.png"
#>  [17] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0017.png"
#>  [18] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0018.png"
#>  [19] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0019.png"
#>  [20] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0020.png"
#>  [21] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0021.png"
#>  [22] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0022.png"
#>  [23] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0023.png"
#>  [24] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0024.png"
#>  [25] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0025.png"
#>  [26] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0026.png"
#>  [27] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0027.png"
#>  [28] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0028.png"
#>  [29] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0029.png"
#>  [30] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0030.png"
#>  [31] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0031.png"
#>  [32] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0032.png"
#>  [33] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0033.png"
#>  [34] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0034.png"
#>  [35] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0035.png"
#>  [36] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0036.png"
#>  [37] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0037.png"
#>  [38] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0038.png"
#>  [39] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0039.png"
#>  [40] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0040.png"
#>  [41] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0041.png"
#>  [42] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0042.png"
#>  [43] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0043.png"
#>  [44] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0044.png"
#>  [45] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0045.png"
#>  [46] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0046.png"
#>  [47] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0047.png"
#>  [48] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0048.png"
#>  [49] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0049.png"
#>  [50] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0050.png"
#>  [51] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0051.png"
#>  [52] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0052.png"
#>  [53] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0053.png"
#>  [54] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0054.png"
#>  [55] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0055.png"
#>  [56] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0056.png"
#>  [57] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0057.png"
#>  [58] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0058.png"
#>  [59] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0059.png"
#>  [60] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0060.png"
#>  [61] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0061.png"
#>  [62] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0062.png"
#>  [63] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0063.png"
#>  [64] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0064.png"
#>  [65] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0065.png"
#>  [66] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0066.png"
#>  [67] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0067.png"
#>  [68] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0068.png"
#>  [69] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0069.png"
#>  [70] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0070.png"
#>  [71] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0071.png"
#>  [72] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0072.png"
#>  [73] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0073.png"
#>  [74] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0074.png"
#>  [75] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0075.png"
#>  [76] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0076.png"
#>  [77] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0077.png"
#>  [78] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0078.png"
#>  [79] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0079.png"
#>  [80] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0080.png"
#>  [81] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0081.png"
#>  [82] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0082.png"
#>  [83] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0083.png"
#>  [84] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0084.png"
#>  [85] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0085.png"
#>  [86] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0086.png"
#>  [87] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0087.png"
#>  [88] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0088.png"
#>  [89] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0089.png"
#>  [90] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0090.png"
#>  [91] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0091.png"
#>  [92] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0092.png"
#>  [93] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0093.png"
#>  [94] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0094.png"
#>  [95] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0095.png"
#>  [96] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0096.png"
#>  [97] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0097.png"
#>  [98] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0098.png"
#>  [99] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0099.png"
#> [100] "/tmp/RtmpL9dXYx/my_frames/ggcube_frame_0100.png"
#> attr(,"class")
#> [1] "frame_files_3d" "character"     
# }