1

因为我想使用 HTML5 视频,所以我需要将用户上传的视频转换为多个编解码器。我正在关注本教程: http: //jimneath.org/2008/06/03/converting-videos-with-rails-converting-the-video/但它只输出 FLV,一种我根本不想要的格式.

我知道我可以添加更多 FFmpeg 命令并多次转换,但问题在于数据库和视图。如何source_file_name在数据库中定义多个 s,如何指定@video.source.url我想要的格式?我应该对Video模型进行子类化,为每种类型添加更多表列还是其他?

4

2 回答 2

3

Paperclip 允许您指定多种样式。一般用于指定上传图片的多种尺寸;Paperclip 为每种样式处理一次图像,并相应地将它们放置在文件系统中。通过为您的样式和子类指定不同的视频格式Paperclip::Processor,您可以创建自己的视频格式。在你的模型中,你会做这样的事情:

has_attached_file :video, :styles => { :mpeg, :ogg, :wmv }, :processors => [:my_custom_processor]

然后创建一个自定义处理器,根据每种样式运行正确的 FFmpeg 命令。有关更多信息,请参阅文档,但这里有一个片段:

回形针处理器允许您在以任何可能的方式附加附加文件时对其进行修改。Paperclip 本身为其包含的缩略图处理器使用命令行程序,但不需要定制处理器来效仿。

处理器需要在 Paperclip 模块中定义,并且还需要是 Paperclip::Processor 的子类。只有一种方法必须实现才能正确地成为子类:#make,但#initialize 也可能有用。两种方法都接受 3 个参数:将要操作的文件(它是 File 的一个实例)、在 has_attached_file 的样式散列中定义的选项散列以及 Paperclip::Attachment 本身。

所有#make 需要返回的是一个包含处理结果的 File 实例(Tempfile 是可以接受的)。

有关在处理器中使用命令行实用程序的更多信息,请参阅 Paperclip.run。

当您创建指向回形针附件的链接时,您传递样式以确定链接到哪个:

<%= link_to "mpeg video", @model.video.url(:mpeg) %>
<%= link_to "ogg video", @model.video.url(:ogg) %>
于 2011-02-21T02:58:05.190 回答
1

我建议您试用回形针-ffmpeg gem。

于 2011-06-13T09:37:48.810 回答