【问题标题】:Import png files and convert to animation(.mp4) in R导入 png 文件并在 R 中转换为动画(.mp4)
【发布时间】:2018-07-12 16:51:55
【问题描述】:

我正在尝试使用 R 中的几个 png 文件创建一个简短的动画。我尝试了包 magick,但它仅在我将它们保存为 .gif 时才有效。当我尝试另存为 .mp4 时,它会生成一个 .mp4 文件,但是一旦打开它,只会显示第一个图像。

我的代码是

  library(magick)
  productPath <- ('/Users/abc/Desktop/products/')
  list <- list.files(productPath, '*.png')
  imagesPath <- paste0(productPath, list)
  images <- image_read(imagesPath)
  animation <- image_animate(images, fps = 20, loop = 1)
  image_write(animation, paste0(productPath, 'test.mp4'))

我发现还有一个名为 animation 的包,但我真的不知道如何使用该包导入 png 文件。有什么解决办法吗?任何一个包都应该没问题。谢谢!

【问题讨论】:

    标签: r animation ffmpeg imagemagick magick-r-package


    【解决方案1】:

    选择的最佳答案要求您先安装ffmpeg。如果您还没有,并且由于管理权限有限,您无法在您的 PC 上安装其他程序,您可以尝试使用 av 软件包。

    无需安装任何其他程序即可使用。

    av::av_encode_video(list.files(productPath, '*.png'), framerate = 30,
                        output = 'test.mp4')
    

    【讨论】:

      【解决方案2】:

      你可以这样做(假设图像在当前目录中):

      library(animation)
      imgs <- list.files(pattern="*.png")
      saveVideo({
        for(img in imgs){
          im <- magick::image_read(img)
          plot(as.raster(im))
        }  
      })
      

      默认创建animation.mp4

      【讨论】:

      • 嗨,Stéphane,非常感谢。这个对我有用。只是一个快速的问题。它生成的视频有很大的白边,我们可以去掉它们吗?
      • @Arthur 这些边距是 png 文件的边距?或者他们是额外的利润?在第一种情况下,您必须修改 png 文件,可能使用 ImageMagick 的 croptrim。第二种情况我不知道。也许通过更改saveVideo 的某些选项(可能是width 选项)。如果您的图片在某处可用,我可以尝试。
      • 我认为它们是额外的边距,因为 png 文件本身没有边距。那么你的文件怎么了?当您运行上面的代码时,它是否在视频中为您提供了额外的边距?
      • @Arthur 我不能说,因为我尝试的图像有白色背景。我将尝试使用其他图像,等等。
      • @Arthur 我试过了。 width 选项没有帮助。事实上saveVideo 运行ffmpeg 程序。我看到的唯一解决方案是在命令行中运行ffmpeg,不使用R。然后应该可以裁剪图像(这个问题已在superuser 上提出)。
      【解决方案3】:
      library(purrr)
      library(magick)
      list.files(pattern = "*.png") %>% 
          map(image_read) %>% # reads each path file
          image_join() %>% # joins image
          image_animate(fps=5) %>% # animates
          image_write("animation.gif") # write to current dir
      

      【讨论】:

        猜你喜欢
        • 2021-08-23
        • 1970-01-01
        • 2019-10-16
        • 2016-08-11
        • 2021-09-22
        • 2021-08-11
        • 2018-02-08
        • 2018-08-25
        • 2013-09-08
        相关资源
        最近更新 更多