图片压缩神器ffmpeg
最近,附近的摄影公司不知道从哪里弄到了我们的电话号码,提出上门给宝宝拍摄新生儿艺术照留念,打着社区免费服务的幌子拍照后各种狮子大开口,收费3200,后来减去了一些照片,总算是800拿下来了。
临走之前先让他们把照片发给我们了,文件夹有点大,想隔空投送给宝妈手机。但是宝妈手机这些天居然给宝宝拍了几十个视频沾满了手机空间,暂时还舍不得删除。
所以就想着把摄影师给咱的照片压缩一下,一开始是想着使用网页工具,但是照片有点多,一个个上传到网页,压缩后还需下载,非常多不方便。正好想起来了以前的视频编辑人员给我推荐的 ffmpeg 神器!详见教程:视频高清低损压缩命令行实现方案推荐
关键是超级方便,这个 ffmpeg 命令仅仅是需要一个 -i 的参数指定输入的高质量图片,就可以输出一个高清但是文件至少缩小90%大小的图片!
在mac下面安装 ffmpeg 只需要两行代码即可:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install ffmpeg
其实就是借用了brew来安装ffmpeg。
有意思的是,我使用下面的批量操作会报错:
mkdir -p ../yashuo/
ls *JPG |while read id;do ( ffmpeg -i "$id" ../yashuo/"$id");done
这个报错很奇怪,50%的失败率,如下所示:
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
C_5469.JPG: No such file or directory
ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
如果是成功,会有:
Output #0, image2, to '../yashuo/DSC_5471.JPG':
Metadata:
encoder : Lavf58.20.100
Stream #0:0, 0, 1/25: Video: mjpeg, 1 reference frame, yuvj422p(pc, center), 7360x4912, 0/1, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc58.35.100 mjpeg
Side data:
cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
Clipping frame in rate conversion by 0.000008
[image2 @ 0x7fdf04809a00] Opening '../yashuo/DSC_5471.JPG' for writing
[file @ 0x7fdefec0dcc0] Setting default whitelist 'file,crypto'
[AVIOContext @ 0x7fdefec0df40] Statistics: 0 seeks, 5 writeouts
[out_0_0 @ 0x7fdf00b06f00] EOF on sink link out_0_0:default.
No more output streams to write to, finishing.
frame= 1 fps=0.0 q=14.9 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=0.0854x
video:1128kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Input file #0 (DSC_5471.JPG):
Input stream #0:0 (video): 1 packets read (22754101 bytes); 1 frames decoded;
Total: 1 packets (22754101 bytes) demuxed
Output file #0 (../yashuo/DSC_5471.JPG):
Output stream #0:0 (video): 1 frames encoded; 1 packets muxed (1154750 bytes);
Total: 1 packets (1154750 bytes) muxed
1 frames successfully decoded, 0 decoding errors
我换了一种方式:
ls *jpg |while read id;do ( echo ffmpeg -i "$id" ${id}_new.jpg);done > tmp.sh
bash tmp.sh
但是仍然是报错!
后来呢,只好复制这几百行命令,然后一股脑的粘贴到命令行客户端,然后就莫名其妙的成功了。
也仅仅是说单独的每个命令都是可以运行,但是组合成为了脚本就会出现部分失败!
压缩效果如下:
319M ./压缩版高清
5.6G ./底片
我看了看,压缩前后基本上没有肉眼可见的差别,轻轻松松就达到了20倍的压缩比例!
如果你看不懂上面的代码,说明你可能是需要学习Linux基础哦!
Linux的6个阶段也跨越过去 ,一般来说,每个阶段都需要至少一天以上的学习:
第1阶段:把linux系统玩得跟Windows或者MacOS那样的桌面操作系统一样顺畅,主要目的就是去可视化,熟悉黑白命令行界面,可以仅仅以键盘交互模式完成常规文件夹及文件管理工作。 第2阶段:做到文本文件的表格化处理,类似于以键盘交互模式完成Excel表格的排序、计数、筛选、去冗余,查找,切割,替换,合并,补齐,熟练掌握awk,sed,grep这文本处理的三驾马车。 第3阶段:元字符,通配符及shell中的各种扩展,从此linux操作不再神秘! 第4阶段:高级目录管理:软硬链接,绝对路径和相对路径,环境变量。 第5阶段:任务提交及批处理,脚本编写解放你的双手。 第6阶段:软件安装及conda管理,让linux系统实用性放飞自我。