在 FFMPEG Rails 中,我应该使用哪些选项来重新缩放视频而不扭曲它们?

What options I should use to rescale video without skewing them in FFMPEG Rails?

主要问题发生在处理召回时

所有从 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

(相当于竖压)


如果你知道解决办法,请帮助我

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

我在 class 中单独需要 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

这将覆盖 carrierwave 的进程并使用 ffmpeg 进行编码

就这些了……

如果您找到其他解决方案,请提出。

谢谢...

更多信息请参考我的文章:

Article about this issue and it's background