图像处理命令行

使用命令行进行图像处理的方法,主要是 ffmpeg, 除此之外还有一些其它的工具。

FFMPEG

视频转换成图像

1
2
fps 标识一秒中抽出几帧
ffmpeg -i input.mp4 -vf fps=1 out%d.png

视频格式转码

1
2
# -map 0 选项是保持所有的 stream, 这种需求存在于视频中有多个字幕的情况.
ffmpeg -i input.mkv -c:v copy -c:a libfdk_aac -map 0 output.mkv

多张图片合成视频

1
ffmpeg -r 6 -f image2 -pattern_type glob -i 'result/*.jpg' -c:v libx264 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -threads 20 output.mp4

-r 是帧率
-s 转换之后的视频的 width*height, 实践证明, 最好不用这个参数
-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" 自动设置输出
-threads 20 设置20个线程

1
2
3
4
5
## 图像格式转换
OpenCV 不能直接读取 `gif` 格式的图像
```bash
# -coalesce option "merges a sequence of images"
convert -verbose -coalesce image.gif image.png

视频文件转码

1
2
# -map 0 选项是保持所有的 stream, 这种需求存在于视频中有多个字幕的情况.
ffmpeg -i input.mkv -c:v copy -c:a libfdk_aac -map 0 output.mkv

mkvtoolnix

1
brew install mkvtoolnix

连接多个视频为一个文件

1
mkvmerge -o output.mp4 video1.mp4 \+ video2.mp4 \+ videon.mp4