从R中的一系列剧情创作电影

时间:2009-08-19 06:27:14

标签: graphics video r movieclip movies

是否有一种简单的方法可以通过在R?

中拼接几个图来创建“电影”

7 个答案:

答案 0 :(得分:39)

以下是我使用R帮助找到的一种方法:

创建单个图像框架:

jpeg("/tmp/foo%02d.jpg")
for (i in 1:5) {
  my.plot(i)
}
dev.off()

要制作电影,请先安装ImageMagick。 然后调用以下函数(调用“convert”,我认为是ImageMagick的一部分):

make.mov <- function(){
     unlink("plot.mpg")
     system("convert -delay 0.5 plot*.jpg plot.mpg")
}

或者尝试使用f {{{}}中描述的ffmpeg函数(我发现这样可以得到更清晰的结果): ffmpeg -r 25 -qscale 2 -i tmp / foo%02d.jpg output.mp4

可能需要一些修补,但是一旦安装完毕,这似乎很简单。

当然,无论你看到“jpg”还是“jpeg”,你都可以用GIF或PNG代替你的喜好。

答案 1 :(得分:14)

查看animation创建的Yihui Xie包或EBImage bioconductor包(?animate)。

答案 2 :(得分:10)

我认为您也可以使用caTools库中的write.gif函数执行此操作。您必须先将图形转换为多帧图像。我不知道该怎么做。任何人? Bueller?

动画GIF的经典示例是这段代码,我没有写,但我前段时间blog about

library(fields) # for tim.colors
library(caTools) # for write.gif
m = 400 # grid size
C = complex( real=rep(seq(-1.8,0.6, length.out=m), each=m ), imag=rep(seq(-1.2,1.2, length.out=m), m ) )
C = matrix(C,m,m)

Z = 0
X = array(0, c(m,m,20))
for (k in 1:20) {
Z = Z^2+C
X[,,k] = exp(-abs(Z))
}

image(X[,,k], col=tim.colors(256)) # show final image in R
write.gif(X, 'Mandelbrot.gif', col=tim.colors(256), delay=100)

代码归功于Jarek Tuszynski博士。

答案 3 :(得分:2)

如果将R脚本包装在更大的Perl / Python / etc中。脚本,您可以使用您最喜欢的命令行图像拼接工具拼接图形。

要使用包装器脚本运行R脚本,请使用R CMD BATCH方法。

答案 4 :(得分:0)

我不确定在R中是否可行。当R的数据点导出到MySQL数据库并且Flex / Flash应用程序获取这些数据点并给出动画可视化时,我做了一个项目。

答案 5 :(得分:0)

我使用XNview(免费软件图形查看器)创建幻灯片功能完成了一些电影。我想通过时间显示空间数据的趋势,所以我只创建了一系列图表,按顺序命名[paste()是各种命名calistethics的朋友]然后将它们加载到XNviews幻灯片对话框并设置一些计时器变量,瞧。花了5分钟学习如何操作并生成一些可执行的图形。

答案 6 :(得分:0)

以下是从HDF5文件制作动画GIF“电影”的完整示例。数据应该是三维数组的HDF数据集[Nframes] [Nrows] [Ncolumns]。

#
# be sure to be run as Administrator to install new packages
#
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
install.packages('caTools')
install.packages('fields')

library(caTools)
library(fields)
library(rhdf5)

x = h5read(file="mydata.h5",name="/Images")
write.gif(x,"movie1.gif",col=rainbow,delay=10,flip=TRUE)