ImageMagic、PNGNQ、FFMPEG处理、转换和压缩图形及视频文件

异或两图

cvt 00.png -compose xor 03.png -geometry 92x92+0+0 -composite 03new.png

 

FOR %a in (??.png) DO cvt circle.png -compose xor %a -geometry 92x92+0+0 -composite XOR/%a

 

得到负片

convert input.png -negate output.png

 

缩小图片以固定高度(宽度300是很宽的,只保证不超过)并保持宽高比不变:

FOR %a in (*.png) DO cvt %a -resize 300x60 H60/%a

 

 

FOR %a in (*.png) DO cvt %a -resize 300x48 H48/%a

 

FOR %a in (*.png) DO cvt %a -resize 300x32 H32/%a

FOR %a in (*.png) DO cvt %a -resize 300x24 H24/%a

 

PNG格式可以进一步减少尺寸:

MD C256

FOR %a in (*.png) DO pngnq -n 256 -Q f -s 1 -e .png -d C256 %a

FOR %a in (*.png) DO pngnq -n 64 -Q f -s 1 -e .png -d C64 %a

FOR %a in (*.png) DO pngnq -n 32 -Q f -s 1 -e .png -d C32 %a

FOR %a in (*.png) DO pngnq -n 16 -Q f -s 1 -e .png -d C16 %a

颜色数量继续减少会压缩处理快些,图片尺寸也进一步缩小

pngnq -n 64 -Q f -s 1 -e .png -d C64 SenLinZiYuan.png

 

极端情况:黑白图

FOR %a in (*.png) DO pngnq -n 2 -Q f -s 1 -e .png -d C256 %a

 

FOR %a in (DSC_9830.JPG,DSC_0701.JPG,DSC_1118.JPG,DSC_9577.JPG) DO convert %a -resize 6000x2400 -quality 92 768K/%a

 

FOR %a in (*.jpg) DO cvt %a -resize 33.33% -quality 98 SMALL/%a

FOR %a in (*.jpg) DO magick %a -resize 50% -quality 99 SMALL/%a

FOR %a in (*.jpg) DO magick %a -resize 33.33% -quality 98 SMALL/%a

FOR %a in (*.jpg) DO magick %a -resize 33.33% -quality 100 SMALL/%a

 

如果还需要调整方向,处理手机拍摄可能出现的图片方向问题:

FOR %a in (*.jpg) DO cvt %a -auto-orient -resize 33.33% -quality 98 SMALL/%a

FOR %a in (*.jpg) DO magick %a -auto-orient -resize 50% -quality 98 SMALL/%a

FOR %a in (*.jpg) DO magick %a -auto-orient -resize 33.33% -quality 100 SMALL/%a

 

合并两个图片(第二个为带有透明度的png格式):

convert oldPngFile.jpg -compose over circle_mask.png -composite composed_result.jpg

 

直接转换成灰度图像:

cvt dsc_8845.JPG  -fx 0.3*r+0.55*g+0.15*b GRA_8845.jpg

cvt dsc_5860.JPG  -fx 0.299*r+0.587*g+0.114*b GRA_5860-BEST.jpg

FOR %a in (*.jpg) DO cvt %a -fx 0.3*r+0.55*g+0.15*b  Gray/%a

 

通常的公式为:Gray = 0.299×Red + 0.587×Green + 0.114×Blue

 

最精确的公式为:Gray = (0.2126×Red2.2 + 0.7152×Green2.2 + 0.0722×Blue2.2)1/2.2

 

但这个没法实用,太慢了,我觉得可以这样近似:

cvt dsc_5860.JPG -fx sqrt(0.2126*r*r+0.7152*g*g+0.0722*b*b) GRA_5860-Best.jpg

下次把上面的结果与下面这个对照比较看看:

cvt dsc_5860.JPG -fx sqrt(0.22*r*r+0.7*g*g+0.08*b*b) GRA_5860-Best.jpg

直接转换成黑白二值图像:

FOR %a in (*.jpg) DO cvt %a -monochrome BlackWhite/%a

 

改变解析度(DPI)元数据:

ImageMagick command for change the resolution:

convert -density 1200 -units PixelsPerInch DSC_0017.JPG DPI1200.JPG

convert -density 300 -units PixelsPerCentiMeter FolderOpen.gif FolderOpen-300DPCM.png

 

