文章目录
ffmpeg这个库主要是用于视频,音频等方面的剪辑。
ImageMagick这个库主要用于图片方面的编辑。
Ghostscript是PostScript®语言和PDF文件的解释器,可以用来进行pdf文件的处理(ImageMagick库中也包含了这个库)
💖1. ffmpeg
Fmpeg 是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西。它支持最晦涩的古老格式,直到最尖端的格式。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的便携性。
FFmpeg 可以在 Linux、Mac OS X、Microsoft Windows、BSDs、Solaris 等各种构建环境、机器架构和配置下编译、运行,并通过测试基础设施 FATE。
它包含了 libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale 和 libswresample,可以被应用程序使用。还有 ffmpeg、ffplay 和 ffprobe,可以被终端用户用于转码和播放。
开源视频播放器potplayer
中就使用了ffmpeg插件
1.1 安装
1.1.1 windows
访问:http://www.ffmpeg.org/download.html#build-windows,在windows的选择列表中选择Windows builds from gyan.dev
,这个gyan.dev
其实就是个网站,维护下载的一个网站。。。当进入https://www.gyan.dev/ffmpeg/builds/
这个网页后,建议下载release版本的。
下载之后解压双击安装即可。
另外,建议将XXXX/ffmpeg/bin
这个目录添加到系统路径,这样就可以在任意地方进行访问了。
1.1.2 linux
参考:The Complete Guide for Using ffmpeg in Linux
# install
sudo add-apt-repository universe
sudo apt update
sudo apt install ffmpeg
# check if install ok
ffmpeg
1.2 常见用法
1. 合并多个视频(例如ts文件)
2. 视频抽帧
ffmpeg -i video/1.mp4 -r 3 -q:v 2 -f image2 image/pic-%03d.jpg
# -i 输入文件
# -r 抽帧频率(1s抽几帧)
# -f 生成图片格式(控制图像质量)
# 最后就是输出
一般网上看到的都是这条命令,但是参数确没什么人解释。。。无语,直接
ffmpeg --help / -h
# 就可以看到帮助文档了 但是只能看到一部分,而且看到的这部分里没有-i参数
ffmpeg -h long
# 看到更多的选项
ffmpeg -h full>text.txt
# 打印出所有帮助信息,超级长 可以使用重定向符号,把输出的结果不打印在屏幕上,而是存到一个text.txt文件里,这样看起来或者检索都会方便很多
ffmpeg -h type=image2
# 查看指定内容的帮助文件
-h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter/bsf/protocol See man ffmpeg for detailed description of the options.
这里只解释和上面命令相关的命令
ffmpeg
-i /data/video_1.mp4
-f image2
-vf fps=fps=1/60
-qscale:v 2
/data/mp4-%05d.jpeg
-i infile 输入文件路径
-f fmt force format 强制格式要求
-vf filter_graph set video filters 抽帧频率
# 可以使用下面的命令查看所有可用的filters
ffmpeg -filters>filters.text
# 依旧将输出的帮助文档信息重定向到一个文本文件中
# 搜索得到参数:强制使用常数作为帧速率
fps V->V Force constant framerate.
# 同理,查看formats
-formats show available formats
ffmpeg -formats>formats.text
# 搜索得到image2的信息
DE image2 image2 sequence(类似flv一样,也是一种格式)
-q q use fixed quality scale (VBR)
-qscale q use fixed quality scale (VBR) 固定图像质量
-c codec codec name
-codec codec codec name
-dcodec codec force data codec ('copy' to copy stream)
-vcodec codec force video codec ('copy' to copy stream)
3. 合并两个视频
以下内容来自:FFmpeg合并多个mp4视频文件
- 如果想把两个视频合并为一个,且两个视频是左右同时播放的,可以用命令:
ffmpeg -i 11.mp4 -i 22.mp4 -filter_complex hstack output.mp4
- 如果想把两个视频合并为一个,且两个视频是串起来顺序播放,可以用如下两种命令:
ffmpeg -i 11.mp4 -i 22.mp4 -filter_complex "[0:v] [0:a] [1:v] [1:a]\ concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mp4
4. gif和mp4格式互转
gif to mp4
D:\software\ffmpeg\bin\ffmpeg -i 粗细问题.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" boldThin.mp4
# movflags – 这个参数优化mp4文件的结构,以便播放器可以快速加载
# pix_fmt – mp4视频用哪种格式存储像素。一般选择一种可以被所有播放器支持的格式,比如:yuv420p
# vf – mp4格式的视频使用H.264,需要保证视频大小是可以被2整除的,这个参数用来保证这一点
# 下面这句转出来的mp4视频无法播放
D:\software\ffmpeg\bin\ffmpeg -i 粗细问题.gif boldThin.mp4
mp4 to gif
ffmpeg -ss 30 -t 3 -i input.mp4 \
-vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
-loop 0 output.gif
-ss
, skip seconds,跳过前30s-t 3
创建1个3s的输出fps
设置每秒的帧率,fps=10
每秒10帧scale
把输出resize到320 pixel宽,根据原始输入的高宽比自动计算高度。使用的是lanczos
缩放算法palettegen
或paletteuse
会基于输入生成一个个性化的色盘(palette )
如果转出来的gif不是很清晰,可以直接
ffmpeg -i BézierCurves5.mov -loop 0 output5.gif
不设置其他参数的时候,都是按照和输入一样的去操作的,清晰度就会和输入的视频一致
如果想要调节播放的倍速,根据FFmpeg 音视频倍速控制,可以
# 添加 -filter:v "setpts=0.5*PTS" 这个参数即可
ffmpeg -i python.gif -t 30 -filter:v "setpts=0.5*PTS" -loop 0 python30.gif
参考:
- How to do I convert an animated gif to an mp4 or mv4 on the command line?
- How do I convert a video to GIF using ffmpeg, with reasonable quality?
- 使用 ffmpeg 实现 MP4 与 GIF 的互转
🎂2. ImageMagick
官方网站参考:
- imagemagick官网:http://www.imagemagick.org/script/download.php#windows
- imageMagick中文站:http://www.imagemagick.com.cn/
2.1 关于安装
以windows为例,官网上的说明,大意是:
- imagemagick这个包支持大部分的windows系统版本,大部分应该都是64位,
- 位深,有8位,16位的,但是后者比前者对资源消耗更高,需要安装符合自己系统版本的文件。
- 另外,还有静态和动态的区别,建议下载静态。因为dll动态是将这个imagemagick作为一个dll链接库进行使用的。
查看系统的位深度:桌面右击->显示设置->显示tab下->高级显示设置->位深度。
一般下载的是
或者直接下载一个便携版,解压就可以用,不用安装,不用注册
2.2 验证是否安装成功
记住刚刚解压文件的位置,可以看到imagemagick文件夹中有一个magick.exe
文件,在命令行切换到这个文件夹,输入以下命令(每次输一个就行):
magick logo: logo.gif
magick identify logo.gif
magick logo.gif win:
有反应就代表成功了,类似
2.3 报错解决
1. convert: FailedToExecuteCommand `“gswin64c.exe”
参考:
报错信息中的gswin32c.exe
指得就是Ghostscript,下载这个东西,进行安装。
2.4 常见用法
1.pdf转图片(高清)
官方说明中提了一嘴,建议在windows下路径用双引号,而不是单引号扩住。
magick convert -density 300 -quality 100 "C:\shaiic_work\其他信息\xxx.pdf" "C:\shaiic_work\其他信息\testpdf.jpg"
然后就可以产生高清图片了
3. Ghostscript
3.1 安装
Ghostscript是PostScript®语言和PDF文件的解释器,可以用来进行pdf文件的处理(ImageMagick库中也包含了这个库)
安装,以mac为例,一般可以通过MacPorts
或者 Homebrew
,这里为了简便直接使用Homebrew
进行安装
brew install ghostscript
其余安装详见: How to Install Ghostscript
- windows有现成的封装好的exe包
- linux一般需要自己编译,也有现成的rpm包可以用
3.2 压缩pdf文件
以下对于扫描版的pdf压缩有效,如果本身就是非扫描版的可编辑的pdf,使用以下命令其实没什么效果。
使用以下 Ghostscript 命令
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/ebook \
-dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
-sDEVICE=pdfwrite 规定输出是矢量不是位图输出
-dCompatibilityLevel=1.4 表示目标阅读器是否可以支持PDF1.4的透明对象,是对pdf格式的兼容级别的规定 一般ebook是1.5
-dPDFSETTINGS=configuration
`/screen` selects low-resolution output similar to the Acrobat Distiller (up to version X) "Screen Optimized" setting.
`/ebook` selects medium-resolution output similar to the Acrobat Distiller (up to version X) "eBook" setting.
`/printer` selects output similar to the Acrobat Distiller "Print Optimized" (up to version X) setting.
`/prepress` selects output similar to Acrobat Distiller "Prepress Optimized" (up to version X) setting.
`/default` selects output intended to be useful across a wide variety of uses, possibly at the expense of a larger output file.
- ghostscript.readthedocs.io-Distiller Parameters
- 直接在这个页面搜索上面参数即可
- pdfwrite参数值说明:
- https://ghostscript.readthedocs.io/en/latest/Devices.html#pdf-writer
- https://ghostscript.readthedocs.io/en/latest/VectorDevices.html#vectordevices-html
它不渲染为栅格,通常它们产生“矢量”而不是位图输出
-dQUIET
-Using Ghostscript- How can I reduce the file size of a scanned PDF file?