在 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 进行编码
就这些了……
如果您找到其他解决方案,请提出。
谢谢...
更多信息请参考我的文章:
主要问题发生在处理召回时
所有从 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 进行编码
就这些了……
如果您找到其他解决方案,请提出。
谢谢...
更多信息请参考我的文章: