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 文件
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容