2024年3月28日星期四

图片处理工具 ImageMagic 的 TOP 10 实用场景

imagemagic

ImageMagick 是一个功能丰富的命令行工具,它允许用户创建、编辑、合成和转换数字图像。它能够处理各种格式的图像,包括常见的JPEG、PNG、GIF、TIFF以及许多其他格式。此外,ImageMagick提供了强大的API,可供各种编程语言使用,使其成为自动化图像处理任务的理想选择。

请注意,从ImageMagick 7开始,convert命令已经被magick命令所替代。在新版本中,您可以通过直接使用magick命令来代替convert

1. 图像格式转换

对于 png、jpg 图片格式因为大小的问题而不利于网络传输,转成 webp 格式,调整下质量,去除元数据可以大大减少其体积

# png 转 webp,-strip 删除元数据,调整图像质量
$ magick input.png -strip -quality 80 output.webp

2. 调整图像大小

将图像的大小调整为800x600像素

$ magick input.jpg -resize 800x600 output.jpg

3. 裁剪图像

从原图中裁剪出300x300像素的区域,起始点为(100,100)

$ magick input.jpg -crop 300x300+100+100 output.jpg

4. 旋转图像

将图像顺时针旋转90度

$ magick input.jpg -rotate 90 output.jpg

5. 添加文字水印

在图像上添加文字水印

$ magick input.jpg -font Arial -pointsize 20 -draw "text 10,20 'Watermark'" output.jpg

6. 调整图像质量

调整JPEG图像的质量至75%

$ magick input.jpg -quality 75 output.jpg

7. 合并图像

# 水平合并两张图像
$ magick image1.jpg image2.jpg +append output.jpg
# 垂直合并两张图像
$ magick image1.jpg image2.jpg -append output.jpg

8. 色彩调整

提高图像的亮度

$ magick input.jpg -modulate 110,100,100 output.jpg

9. 创建GIF动画

从多张图像创建GIF动画

$ magick -delay 20 -loop 0 image1.jpg image2.jpg image3.jpg output.gif

10. 图像模糊

对图像应用高斯模糊效果

$ magick input.jpg -blur 0x4 output.jpg

总结

因为比较懒,同时也比较喜欢极客的做事方式,能不安装的软件就安装,用一条命令解决的事情,为什么要安装 GUI 界面程序完成。熟悉命令使用方式的同时,也能理解 ImageMagic 能做什么,生产型应用的集成使用 ImageMagic 能完成什么。

2024年3月27日星期三

音视频处理工具 FFmpeg 的 TOP 10 常用场景

2000px-FFmpeg_Logo
FFmpeg 是一个开源的多媒体框架,它包含了一系列用于处理视频、音频和其他多媒体文件和流的库和工具。在LGPL或GPL许可下发布,可被用于个人和商业项目中。

FFmpeg能够处理几乎所有的视频和音频格式,它支持转换格式、编解码、录制、流媒体处理等功能。FFmpeg被广泛用于视频转换和流媒体解决方案中,如在线视频平台、转码服务以及个人视频处理等场景。

下面将以终端命令的形式介绍 FFmpeg 的常规使用场景,但 FFmpeg 不局限于在终端命令上使用,同时也提供各种编程语言的库,可程序集成调用使用。

ffmpeg 参数很多,下面不纠结解释各个参数的明细说明

1. 格式转换

# 视频转换,avi 转 mp4
$ ffmpeg -i input.avi output.mp4

# 音频转换,mp3 转 wav
$ fffmpeg -i input.mp3 output.wav

# 视频转GIF
$ fffmpeg -i input.mov -r 15 file.gif

2. 提取视频中的音频

$ ffmpeg -i input.mp4 -vn output.mp3

3. 分段裁剪视频

# -ss 哪里开始,-to 哪里结束
$ ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:20 -c copy output.mp4

4. 视频压缩大小

$ ffmpeg -i input.mp4 -b:v 1M -b:a 128k output.mp4

5. 给视频添加水印

# 使用图片水印,右下角间隔5像素
$ ffmpeg -i input.mp4 -i watermark.png -filter_complex "W-w-5:H-h-5" output.mp4

6. 生成视频缩略图

$ ffmpeg -i input.mp4 -vf "thumbnail,scale=320:180" -frames:v 1 output.jpg

7. 视频分辨率

# 分辨率小于原分辨率,能调大但会模糊
$ ffmpeg -i input.mp4 -s 1280x720 output.mp4

8. 添加字幕到视频

# 这种是字幕烧录到视频的方式,不可还原,即不能提取视频的字幕
$ ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" -c:v libx264 -preset medium -c:a copy output.mp4

9. 提取某帧为图片

ffmpeg -i input.mp4 -ss 00:00:10 -frames:v 1 output.png

10. 视频分片与重组

视频分片常用于HTTP实时流式传输,因为不需要下载整个视频即可逐段播放,m3u8 文件保存播放的 ts 地址,分片加载,减少了缓冲时间。

10.1. 视频分片

# 将生成 m3u8 文件已经对应的 ts片段文件
$ ffmpeg -i output.mp4 -codec: copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls output.m3u8

尝试将视频源文件mp4、m3u8以及ts文件放到服务器路径中,使用 http://127.0.0.1:8080/output.m3u8 的方式加载播放

10.2. 分片重组

既然可以将视频分片,能否通过分片的 m3u8 文件,重新合并为视频源文件

$ ffmpeg -i http://127.0.0.1:8080/output.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4

总结

偶尔做一些视频编辑,会用到很多大型视频编辑器,但往往对于短平快的操作,可以直接使用 FFmpeg 完成,接触下来,FFmpeg 功能十分强大,参数众多,可玩性很足。可以结合企业场景,使用编程的方式处理音视频,且大多数产品也是这样做的。

Retrieving Secret Values Using REST Services in Infisical

Infisical is the open source secret management platform that developers use to centralize their application configuration and secrets like...