layout: post comments: true title: "[日常]mov文件转换为gif" description: 用ruby调用ffmpeg转换mov文件为gif. Use ruby to call ffmpeg to transform mov to gif file. date: 2019-01-13 00:00:00 -0700
因为需要将之前苹果系统下用 QuickTime 录屏生成的文件(mov 格式)转换成 gif 文件,便于传到某些博客平台,于是找到了这个转换工具,已将原代码的命名中文化并简化. Ruby和视频转换都是新手,请多指教.
之前《JavaScript实现ZLOGO: 前进方向和速度》有两个 mov 文件,下面为转换出的 gif 动画:
"轮胎":
田字格:
下面是命名中文化后的源码. 注意: 需将mov文件置于media
目录下,并自行修改mov文件名
和mov视频大小
值.
# encoding: utf-8
APP_ROOT = File.dirname(__FILE__)
@@mov文件名 = "1214_田字格"
class Converter
@@mov视频大小 = "1032x542" # 查看mov文件属性
# Default path to ffmpeg installed by homebrew
@@ffmpeg = File.join('/', 'usr', 'local', 'bin', 'ffmpeg')
# Default path to gifsicle installed by homebrew
@@gifsicle = File.join('/', 'usr', 'local', 'bin', 'gifsicle')
@@像素格式 = "rgb8"
# Tell ffmpeg to reduce the frame rate from to 30
@@帧数 = 30
# Tell gifsicle to delay 30ms between each gif (in ms)
@@延时 = 3
# Requests that gifsicle use the slowest/most file-size optimization
@@优化 = 3
def initialize(输入, 输出)
命令 = %{#{@@ffmpeg} -i #{输入} -s #{@@mov视频大小} -pix_fmt #{@@像素格式} -r #{@@帧数} -f gif - | #{@@gifsicle} --optimize=#{@@优化} --delay=#{@@延时} > #{输出}}
%x[ #{命令} ]
end
end
# Be careful not to use spa ces.
输入 = File.join(APP_ROOT, 'media', @@mov文件名 + '.mov')
输出 = File.join(APP_ROOT, 'media', @@mov文件名 + '.gif')
Converter.new(输入,输出)
开头需加# encoding: utf-8
,否则报错
invalid multibyte char (US-ASCII)
如果类名改为“转换器”,运行报错如下. 不知是否Ruby的限制.
$ ruby 转换器.rb
转换器.rb:7: class/module name must be CONSTANT