图片压缩神器ffmpeg

2021年5月7日 301点热度 0人点赞 0条评论

最近,附近的摄影公司不知道从哪里弄到了我们的电话号码,提出上门给宝宝拍摄新生儿艺术照留念,打着社区免费服务的幌子拍照后各种狮子大开口,收费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系统实用性放飞自我。

参考:生信分析人员如何系统入门Linux(2019更新版)

图片

点击下面的阅读原文,直达开始学习吧!

82580图片压缩神器ffmpeg

这个人很懒,什么都没留下

文章评论