R中高清动画视频的最佳实践

Cpt*_*emo 7 video animation r knitr

目标是制作一个全屏播放的视频(在1280 x 800显示屏上),两个ggplot垂直排列的视频grid.arrange().例如:

library(ggplot2)
library(gridExtra)
library(animation)
saveVideo({
  for (i in 1:50) {
    data = data.frame(x=rnorm(1000),y=rnorm(1000))
    plot1 = ggplot(data, aes(x=x, y=y)) + geom_point()
    plot2 = ggplot(data, aes(x=y, y=x)) + geom_point()

    grid.arrange(arrangeGrob(plot1, plot2, heights=c(3/4, 1/4), ncol=1))

    ani.options(interval = 0.05, ani.dev="png", ani.height=800)
  }
},video.name = "test_png.mp4", other.opts = "-b 1000k")
Run Code Online (Sandbox Code Playgroud)

然而,全屏幕视频的质量并不令人满意.我试过增加,"-b 1000k"但在我看来它只增加了文件的大小和输出的定义.

  • 我应该使用哪种设备?
  • 如何增加画布的高度(ani.height=800似乎没有产生任何结果)?

编辑:我尝试使用该选项的脚本other.opts = "-s 1280x800".虽然现在图像更宽,但定义仍然很低.这里是从我的1280x800显示屏中截取的屏幕截图(从上到下)(将视频与菜单栏进行比较):

在此输入图像描述:

Raf*_*ael 5

你是专门询问动画包的,但如果你对另一种方法感兴趣,我可能想看看ffmpeg.

这是我用igraph和ffmpeg组成并在youtube上发布的一个剪辑 - 它提供了高达2160p的分辨率:

https://www.youtube.com/watch?v=Aga9UxMPuFA

这将是一个由PNG组成的剪辑,显示两个ggplot()s彼此相邻:

https://www.youtube.com/watch?v=3A4qZdSf7bk

我用来粘合捕获的PNG的ffmpeg命令是:

ffmpeg 
  -framerate 10     # input frame rate
  -i image%03d.png  # image names (image000.png, ..., image999.png)
  -s:v 1280x720     # video size
  -c:v libx264      # encoder
  -profile:v high   # H.264 profile for video
  -crf 20           # constant rate factor
  -pix_fmt yuv420p  # pixel format
  -r 30             # output frame rate
  clip.mp4   # clip file name
Run Code Online (Sandbox Code Playgroud)

有关如何使用ffmpeg的详细信息,请访问:http: //www.joyofdata.de/blog/hd-clips-with-ffmpeg-for-youtube-and-vimeo/