目标是制作一个全屏播放的视频(在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")
然而,全屏幕视频的质量并不令人满意。我尝试增加"-b 1000k"
,但在我看来它只会增加文件的大小和输出的定义。
ani.height=800
似乎不会产生任何结果)?编辑:我使用选项other.opts = "-s 1280x800"
尝试了脚本。虽然现在图像更宽,但定义仍然很低。这里是从我的1280x800显示屏中截取的屏幕截图(从上到下)(将视频与菜单栏进行比较):
:
答案 0 :(得分: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
有关如何使用ffmpeg的详细信息,您可以在此处找到: http://www.joyofdata.de/blog/hd-clips-with-ffmpeg-for-youtube-and-vimeo/
答案 1 :(得分:-1)
您可以传递ani.dev="png"
,而不是传递ani.dev = function(...){png(res=75*grain,...)}
,其中grain
是某个数字> 1.如果您将ani.height
(和ani.width
(如果给定)乘以相同因子grain
,则可以通过此因子有效地提高输出的像素分辨率。
N.B。:上面的默认分辨率75
可能与机器有关,我没有看到它的记录。