ffmpeg 常用命令

FFmpeg 命令分类

基本信息查询命令 裁剪与合并命令
录制命令 图片/视频互转命令
分解/复用命令 直播相关命令
处理原始数据命令 各种滤镜命令

FFmpeg 处理流程

image-20200214143124238

FFmpeg 基本信息查询

-version 显示版本
-demuxers 显示可用的 demuxers
-muxers 显示可用的 muxers
-devices 显示可用的设备
-codecs 显示所有编解码器
-decoders 显示可用的解码器
-encoders 显示所有的编码器
-bsfs 显示比特流 filter
-formats 显示可用的格式
-protocols 显示可用的协议
-filters 显示可用的过滤器
-pix_fmts 显示可用的像素格式
-sample_fmts 显示可用的采样格式
-layouts 显示 channel 名称
-colors 显示识别的颜色名称

FFmpeg 录屏命令

# 录制
ffmpeg -f avfoundation -i 1 -r 30 out.yuv

参数解析:

  • -f 指定使用 avfoundation 采集数据

  • -i 指定从哪儿采集数据,是一个文件索引号,使用以下命令查看设备的文件索引号

    ffmpeg -f avfoundation -list_devices true -i ""
    
  • -r 指定帧率

  • 输出文件为 out.yuv

    # 播放
    ffplay -s 1920x1080 -pix_fmt uyvy422 out.yuv
    

FFmpeg 录音命令

# 录音
ffmpeg -f avfoundation -i :0 out.wav

参数解析:

  • -f 指定使用 avfoundation 采集数据
  • -i 指定从哪儿采集数据,”:“前为视频设备,后面为音频设备,使用以下命令查看设备的文件索引号
  • 输出文件为 out.wav

    # 播放
    ffplay out.wav
    

多媒体格式转换

ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv

参数解析:

  • -i 输入文件
  • -vcodec copy 视频编码处理方式
  • -acodec copy 音频编码处理方式

    # 抽取音频
    ffmpeg -i f35.mov -vn -acodec copy f35.aac
    
    # 抽取视频
    ffmpeg -i f35.mov -an -vcodec copy f35.h264
    

处理原始数据命令

提取视频数据

ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

参数解析:

  • -i 输入文件
  • -an 去除音频
  • -c:v 用 rawvideo 对视频进行编码
  • -pix_fmt 像素格式,yuv420p 表示 yuv 4:2:0 像素格式
  • 输出文件为 out.yuv

提取 PCM 数据

ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm

参数解析:

  • -i 输入文件
  • -vn 去除视频
  • -ar 音频采样率
  • -ac 单声道/双声道/立体声,2 表示双声道
  • -f 音频数据存储格式, “s”表示有符号,16 表示 16bit,le 表示 “little end”
  • 输出文件为 out.pcm

播放音频:

ffplay -ar 44100 -ac 2 -f s16le out.pcm

滤镜命令

image-20200215000031363

# 视频大小(宽高)裁剪
ffmpeg -i in.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4

参数解析:

  • -vf 视频滤镜 crop in_w 宽度-200 in_h 高度-200
  • -c:v 视频编码器, libx264
  • -c:a 音频编码器, copy 表示不处理

裁剪与合并命令

音视频裁剪

ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts

参数解析:

  • -ss 视频从何时开始裁剪
  • -t 裁剪的时长(单位:秒)

音视频合并

ffmpeg -f concat -i inputs.txt out.flv

参数解析:

  • -f 拼接 -i 后的参数 inputs.txt 中的视频,inputs.txt 记录了要合并的视频文件的名称

注:inputs.txt 内容为 ‘file filename’ 格式。

FFmpeg 视频转图片

视频转图片

ffmpeg -i in.flv -r 1 -f image2 image-%3d.jpeg

参数解析

  • -r 指定转换图片的帧率,1 表示每秒转换 1 张图
  • -f 转换的多媒体文件格式为 image2

图片转视频

ffmpeg -i image-%3d.jpeg out.mp4