FFmpeg 简要介绍、常用命令和实例(一)

 

简要介绍


FFmpeg 介绍

  • 音视频多媒体处理开源框架,采用LGPL或GPL许可证。
  • 有音视频采集、编码、解码、转码、复用、解复用、音视频分离、合并、流化、过滤器等功能。
  • 可在iOS、Android、Window、Linux、Mac上运行.
  • 包含音频/视频编解码库libavcodec,具有非常高的可移植性和编解码质量。

FFmpeg 历史

  • 2000年, 由法布里斯-贝拉(FabriceBellard)创建。
  • 2004年, 迈克尔(Michael Niedermayer)接管。
  • 2011年, Libav从FFmpeg分离。

主要的开发库

  • libavutil: 包含一些公共的工具函数,包括随机数生成、数据结构、核心多媒体工具等。
  • libavcodec: 用于各种类型声音/图像encode/decode编解码库。
  • libavformat: 用于各种音视频封装格式(mp4/AVI/Flv等)的生成和解析muxer/demuxer,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能。
  • libavdevice: 读取电脑(或者其他设备上)的多媒体设备的数据 或者输出数据到指定的多媒体设备上。
  • libswresample: 用于音频采样采样数据(PCM)转换的库。
  • libswscale: 用于视频场景比例缩放、色彩映射转换的库。
  • libavfilter: 包含媒体滤波器的库。

主要的工具集:

  • ffmpeg: 一个命令行工具,可用于格式转换、解码或电视卡即时编码等。
  • ffsever: 一个 HTTP 、RTSP的实时广播流媒体服务器.
  • ffplay: 是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示。
  • ffprobe: 一个多媒体流分析工具。 它从多媒体流中收集信息 并且以人类和机器可读的形式打印出来。

FFmpeg 安装

  • 先在安装Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  • 再用Homebrew 安装 ffmpeg

brew install ffmpeg


FFmpeg 处理音视频流程

    1. 要有输入文件: MP4/flv/mkv等具有封装格式的文件, 里边包含了音频/视频/字幕等很多数据。
    1. demuxer: 视音频分离器分离数据。(会得到一些编码数据包--压缩后的数据)
    1. decoder: 解码,等到解码后的数据帧。
    1. 自定义处理数据帧,比如视频720p转化为480p等。
    1. encoder: 压缩数据,得到另一种编码数据包。
    1. muxer: 视音频复用器封装音视频数据,得到指定格式的文件。(MP4/flv/mkv)
    1. 输出数据。
1.png

 

ffmpeg 命令


基本信息查询命令

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

例如: ffmpeg -version


录制/播放命令

 

例 1:


ffmpeg -f avfoundation -i 1 -r 30 out.yuv (录制视频)

  • -f: (-f avfoundation)指定使用Mac系统下的 avfoundation库采集数据,avfoundation是用作音视频处理的
  • -i: 指定从哪采集数据,它是一个文件索引号。(-i0:是摄像头 -i1:是屏幕录制)
  • -r: 指定帧率,fps,高清电影在60帧以上(-r60)
  • out.yuv: 指定采集的yuv格式的数据,yuv是原始格式数据,没有任何压缩
  • ffmpeg -f avfoundation -list_devices true -i "": 查询avfoundation下支持的设备列表
  • control + c : 退出录制

例 2:


ffplay -s 2880x1800 -pix_fmt uyvy422 out.yuv (播放)

  • ffplay out.yuv: 播放视频。(yuv是原始数据不知道视频大小,ffplay默认使用的像素格式yuv420p,如果使用例 1录制,录制默认是uyvy422格式,无法正常播放。)
  • ffplay -s 2880x1800 -pix_fmt uyvy422 out.yuv: 播放( 例 1 录制可正常播放)。 -> (-s)指定尺寸大小,可以之前录制的日志中找到;(-pix_fmt) 指定录制的像素的格式

例 3:


ffmpeg -f avfoundation -i :0 out.wav  (录制音频)

  • ":" : ":"代表音频设备
  • ffplay out.wav: 播放音频

例 4:


// (录制音视频同步。要录制flv格式的,mp4格式的音频录制不上)
ffmpeg -f avfoundation -i 1 -f avfoundation -i :0 -r 30 out2.flv 


分解复用命令

 

例 1:


// (将test.mp4转换为test.flv)
ffmpeg -i test.mp4 -vcodec copy -acodec copy test.flv  

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

例 2:


// 只提取视频
ffmpeg -i test.mp4 -vcodec copy -an test.h264

  • -an: (n:代表no)不要音频数据

例 3:


// 只提取音频
ffmpeg -i test.mp4 -acodec copy -vn test.aac 

  • -vn: (n:代表no)不要视频数据

处理原始数据命令

 

例 1:


// 提取原始视频yuv数据
ffmpeg -i test.mp4 -an -c:v rawvideo -pix_fmt yuv420p test.yuv

//播放yuv, 播放原始数据得告诉播放器数据格式类型
ffplay -s 540x960 test.yuv

  • -c:v: 输出视频格式。(rawvideo -> 原始数据格式)

例 2:


// 提取原始音频pcm数据
ffmpeg -i test.mp4 -vn -ar 44100 -ac 2 -f s16le test.pcm

//播放pcm, 播放原始数据得告诉播放器数据格式类型
ffplay -ar 44100 -ac 2 -f s16le test.pcm

  • -ar: 设定音频采样率(44100 -> 44k)
  • -ac: 设定声音的Channel数(1单声道,2双声道,3:立体声)
  • -f: 设定数据格式(s16le: s有正负,16:16位,le:little end)
  • .pcm: 声音的原始数据

裁剪和合并命令

 

例 1:


// 裁剪前两秒
ffmpeg -i test.mp4 -ss 00:00:00 -t 2 test1.ts

// 截取后两秒
ffmpeg -i test.mp4 -ss 00:00:02 -t 2 test2.ts

  • -ss: 指定开始时间 (00:00:02)
  • -t: 指定持续时间(00:05)

例 2:


// 新建txt资源
touch resource.txt

// 编辑 resource.txt,并保存
file 'test1.ts'
file 'test2.ts'

// 使用 resource.txt和音视频文件拼接
ffmpeg -f concat -i resource.txt test3.mp4

  • -f contat: 设定文件拼接
3.png

图片和视频互转命令

 


// 视频每1秒生成15张图片
ffmpeg -i test.mp4 -r 15 -f image2 image_%3d.jpeg

// 图片生成视频
ffmpeg -i image_%3d.jpeg test.mp4 

  • -r: 提取图像频率(用于视频截图)
  • image2: 一种图片格式

直播类命令


// 推流
ffmpeg -re -i test.mp4 -c copy -f flv address(服务器地址)

// 拉流
ffmpeg -i address(直播流地址) -c copy test.mp4

  • -re :以本地帧频读数据,避免获取的帧率比本地快,保持同步

滤镜命令

 

例 1:


// 裁剪滤镜
ffmpeg -i test.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy test1.mp4

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

推荐阅读更多精彩内容