Использование Paperclip с FFmpeg и несколькими форматами вывода: как сохранить в базе данных и показать в представлении определенный формат вывода?

Поскольку я хочу использовать видео в формате HTML5, мне нужно конвертировать видео, загруженные пользователем, в несколько кодеков. Я следую этому руководству: http://jimneath.org/2008/06/03/converting-videos-with-rails-converting-the-video/, но он выводит только FLV, формат, который мне вообще не нужен.

Я знаю, что могу добавить больше команд FFmpeg и конвертировать несколько раз, но проблема заключается в базе данных и представлении. Как я могу определить несколько source_file_name в БД и как я могу указать в @video.source.url, какой формат я хочу? Должен ли я создать подкласс модели Video, добавить больше столбцов таблицы для каждого типа или что-то еще?


person Community    schedule 20.02.2011    source источник


Ответы (2)


Скрепка позволяет указать несколько стилей. Как правило, это используется для указания нескольких размеров загружаемых изображений; Paperclip обрабатывает изображение один раз для каждого стиля и соответствующим образом помещает их в файловую систему. Указав различные видеоформаты для своих стилей и создав подклассы Paperclip::Processor, вы можете создавать свои собственные видеоформаты. В вашей модели вы бы сделали что-то вроде этого:

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

А затем создайте собственный процессор, который запускает правильную команду FFmpeg на основе каждого стиля. См. документацию для получения дополнительной информации, но вот фрагмент:

Процессоры Paperclip позволяют вам изменять вложенные файлы, когда они прикреплены, любым доступным вам способом. Сама Paperclip использует программы командной строки для встроенного процессора миниатюр, но пользовательские процессоры не обязаны следовать их примеру.

Процессоры должны быть определены внутри модуля Paperclip, а также должны быть подклассом Paperclip::Processor. Есть только один метод, который вы должны реализовать, чтобы правильно быть подклассом: #make, но #initialize также может быть полезен. Оба метода принимают 3 аргумента: файл, с которым будут работать (который является экземпляром File), хэш опций, которые были определены в хеше стиля has_attached_file, и сам Paperclip::Attachment.

Все, что должен вернуть #make, — это экземпляр File (допустим Tempfile), который содержит результаты обработки.

См. документ Paperclip.run для получения дополнительной информации об использовании утилит командной строки из процессоров.

Когда вы создаете ссылку на вложение Paperclip, вы передаете стиль, чтобы определить, на что ссылаться:

<%= link_to "mpeg video", @model.video.url(:mpeg) %>
<%= link_to "ogg video", @model.video.url(:ogg) %>
person Michelle Tilley    schedule 21.02.2011
comment
Только что понял. Вы можете написать интерполяции для создания расширения на основе стиля... - person Nikhil Gupte; 09.03.2011

Я предлагаю вам попробовать гем paperclip-ffmpeg.

person Omar Ali    schedule 13.06.2011