如果用resample开关的话,图片的像素尺寸也会跟着变,不太合适:

convert -resample 1200 -units PixelsPerInch DSC_0017.JPG DPI1200larger.JPG

 

exiftool可以做到只改变JFIF头中的DPI数据而不影响图像质量(不重新编码图像数据)

./exiftool -jfif:Xresolution=500 -jfif:Yresolution=500 t/images/DSC_0017_ORIG.JPG

对于TIFF格式是这样的:

 ./exiftool -v2 -exif:XResolution=400 -exif:YResolution=400 1200DPI.tiff

 

./exiftool -exif:Xresolution=400 -exif:Yresolution=400  DSC_0017.TIFF

 

RGB <=>CMYK 转换

G:\Photo>cvt -colorspace CMYK DSC_0017.JPG CMYK.JPG

G:\Photo>cvt -colorspace RGB CMYK.JPG RGB.JPG

 

转换mp4为jpg

需要安装ffmpeg

 yum install ffmpeg ffmpeg-devel

convert 2.mp4[50] 2.jpg

 

剪裁部分图片:剪裁出宽600高400的图像,起始偏移为X=100,Y=50:

cvt -crop 600x400+100+50 G:/Photo/DSC_0017_ORIG.JPG G:/Photo/Croped.JPG

剪裁要注意的是,如果是GIF图片,需要加上一个repage的参数才能确保尺寸真正被裁减小,如下所示:

cvt -crop 400x300+200+100 -repage 400x300+0+0 Frame1.gif Frame1_croped_400x300.gif

repage GIF 调整的应该是GIF文件的06~07(Width)和08~09(Height),高位在高字节处

 

设置某颜色为透明色(白色为例)

cvt kamo_title.png -transparent white kamo_title_trans.png

 

分离颜色通道:使用-channel 和 –separete 参数

convert ..\SampleImages\Lena.png -channel R -separate Lena_R.png 

convert ..\SampleImages\Lena.png -channel G -separate Lena_G.png 

convert ..\SampleImages\Lena.png -channel B -separate Lena_B.png

另外一种分离方式:同时提取三个通道。

convert ..\SampleImages\Lena.png  -separate Lena_RGB_%d.png

合并颜色通道:使用-combine 参数

convert Lena_R.png Lena_G.png Lena_B.png -combine Lena2.png

 

 

批量转换MOV视频文件为MP4格式,假设原始宽度为1920(可以改为960等等,以便缩小):

ls *MOV|while read id;do (ffmpeg -i "$id" -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1920:-1" -acodec libmp3lame -ab 128k "${id%%.*}.mp4" );done

 

ls *MOV|while read id;do (ffmpeg -i "$id" -vcodec libx264 -preset fast -crf 20 -y -vf "scale=960:-1" -acodec libmp3lame -ab 128k "${id%%.*}.mp4" );done

 

ls *mov|while read id;do (ffmpeg -i "$id" -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1920:-1" -acodec libmp3lame -ab 128k "${id%%.*}.mp4" );done

 

ffmpeg -i test.flv -vf curves=vintage out.flv

类似Photoshop里面的曲线调整,这里的vintage是ffmpeg自带的预设,实现复古画风,还可以直接加载其他的Photoshop预设文件并在其基础上加以调整,如下:

ffmpeg -i test.flv -vf curves=psfile='test.acv':green='0.45/0.53' out.flv

其中的acv预设文件实现的是加强对比度,再次基础上调整绿色的显示效果,以上两个命令的最终效果如下

 

得到详细的图片信息:

 

缩小视频分辨率:

D:\Photo\2020-01-04MobileCamera>ffmpeg -i VID_20191229_131031.mp4 -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1024:-1" -acodec libmp3lame -ab 128k sm.mp4

 

FOR %a in (??.png) DO identify %a

identify -verbose info: DSC_0017.JPG

Image: DSC_0017.JPG

  Format: JPEG (Joint Photographic Experts Group JFIF format)

  Class: DirectClass

  Geometry: 1232x816+0+0

  Resolution: 300x300

  Print size: 4.10667x2.72

  Units: PixelsPerInch

  Type: TrueColor

  Endianess: Undefined

  Colorspace: sRGB

  Depth: 8-bit

......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值