windows下的gjf转到Linux,通过命令行将 MP4 转换成 gif
8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
写博客时常常需要将 MP4 视频转换成 gif,方便插入。网上有挺多网站可以在线转,但是质量一般,有的还有文件大小或数量限制,其中,在 Linux 命令行下,很容易就能实现这个功能。
工具选择:截取视频中的图片:mplayer
合并处理 gif:imagemagick
安装命令1
2sudo apt-get install mplayer
sudo apt-get install imagemagick
完成转换需要完成三项工作:将视频转换为 jpeg,将 jpeg 合成 gif,压缩 gif 文件
假设 MP4 文件在 ~/Video/ 目录下,文件名为 screenrecorder.mp41
2cd ~/Video
mplayer -ao null screenrecorder.mp4 -vo jpeg:outdir=.tmp
-ao null 表示不输出音频
-vo jpeg 表示将视频输出为 jpeg
:outdir=.tmp 表示将 jpeg 输出到当前目录下的 .tmp 文件夹中
接下来需要用 imagemagick 将多张图片合成 gif。1convert .tmp/*.jpge screen.gif
这个操作极为耗时,而且会报下面一个错误:
这个错误之所以出现,是因为 ImageMagick 在其安全策略配置文件中,将 ImageMagick-6 的内存使用限制为 256MB,导致 ImageMagick 不能获得足够的内存来完成图片合成。
ImageMagick 的安全策略配置文件位置可以通过 identify -list policy 获取,一般为 /etc/ImageMagick-6/policy.xml。然后用你喜欢的编辑器打开文件找到下面一行进行编辑即可,注意,编辑此文件需要管理员权限。1
具体改成多少可以看你机器的配置而定。
直接合成的 gif 图片尺寸过大,以我 28 秒录屏为例,生成 865 张图片,合成的 gif 体积高达 109.1MB,如果直接使用,简直是不可想象的,因此还需要使用 ImageMagick 进一步压缩。1
2
3
4
5
6
7
8原尺寸
ls -l screen.gif
-rw-rw-r-- 1 zeamonk zeamonk 109146833 10月 4 22:48 screen.gif
压缩
convert screen.gif -fuzz 15% -layers Optimize 1.gif
压缩后尺寸
ls -l 1.gif
-rw-rw-r-- 1 zeamonk zeamonk 1.7M 10月 5 01:19 1.gif
-fuzz 选项启用后会将相近的颜色会被压缩为同一种颜色,后面的值表示颜色相近区域的范围,数越大代表范围越大,图片失真越严重。实测 15% 的情况下失真是可以接收的,如果将 -fuzz 设为 20%,文件尺寸可以进一步压缩到 900k,但失真会比较严重。
下图是 15% 压缩的图片
为了方便使用,还是写个脚本吧。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 生成 jpg 文件
echo "Generate pictures..."
out1=`mplayer -ao null $1 -vo jpeg:outdir=.tmp > /dev/null`
# 预处理,对文件进行压缩
echo "Compress picture..."
out2=`find .tmp/*.jpg -exec convert {} -strip -resize 75% -quality 75% {} ;`
# 合成 gif
echo "Start converting jpgs to gif..."
out3=`convert .tmp/*.jpg -delay 20 .tmp/tmp.gif`
# 压缩 gif
echo "Optimize gif..."
out4=`convert .tmp/tmp.gif -fuzz 15% -layers Optimize output.gif`
# 清理残余文件
echo "Clear tmp files..."
rm .tmp/* > /dev/null 2>&1
echo "Completed..."
关注下公众号好不好
windows下的gjf转到Linux,通过命令行将 MP4 转换成 gif相关推荐
- linux c十六进制转十进制函数,用Linux/Unix命令把十六进制转换成十进制(转)
那天写个脚本,需要把十六进制的数字转成十进制的打出来,发现不知道要怎么弄,搜一下,原来还是很简单的,比用C语言什么的容易多了,就一些现成的命令就解决了. 先列两种简单的方法: 1) echo 自己就能 ...
- Linux通过命令行将英文改成中文
1.首先查看当前系统是否有中文语言包 locale -a 如果没有zh_CN.utf8,就需要下载中文语言包,否则,如果有中文语言包,跳过第二步. 2.安装中文语言包 Ubuntu: sudo apt ...
- Windows 下目录及文件向Linux同步
本文解决的是Windows 下目录及文件向Linux同步的问题,Windows向 Windows同步的请参考:http://www.idcfree.com/article-852-1.html 环境介 ...
- 将Windows下的文件同步到Linux下
需求:把Windows下的某些文件自动传送到Linux指定目录下 实现: 1. Windows下安装 WinSCP工具,并把Liunx服务器信息保存 2. 编写脚本,实现双击工具就把Windows下的 ...
- windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...
动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a) 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.例如:libhello.so libhello ...
- 如何将Windows下的文件传到Linux中
将Windows下的文件传到Linux,这里有一款叫做WinSCP的软件,感觉很好用,能直接拖拉过去的. 先给出它的官方链接https://winscp.net/eng/download.php 下载 ...
- linux添加windows字体文件夹里,如何把Windows下的字体添加到Linux中
如何把Windows下的字体添加到Linux中 Linux(Fedora/Ubuntu/CentOS)的字体实在不尽如人意,而且在网页及文档显示时很多字无法显示出来,特别多的空白和乱码,其实,我们可以 ...
- windows下的可执行程序可以再linux下运行吗?
windows下的可执行程序可以再linux下运行吗? 答案:不能 原因有以下: (1) 可执行的二进制文件包含了:机器指令.数据资源.程序运行资源(物理的和虚拟的内存空间.进程.线程资源等).因此说 ...
- Windows下使用VSCode远程搭建Linux开发平台
Windows下使用VSCode远程搭建Linux开发平台 前言 1.开启Windows的SSH功能 1.1.打开设置,进入应用 1.2.进入可选功能 1.3.安装SSH功能 2.开启Linux的SS ...
最新文章
- 斯坦福马腾宇:用显式正则器提升深度神经网络的泛化能力
- ICLR 2021 | 基于自监督学习的小样本分类,代码已开源
- LeetCode Water and Jug Problem(巧妙转换为gcd问题)
- zookeeper应用实例
- SAP Fiori Service Modeler
- windowbuilder怎么加背景图_小红书引流:爆款笔记封面图怎么做?(内附教程)...
- md5不是对称密码算法_密码学中的消息摘要算法5(MD5)
- flv 开源 修复_如何修复开源软件中的错误
- 大一计算机应用的实验报告,大一《计算机应用基础》实验报告1.doc
- MATALAB动态爱心代码
- idea调代码时返回到上一步的快捷键
- linux下隐藏文件 和 显示隐藏文件命令
- Android 模拟器的本地ip
- 手Q游戏中心上线 完美释放娱乐基因
- python爬虫scrapy爬取新闻标题及链接_python爬虫框架scrapy爬取梅花网资讯信息
- oj苹果和虫子c语言,用C++实现苹果和虫子问题
- 【目标跟踪】Long-term Correlation Tracking 阅读笔记
- ios打没有签名的ipa包
- ffmpeg 拼接mp4_通过 ffmpeg 无损剪切/拼接视频
- android imgView.setImageBitmap(bitmap) 空白图片