[日常]mov文件转换为gif

简介: 用ruby调用ffmpeg转换mov文件为gif. Use ruby to call ffmpeg to transform mov to gif file.

因为需要将之前mac下用QuickTime录屏生成的文件(mov格式)转换成gif文件, 便于传到某些博客平台, 于是找到了这个转换工具, 已将原代码的命名中文化并简化. Ruby和视频转换都是新手, 请多指教.

之前JavaScript实现ZLOGO: 前进方向和速度有两个mov文件, 下面为转换出的gif:

"轮胎":
无法粘贴,详见原文:https://zhuanlan.zhihu.com/p/54832362
2019-01-13-logo轮胎

田字格:
2019_01_13_logo_

下面是命名中文化后的源码. 注意: 需将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

2019-01-13

相关文章
|
编译器 API 数据安全/隐私保护
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
1016 3
|
网络安全 Python
There was a problem confirming the ssl certificate
There was a problem confirming the ssl certificate
542 0
|
缓存 网络协议 算法
《跟闪电侠学Netty》阅读笔记 - Netty入门程序解析
《跟闪电侠学Netty》阅读笔记 - Netty入门程序解析
362 0
|
自然语言处理 算法 数据挖掘
自蒸馏:一种简单高效的优化方式
背景知识蒸馏(knowledge distillation)指的是将预训练好的教师模型的知识通过蒸馏的方式迁移至学生模型,一般来说,教师模型会比学生模型网络容量更大,模型结构更复杂。对于学生而言,主要增益信息来自于更强的模型产出的带有更多可信信息的soft_label。例如下右图中,两个“2”对应的hard_label都是一样的,即0-9分类中,仅“2”类别对应概率为1.0,而soft_label
自蒸馏:一种简单高效的优化方式
|
SQL 分布式计算 Java
数据治理之元数据管理的利器——Atlas入门宝典(二)
随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程。作为Hadoop生态最紧密的元数据管理与发现工具,Atlas在其中扮演着重要的位置。但是其官方文档不是很丰富,也不够详细。所以整理了这份文档供大家学习使用。
3182 1
数据治理之元数据管理的利器——Atlas入门宝典(二)
|
6月前
|
人工智能 安全 机器人
5G视频客服落地指南
本文介绍了企业如何开通IMS线路、呼叫中心软硬件升级改造及我司视频客服系统。内容涵盖5G视频通话背景、资费、普及情况与政策支持,详细说明了IMS线路的作用、开通流程及所需材料,呼叫中心升级要点,并展示了我司视频客服系统的功能和优势。视频客服结合5G技术,可显著提升服务效率和客户满意度。欢迎交流,电话:15005600327。
|
前端开发 JavaScript 数据安全/隐私保护
React实现添加多行输入框(点击一行增加一行)
React中实现点击按钮动态添加多行输入框,通过维护一个状态数组并在每次点击时更新数组来控制输入框的增加,每行输入框对应数组中的一个对象。
241 1
|
运维 Kubernetes 监控
深入了解Rancher Desktop设置
通过深入了解Rancher Desktop的设置,你可以更好地利用它来进行Kubernetes应用程序的开发和测试,提高工作效率和开发体验。
468 1
|
定位技术 Python
python高德地图webAPI:地理编码将地址信息转化为经纬度坐标
python高德地图webAPI:地理编码将地址信息转化为经纬度坐标
496 0
python高德地图webAPI:地理编码将地址信息转化为经纬度坐标