如何使用ruby为视频文件添加类似Instagram的过滤器?

时间:2013-07-16 19:17:17

标签: ruby video-processing

查看标题,是否有可用于向视频文件添加滤镜效果的红宝石宝石或服务?

2 个答案:

答案 0 :(得分:4)

我认为您不会找到可靠且最新的宝石或服务。

Ruby中最好的选择是直接自动使用ffmpeg命令行实用程序。通过这种方式,您可以渲染视频以将音轨和单个帧分离为图像(例如jpeg)。然后使用像rmagick这样的宝石依次对每个帧图像应用效果,最后再次使用ffmpeg将它们全部拼接在一起。这可能是你所希望的低级别工作,但据我所知,这一切都很容易和免费提供。

以下Ruby代码将木炭绘制效果应用于视频:

require 'rmagick'

INPUT_VIDEO = 'Test.mp4'
OUTPUT_VIDEO = 'Charcoal.mp4'

# Extract audio
`ffmpeg -y -i #{INPUT_VIDEO} -ab 64k -ac 2 Audio.aac`

# Extract frames
`ffmpeg -y -i #{INPUT_VIDEO} Frame%04d.png`

# Convert frames
Dir.glob('Frame*.png').each do |frame|
  frame_img = Magick::Image.read( frame )
  new_frame = frame_img[0].gaussian_blur
  new_frame = new_frame.charcoal
  new_frame = new_frame.negate
  new_frame.write( "Converted" + frame )
end

# Stitch back together
`ffmpeg -y -r 25 -i ConvertedFrame%04d.png -i Audio.aac -r 25 #{OUTPUT_VIDEO}`

请注意,上面的示例中省略了许多重要的ffmpeg参数。在示例中音频同步的可能性很低。检查FFmpeg文档!

答案 1 :(得分:1)

一个非常受欢迎的视频操作库是FFmpeg

以下是docs for supported video filters。您必须将它们混合才能获得您想要的效果。

您可以通过包装命令行参数来使用它,但其中一个工具可能有用(我还没有对它们进行过测试)。