[日常]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

相关文章
|
XML 编解码 Java
我为什么放弃Spring Boot 中的 RestTemplate?选择 Retrofit
我为什么放弃Spring Boot 中的 RestTemplate?选择 Retrofit
530 0
|
10月前
|
弹性计算 运维 安全
ECS还是轻量应用服务器,有什么区别?看完评测你就知道了!
阿里云ECS与轻量应用服务器有何区别?ECS适合企业级高负载场景,功能全面、灵活扩展;轻量服务器基于ECS优化,门槛低、易运维,适合个人开发者搭建博客、测试环境等轻量应用。从镜像、网络、计费到使用限制,本文全面对比二者差异,助你按需选择。
|
2月前
|
机器学习/深度学习 编解码 监控
包裹计数目标检测数据集(约6000张单类别YOLO标注已划分)源码分享
本数据集含约6000张物流实景图像,专为包裹自动计数设计,聚焦密集堆叠、遮挡严重、尺度多变等难点,采用单类别YOLO格式标注并完成标准划分(train/val/test),开箱即用于YOLOv5/v8/v9等主流模型训练,助力智能仓储、快递分拣等场景高效落地。
|
10月前
|
数据采集 机器学习/深度学习 数据可视化
基于python大数据的小说数据可视化及预测系统
本研究基于Python构建小说数据可视化与预测系统,整合多平台海量数据,利用爬虫、数据分析及机器学习技术,实现热度趋势预测与用户偏好挖掘。系统结合Django、Vue等框架,提供动态交互式可视化界面,助力平台精准运营、作者创作优化与读者个性化阅读体验,推动网络文学数据智能化发展。
|
9月前
|
监控 安全 网络安全
​动态 IP 和静态 IP 的区别?
动态IP适合家庭用户,成本低、隐私性好;静态IP稳定可靠,适用于企业服务。巨量HTTP代理融合两者优势,提供高匿名、全球覆盖的IP池,支持灵活切换与安全防护,提升网络效率与稳定性,满足多样需求。
|
5月前
|
人工智能 自然语言处理 安全
【含新版安装包】零代码纯本地 OpenClaw Windows 安装详细步骤
2026最新版OpenClaw(小龙虾)Windows一键部署教程:零代码、纯本地、10分钟养出全能数字员工!支持文件整理、浏览器自动化、微信办公等,全程可视化操作,小白友好,隐私安全有保障。(239字)
【含新版安装包】零代码纯本地 OpenClaw Windows 安装详细步骤
|
4月前
|
运维 数据可视化 调度
企业出海选香港服务器还是新加坡服务器?
随着跨境电商、海外APP、国际SaaS、游戏出海及品牌独立站快速增长,出海服务器的部署已成为企业全球架构的关键一环。在亚太,香港与新加坡是最热门的两大节点,但二者在网络覆盖、延迟和适用场景上有着明显差异。选对节点,能大幅提升全球访问体验;一旦选错,则可能导致大陆访问卡顿、东南亚延迟升高、国际线路绕路,直接影响转化
445 0
|
10月前
|
JSON 前端开发 测试技术
企业微信协议接口:TLV 打包与解包实现
企业微信协议接口采用TLV(Tag-Length-Value)格式以提升传输效率。本文详解其帧头结构、TLV打包解包实现,并对比Protobuf,展示在高并发下更低的解析开销与内存占用,是构建高性能网关及解析企业微信iPad协议的关键基础。(238字)
374 0
|
C# 图形学 开发者
【Unity3D实例-功能-镜头】第三人称视觉
本文介绍了Unity中常用的第三人称视角实现方法,适用于角色扮演游戏。内容包括安装Cinemachine插件、为角色添加面朝向点、创建虚拟摄像机、编写控制脚本及测试运行,帮助开发者快速掌握镜头控制技巧。
657 0
|
11月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
413 4