美文网首页
FFmpeg处理流程与命令

FFmpeg处理流程与命令

作者: csranger | 来源:发表于2019-09-30 03:28 被阅读0次
    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处理流程与命令

          本文链接:https://www.haomeiwen.com/subject/hpfcpctx.html