整理些常用的图片处理命令, 一方面是工作有用到, 另一方面做备忘

主要使用ffmpeg

一、 基本

#查看视频基础元数据
ffprobe test.mp4
ffprobe -show_streams -show_format -of json test.mp4
exiftool test.mp4
file test.mp4

#播放视频
play test.mp4

二、 转码

2.1 直接转换格式

ffmpeg -i test.mp4 test.flv

2.2 普通转码

可以加 -profile:v baseline 和-vcodec h264 兼容各手机、平台等

#缩略为140*140、无声、转码后格式mp4
ffmpeg -i test.mp4 -s 140x140 -an out.mp4

#缩略为140*140、无声、2倍速播放、转码后格式mp4
ffmpeg -i test.mp4 -s 140x140 -an -filter:v setpts="(1/2)*PTS" out.mp4

#缩略为140*140、无声、视频帧率10、转码后格式mp4
ffmpeg -i test.mp4 -s 140x140 -an -r 10 out.mp4

#等比缩放(若w>h,则宽自适应,高为320px;反之宽320px,高自适应)、帧率为27、声音用aac编码、视频用h264、动态码率(最小0, 最高1.8Mbps)、持续时间为300s即5m
ffmpeg -i test.mp4 -r 27 -vf scale="'if(gt(iw,ih), -2, 320)':'if(gt(iw,ih), 320, -2)'" -acodec libfdk_aac -vcodec h264 -b 1200k -minrate 0 -maxrate 1800k -t 300 out.mp4

2.3 图片与视频相互转换

#将视频转成图片
ffmpeg -i test.mp4 -r 30 -s 480x480 image%5d.png

#将图片转成视频
ffmpeg -i image%5d.png -vcodec libx264 -r 30 -pix_fmt yuv420p -b:v 1200k -minrate 0 -maxrate 1800k out.mp4

2.4 视频水印

#视频用h264编码,音频使用原音频,水印的位置是左上角(+20+20),动态码率(最小0, 最高1.8Mbps)
ffmpeg -i test.mp4 -i wm.jpg  -vcodec h264 -acodec copy -filter_complex "overlay=x=20:y=20" -b:v 1200k -minrate 0 -maxrate 1800k out.mp4

2.5 视频合成

1. 将各视频的文件写入文件,如下
echo "file 'first_part.mp4'" >> concat_file
echo "file 'second_part.mp4'" >> concat_file

2. 合并
ffmpeg -r 30 -f concat -i concat_file -codec copy out.mp4

三、 视频截图

截图的时候把-ss放到-i前面,效率和性能高很多

3.1 截单张

#从视频10s处截图
ffmpeg -ss 10 -i test.mp4 -vframes 1 out.jpg

3.2 截多张

#每秒1张
ffmpeg -i test.mp4 -vf fps=1 out%03d.jpg

#每分钟1张
ffmpeg -i test.mp4 -vf fps=1/60 out%03d.jpg

#每I帧截1张图
ffmpeg -i test.mp4 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr out%03d.jpg