FFMPEG-01

FFMPEG下载编译与安装

  • git clone https://git.ffmpeg.org/ffmpeg.git
  • configure --help (查看ffmpeg指令的查看)
  • make && make install

FFmpeg命令分类

1. 基本信息查询命令
2. 录制命令
3. 分解复用命令
4. 处理原始数据命令
5. 裁剪与合并命令
6. 图片与视频的转换
7. 直播相关命令
8. 各种滤镜命令

FFmpeg处理流程

FFMPEG-01_第1张图片

输入文件 =(解包)=> 编码数据包 =(编码)=> 解码后数据帧 =(编码)=> 编码数据包 =(打包)=> 输出文件

1. 基本信息查询命令

常用的查询命令有如下15个
命令 作用
-version 显示版本
-format 显示可用的格式
-demuxers 显示可用的demuxers
-protocols 显示可用的协议
-muxers 显示可用的muxers
-filters 显示可用的过滤器
-devices 显示可用的设备
-pix_fmts 显示可用的像素格式
-codecs 显示所有编解码器
-sample_fmts 显示可用的采样格式
-decoders 显示可用的解码器
-layouts 显示channel名称
-encoders 显示所有的编码器
-colors 显示是别的颜色名称
-bsfs 显示比特流filter

2. 录制命令

2.1 FFmpeg录制屏幕
  • ffmpeg -f avfoundation -i 1 -r 30 out.yuv
    -f : 指定使用avfoundation采集数据
    -i : 指定从哪儿采集数据(输入源),参数是一个设备
    索引号(1.表示输入源是屏幕)
    -r:指定帧率(rate,帧)。
    按ffmpeg官方文档说-r与-framerate作用相同,但实际测试时发现不同。-framerate 用于限制输入,而-r用于限制输出。
    .yuv 原始数据

注意,桌面的输入对帧率没有要求,所以不用限制桌面的帧率。其实限制了也没用。

2.1 查询设备索引号
  • ffmpeg -f avfoundation -list_devices true -i ""


    FFMPEG-01_第2张图片
    设备索引号查询.png
2.2 FFmpeg录音命令
  • ffmpeg -f avfoundation -i :0 out.wav
    :0 表示使用麦克风设备,表示音频设备前面要加冒号
2.3 FFmpeg录视频
  • ffmpeg -framerate 30 -f avfoundation -i 0 video.mp4
    -framerate 上面已经解释过了,是限制输入的比特率的
    此外还有:
    -video_size用来限制视频尺寸,如 1280x720

3. 分解与复用

流拷贝是通过将 copy 参数提供给-codec选项来选择流的模式。它使得ffmpeg省略了指定流的解码和编码步骤,所以它只能进行多路分解和多路复用。 这对于更改容器格式或修改容器级元数据很有用。

3.1 多媒体格式的转换
  • ffmpeg -i f35.mov -c:v copy -c:a copy f35.flv
    -i:输入文件
    -c:v(-vcodec) copy: 视频编码处理方式
    -c:a(-acodec) copy: 音频编码处理方式
    copy 指明只拷贝,不做编解码
3.1.1 抽取视频
  • ffmpeg -i f35.mov -vcodec copy -an f35.h264
    an: a 代表音频,n 代表 no 也就是无音频的意思。
3.1.2 抽取音频
  • ffmpeg -i f35.mov -acodec copy -vn f35.aac
    vn: v 代表视频,n 代表 no 也就是无视频的意思。

4. 处理原始数据命令

4.1 FFmpeg提取YUV数据
  • ffmpeg -i f35.mov -an -c:v rawvideo -pix_fmt yuv420p f35.yuv
    -i: 输入的源
    -an: 不包含音频
    -c:v rawvideo 对视频编码处理成rawvideo格式
    -pix_fmt yuv420p 像素格式设置成yuv 4:2:0(最常用的像素格式类型)
4.2 FFmpeg提取PCM数据
  • ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
    -ar:音频采样率 rate
    -ac:声道的数量
    -f:数据存储格式
    s16le:一种数据存储方式
  • ffplay -ar 44100 -ac 2 -f s16le f35.pcm
    播放的时候,我们也需要带上采样率,声道数量以及数据存储格式这些参数来告诉ffplay如何去播放pcm文件

5. 滤镜命令

先看一下FFmpeg滤镜的流程:


FFMPEG-01_第3张图片
滤镜流程图.png
5.1 视频裁剪
  • ffmpeg -i f36.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy f36_out.mp4
    -vf: 表示视频滤镜
    crop: 滤镜的类型,裁剪
    in_w: 输入视频的宽度
    in_h: 输入视频的高度
    还有很多有意思的滤镜,可以看一下FFMPEG 入门这篇文章里面举的例子

6. FFmpeg音视频裁剪

6.1 裁剪
  • ffmpeg -i f36.mp4 -ss 00:00:10 -t 6 f36_crop_10.mp4
    -ss 表示音视频从哪个时间开始裁剪
    -t 表示裁剪时长
6.2 合并
  • ffmpeg -f concat -i inputs.txt out.flv
    -f concat : 告诉ffmpeg要对后面的文件进行拼接
    -i inputs.txt: i 表示输入源, inputs.txt里面存储着要拼接的文件列表
    inputs.txt 内容是 ‘file filename’ 格式的,如:

file 'f36_crop_10.ts'
file 'f36_crop_6.ts'

注意,这里合并的两个文件需要是ts格式的,入过不是ts格式的文件,合并的时候就会出现一些奇奇怪怪的问题。原因后面再研究。

7. 图片/视频互转命令

7.1 视频转图片
  • ffmpeg -i f35.mov -r 1 -f image2 ./images/image-%3d.jpeg
    -i 指定的输入文件
    -r 转换图片的帧率,即:每秒转换出多少张图片
    -f 告诉ffmpeg:要将输出的文件转换成什么格式,如:image2
7.2 图片转视频
  • ffmpeg -i image-%3d.png images.mp4
    这样转出的视频速度会非常快,因为视频是30fps的,而图片裁剪为1fps,这样我们的到的图片数量很少,得到的视频也会播放的相当快

8. 直播推/拉流

8.1 直播推流
  • ffmpeg -re -i f35.mov -c copy -f flv rtmp://server/live/streamName
    -c 音视频编解码,-a 音频, -c 视频
    -re 减慢帧率速度, 让帧率与真正的帧率保持同步
8.2 拉流保存
  • ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
8.3 转流
  • ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v copy -f flv rtmp://server/live/h264Stream
8.4 实时推流
  • ffmpeg -framerate 15 -f avfoundation -i "1" -s 1280x720 -c:v libx264 -f flv rtmp://localhost:1935/live/room

你可能感兴趣的:(FFMPEG-01)