【发布时间】:2014-02-11 18:18:53
【问题描述】:
我在使用 Carrierwave-Video gem 上传肖像视频时遇到问题。上传纵向视频(尤其是在移动设备上拍摄的视频)时,它们会顺时针旋转 90 度。在 Carrierwave-Video 文档中,有一个动态配置选项,但我看不到动态传递自定义参数以根据视频方向对视频进行转码的方法。我知道如果我运行以下行,我可以将视频逆时针旋转 90 度:
encode_video(:mp4, custom: "-vf transpose=1")
但是我需要一种可靠的方法来检测视频是否需要旋转。我想知道是否有某种方法可以让我使用 ffmpeg 运行条件参数,该参数仅在视频为纵向时运行。
如果有帮助,这就是我的视频上传器在我的 Rails 应用程序中的样子(出于某种原因,转码过程甚至在检测到视频的方向之前就已经运行):
require 'carrierwave/processing/mime_types'
class VideoPathUploader < CarrierWave::Uploader::Base
include CarrierWave::Video
include CarrierWave::Video::Thumbnailer
include CarrierWave::MimeTypes
process :encode
def encode
Rails.logger.debug "in encode"
video = FFMPEG::Movie.new(@file.path)
video_width = video.width
video_height = video.height
Rails.logger.debug "video widthxheight: #{video.width}x#{video.height}"
aspect_ratio = video_width/video_height
if video_height > video_width
# rotate video
Rails.logger.debug "portrait video"
encode_video(:mp4, custom: "-vf transpose=1", aspect: aspect_ratio)
else
encode_video(:mp4, aspect: aspect_ratio)
end
instance_variable_set(:@content_type, "video/mp4")
:set_content_type_mp4
end
end
【问题讨论】:
标签: ruby-on-rails video ffmpeg carrierwave