# 基本用法
ffmpeg [option] # 查看信息
ffmpeg [预处理属性] -i [编码属性] # 输入文件处理 ( 位置并不一定要固定,预处理属性也可以放到编码属性位置 )

# 预处理属性

-threads 2 # 多线程 2 线程
-ss HH:MM:SS # 设置开始读取时间
-to HH:MM:SS # 设置结束读取时间
-t N 或者 HH:MM:SS # 读取 N 秒数据
-stream_loop -1 # 无限循环读取视频
-y # 原文件输出
-re # 按帧率秒读取


# 编码属性

-hide_banner # 简单消息输出
-qscale 0 # 保留原始质量 

-ac [] # 音频声道数,有时候网页视频解不出来说明声道不对

-vcodec []
-acodec [] # 编码器

-ab []k
-vb []k# 码率
-crf N # 恒定质量因子 N 越小码率越高 常见范围 20-30

-an
-vn # 关闭音频视频编码

-ar # 音频采样率
-r N # 帧率
-framerate N # 帧率

-f [mp3,hls,flv,image2(取图片)...] # 输出格式
-%0003d # 输出文件名展位符号 同 c 语言占位符

-s NxN # 视频尺寸
-aspect N:N # 视频长宽比

-strict -2 # 严格模式
-vbsf h264_mp4toannexb # 设置 h264 编码类型为 annexb
-bsf hevc_mp4toannexb # 265 annexb

-map 0:0 # 设置容器中留顺序 可有多个 map 如: -map 0:0, -map 0:1 -map 0:2 (将原理流0放到第1位,流1放到第2流,流3放到第3位,不要流4)
# 编码器可通过知道流来设置编码 如:-c:v:2 libx264 将三路流视频流编码为h264
# 第一个数为输入文件索引,第二个数为输入文件中流索引,多个 map 顺序为输出文件顺序,后面紧跟输出文件(不能识别为命令的都为输出文件)


# 复杂代码

# 音频添加封面
ffmpeg -loop 1 -i image.jpg -i audio.wav -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4
# 视频添加字幕
ffmpeg -i video.mp4 -i subtitles.srt -c:v copy -c:a copy -preset veryfast -c:s mov_text -map 0 -map 1 output.mp4
# 拼接资源 ( join.txt 为文件列表 )
ffmpeg -f concat -i join.txt output.mp4
# 录屏
ffmpeg -f x11grab -s 1920x1080 -i :0.0 output.mp4