我应该使用哪些选项来重新缩放视频,而又不使它们偏离FFMPEG Rails?

时间:2019-06-03 14:39:44

标签: ruby-on-rails ffmpeg carrierwave

主要问题发生在处理召回

从Apple iOS上传的所有视频都可以正常处理。 但是,所有从Android设备上传的视频都出现了偏差。

在我的rails应用程序中,我正在使用Carrierwave:Video和FFMPEG在延迟的工作帮助下处理视频。

class VideoUploader < CarrierWave::Uploader::Base

  include CarrierWave::Video
  include CarrierWave::Video::Thumbnailer

  # For carrierwave_backgrounder
  include ::CarrierWave::Backgrounder::Delay

  version :rescaled do
    process encode_video: [
      :mp4,
      resolution: "640x480", # Aspect ratio is preserved automatically
      audio_codec: "aac",
      custom: "-strict experimental -q:v 0 -preset slow -g 30",
      callbacks: { after_transcode: :set_success }
    ]
  end


  version :thumb do
    process thumbnail: [{format: 'png', quality: 10, size: 400, strip: true, logger: Rails.logger}]
    def full_filename for_file
      png_name for_file, version_name
    end
  end

这是正确的视频屏幕截图

https://drive.google.com/open?id=1D0aNWcVxtL6DbTwBmWWIGzUUuyEyWNOG

这是使用FFMPEG进行视频处理后的视频屏幕截图

https://drive.google.com/open?id=1vilExHoan2UuRPH9RbiZig58H1TwyewA

(就像垂直按下一样)


如果您知道解决方法,请帮助我

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决方案,这就是...

我在课堂上单独需要FFMPEG库。

require 'streamio-ffmpeg'

然后调用自定义函数来完成编码工作。

version :rescaled do
 process :encode
end

然后ENCODE方法将创建ffmpeg视频对象并进行转码。

def encode
  movie = ::FFMPEG::Movie.new(current_path)
  tmp_path = File.join( File.dirname(current_path),   "tmpfile.mp4" )
  options = "[define the options you want]"
  movie.transcode(tmp_path, options)
  File.rename tmp_path, current_path
end

这将覆盖载波的过程,并使用ffmpeg进行编码

就这些了……

请找到其他解决方案。

谢谢...

请参阅我的文章以获取更多信息:

Article about this issue and it's background