ffmpeg
# ffmpeg包的常用命令
ffmpeg 裁剪转换合并提取
ffplay 播放
ffprobe 显示文件参数
它们的命令行参数大多通用
# ffmpeg命令的基本工作流程
file==>demux==>decode==>filter==>encode==>mux
如,一个mp4文件有视频流和音频流,demux就是把它俩分开,然后各自解码,各自filter,各自编码,最后再mux到一个文件里。
# 命令行参数的时间格式
[-]s[.m] 秒数(-表示是负数,s是整数部分,.m是小数部分)
[-][hh:]mm:ss.m 时分秒,-和.m同上
# ffmpeg命令行基本格式
ffmpeg global_options infile_options -i infile outfile_options outfile
## 例子
格式转换
ffmpeg -i a.mp4 a.avi
提取音频
ffmpeg -i a.mp4 -c copy a.mp3
截取视频
生成一个30秒的视频(丢弃之后的部分)
ffmpeg -i a.mp4 -c copy -t 30 b.mp4
从视频倒数30秒开始截取(丢弃之前的部分)
ffmpeg -sseof -30 -i a.mp4 -c copy b.mp4
从1分25秒开始截取,生成一个时长2分7秒的视频
ffmpeg -ss 1:25 -i a.mp4 -c copy -t 2:7 b.mp4
截图
在1分25秒截图一张
ffmpeg -ss 1:25 -i a.mp4 -frames 1 b.jpg
从1分25秒开始的30秒内,每秒截图0.2张(即每5秒1张)宽W高H的图
ffmpeg -ss 1:25 -t 30 -i a.mp4 -r 0.2 -s WxH -f image2 b_%03d.jpeg
从1分25秒开始截一个10秒的动图
ffmpeg -ss 1:25 -i a.mp4 -t 10 b.gif
图片合成视频
ffmpeg -f image2 -framerate 0.33 -i b_%03d.jpeg -s WxH a.mp4
伸缩视频
宽高比变为16:9
ffmpeg -i a.mp4 -aspect 16:9 o.mp4
录屏
ffmpeg -f x11grab -video_size cif -framerate 25 -i $DISPLAY screen.mp4
# 常用命令行参数
-hide_banner 不显示copyright notice, build options and library versions
-i url 输入文件的url(如:本地文件abc.mp4,摄像头/dev/video0)
-c codec 最常用的是-c copy(跳过decode-filter-encode,所以速度快)
-t time_duration 时长
-ss seek_start_time_position 开始时间(相对于开头)
-sseof time_position 开始时间(相对于末尾,大多使用负数)
-itsoffset time_offset 多用正数,表示delay
-framerate fps 多用于输入,输出多用-r fps
## 以下仅用于输出选项
-vn 禁用视频
-an 禁用音频
-sn 禁用字幕
-frames limit_output_frames
-to stop_output_at_time_position 这个不如-t好用
-fs limit_output_file_size
-r fps
-s wxh 输出尺寸为宽w高h
-map 0:0 选取第0个输入文件的第0个流
-filter filtergraph 参考man ffmpeg-filters,用ffmpeg -filters查看所有filters
-aspect width:height 宽高比