image_read(gif) создает другое количество кадров, отличное от исходного gif

#r #imagemagick #gganimate

Вопрос:

Я пытаюсь расположить два участка gganimate бок о бок. Для этого я:

  1. Создайте анимацию с помощью gganimate
  2. Преобразуйте анимацию в магические изображения (с помощью image_read() )
  3. Создайте комбинированный график для каждого кадра с помощью image_append()

Проблема, с которой я сталкиваюсь, заключается в том, что использование image_read() на шаге 2 создает два объекта разных размеров, несмотря на то, что значение nframes в animate() вызове одинаковое. Это приводит к тому, что я не могу соединить два изображения вместе.

Я не буду добавлять весь свой код, так как фреймы данных большие, но по сути это то, что происходит:

 library('ggplot2')
library('gganimate')
library('magick')

#Set the number of frames for the animation
nframes = 513
    
#Create the first plot
a1 <- ggplot(...)   transition_manual()
#Animate the first plot  
anim1 <- animate(a1, nframes = nframes, fps = 9, height = 600, width = 600)

#Create the second plot    
a2 <- ggplot(...)   transition_reveal()
#Animate the second plot    
anim2 <- animate(a2, nframes = nframes, fps = 9, height = 200, width = 600)

#Convert to magick-images    
anim1_magic <- image_read(anim1)
anim2_magic <- image_read(anim2)

#Inspect the results    
length(anim1_magic)
> 513
length(anim2_magic)
> 466
 

Я не могу понять, что происходит: количество кадров одинаковое, но image_read() относится к ним по-разному. Это означает, что я не могу соединить два кадра, используя следующий код:

 anim1_2_magic <- image_append(c(anim1_magic[1], anim2_magic[1]), stack = T)
for(i in 2:nframes) {
  combined <- image_append(c(anim1_magic[i], anim2_magic[i]), stack = T)
  anim1_2_magic <- c(anim1_2_magic, combined)
}
 

Другая странная вещь заключается в том, что иногда кажется, что это работает, но не другие. Я не могу понять, что делает image_read() из документов. Возможно, есть способ подсчитать количество кадров в gganimate gif (чтобы увидеть, есть ли проблема), но я также не могу найти инструмент для этого.