FFmpeg处理流程与命令

  1. FFmpeg处理音视频流程(记住)
    • 输入文件 --demuxer(解复用)--> 编码数据包 --decoder--> 解码后的数据帧 --encoder--> 编码数据包 --muxer(复用)--> 输出文件
  2. FFmpeg命令分类
    • 基本信息查询命令
    • 录制命令
    • 分解/复用命令
    • 处理原始数据命令
    • 裁剪与合并命令
    • 图片视频互转命令
    • 直播相关命令
    • 各种滤镜命令
  3. 基本信息查询命令15个
    -version    显示版本。
    -formats    显示可用的格式(包括设备)。
    -demuxers   显示可用的demuxers。
    -muxers 显示可用的muxers。
    -devices    显示可用的设备。
    -codecs 显示libavcodec已知的所有编解码器。
    -decoders   显示可用的解码器。
    -encoders   显示所有可用的编码器。
    -bsfs   显示可用的比特流filter。
    -protocols  显示可用的协议。
    -filters    显示可用的libavfilter过滤器。
    -pix_fmts   显示可用的像素格式。
    -sample_fmts    显示可用的采样格式。
    -layouts    显示channel名称和标准channel布局。
    -colors 显示识别的颜色名称。
    

4.录制命令
- ffmpeg录制视频

    ```
    1. ffmpeg -f avfoundation -i 1 -r 30 out.yuv
        -f 指定使用avfoundation库采集数据
        -i 指定从哪采集数据,1代表视频数据来自屏幕,0代表视频数据来自摄像头
        -r 指定帧率
        out.yuv 采集后的视频数据保存成为yuv数据,yuv是一种原始视频数据,没有任何的压缩 
        ctrl + c 结束,在命令行下起着终止当前执行程序的作用
    2. ffplay -s 2880x1800 -pix_fmt uyvy422 out.yuv
        -s 指定录制时分辨率/尺寸大小
        -pix_fmt 指定录制时像素格式,以正确渲染
        使用ffplay播放刚录的视频
    3. ffmpeg -f avfoundation -list_devices true -i ""
    查询avfoundation库所支持的设备列表,音频代表的数字放在:后面
    ```
- ffmpeg录制声音
    ```
    1. ffmpeg -f avfoundation -i :0 out.wav
        -f 指定使用avfoundation库采集数据
        -i 指定从哪采集数据 :0代表音屏设备,数字放在:后面代表音屏数据(不一定正确,关键 通过ffmpeg -f avfoundation -list_devices true -i "" 查看各个数值代表的含义)
        out.yuv 采集后的音屏数据保存成为wav数据
    ```
  1. 分解/复用命令:文件格式的转换
    • 流程 输入文件 --demuxer(解复用)--> 编码数据包 --muxer(复用)--> 输出文件
    • 多媒体格式的转换
      1. ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
          -i 输入文件
          -vcodec 视频编解码处理方式是copy
          -acodec 音频编解码同上
          out.flv 输出为flv,其中out是视频名称可改
      2. 抽取视频,不包含声音
          ffmpeg -i out.mp4 -vcodec copy -an out.h264   // -an a代表audio n代表no 输出结果不包括视频
          ffplay out.h264
      3. 抽取音频,不包含视频
          ffmpeg -i out.mp4 -vn -acodec copy out.aac
          ffplay out.aac
      
  2. 处理原始数据命令
    • 原始数据是指ffmpeg解码后的数据,对于视频就是yuv数据,对于音频就是pcm数据.
    • 通过ffmpeg提取yuv数据
      1. ffmpeg -i out.mp4 -an -c:v rawvideo -pixel_fmts yuv420p out.yuv
          -i 输入文件
          -an a代表audio n代表no 输出结果不包括视频
          -c:v 对视频进行编码,使用rawvideo原始视频进行编码
          -pix_fmt 指定像素格式yuv420p
      2. ffplay -s 1336x752 out.yuv
      原始数据没有宽和高,播放器无法正确解析,需要指定原始视频的分辨率 -s 1336x752 分辨率在ffmpeg提取yuv视频时已显示出来过
      
    • 通过ffmpeg提取pcm数据
       1. ffmpeg -i out.mp4 -vn -ar 44110 -ac 2 -f s16le out.pcm
          -vn 不需要视频
          -ar a代表audio r代表read,音频的采样率是44.1k
          -ac a代表audio c代表channel,2代表声音是双声道
          -f 音频pcm数据其数据存储格式是s16le 
          out.pcm 输出的文件名
      2. ffplay -ar 44110 -ac 2 -f s16le out.pcm 
          需要告知ffplay播放
      
  3. 各种滤镜命令
    • 视频加水印,去水印,画中画,视频的裁剪,音频倍速等可使用滤镜实现
    • ffmpeg滤镜处理流程
      解码后的数据帧-filter->过滤后的数据帧-encoder-> 编码数据包
    • FFmpeg处理音视频流程(和滤镜流程对照理解 )
      输入文件 --demuxer(解复用)--> 编码数据包 --decoder--> 解码后的数据帧 --encoder--> 编码数据包 --muxer(复用)--> 输出文件
    • 滤镜命令:视屏裁剪命令(视频画面大小裁剪不是播放过程中裁剪)
      1. ffmpeg -i out.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out2.mp
          -i 指定多媒体文件
          -vf 视屏滤镜,crop代表一种滤镜名字,后面跟上参数,in_w-200表示本身视频宽度减去200,in_h-200表示本身视频高度减去200
          -c:v libx264 告诉ffmpeg此视频的编码器是libx264
          -c:a copy 不对音频做特殊处理
          out.mp4 输出文件
      
  4. 裁剪与合并命令
    • ffmpeg音视频裁剪
    1. ffmpeg -i in.mp4 -ss 00:00:00 -t 10
        -ss 视频裁剪的起始时间
        -t 10 裁剪多长时间,单位s,10s
        out.ts 输出文件
    
  5. 图片视频互转命令
  6. 直播相关命令
    • 直播推流
    1. ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamname
    -re 减慢帧率速度,让帧率与视频真正帧率保持同步
    -i out.mp4 需要推出去的文件
    -c 音视频编解码,copy音频与视频的参数不变;如果专门指定音频那就是-acodec,如果专门指定视频那就是-vcodec
    -f flv 推出去的文件格式是flv
    rtmp://server/live/streamname 服务器地址,将视频推送到rtmp服务器上,其他端就可以从rtmp服务器上拉流看到直播影像
    
    • 直播拉流
    1. ffmpeg -i rtmp://server/live/streamname -c copy dump.flv
    实例 ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -c copy dump.m3u8 (拉取什么格式就保存成什么格式)
    ffplay dump.m3u8
        -c copy 对于拉到的数据流不做重新编码,不对音视频参数做任何处理
        dump.flv 拉取到本地后保存成 dump.flv 文件
    

你可能感兴趣的:(FFmpeg处理流程与命令)