1. 基本信息查询命令

  2. 录制命令

  3. 分解/复用命令(对不同文件格式的转化)

  4. 处理原始数据命令

  5. 裁剪与合并命令

  6. 图片/视频互转命令

  7. 直播相关命令(推流)

  8. 各种滤镜命令

FFmpeg 处理音视频基本流程

很重要!!!

e6f5762fef1e7d9c9e6d80da80c254bf.png

1、基本信息查询命令

image.png

2、录制命令

录制屏幕

录制屏幕:

1
ffmpeg -f avfoundation -i 1 -r 30 out.yuv

-f: 是指使用 Mac 下的 avfoundation 库采集数据

avfoundation 是 Mac 下专门用于采集处理的

-i: 指的是输入是什么,1 代表的是屏幕设备的索引值,类似于文件描述符,摄像头是 0

-r: 指定帧率

播放录制

注意如果是 yuv 视频,必须是告诉 ffplay 宽高和帧率才可以播放。

参数是开始录制时 ffmpeg 的提示

1
ffplay -s 3360x2100 -pix_fmt uyvy422 out.yuv

-s 是分辨率

查询 avfoundation 所支持的设备列表:

1
ffmpeg -f avfoundation -list_devices true -i ""

image.png

录制声音

1
ffmpeg -f avfoundation -i :0 out.wav

:0 代表音频设备

播放录音:

1
ffplay out.wav

3、分解/复用命令

image.png

多媒体格式转换

处理方式为 copy,不改变编解码,原来是双声道拷贝过去还是双声道,aac 还是 aac:

1
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv

-i:输入文件

-vcodec copy:视频编码处理方式

-acodec copy:音频编码处理方式

直接抽取视频:

1
ffmpeg -i out.mov -an -vcodec copy out.h264

-an:表示 -audio none

直接抽取音频:

1
ffmpeg -i out.mov -vn -acodec copy out.aac

4、处理原始数据命令

原始数据就是 ffmpeg 解码后的数据

对于视频就是 yuv 数据

对于音频就是 pcm 数据

提取 yuv 数据

1
ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

-an 表示不带音频数据

-c:v 表示对视频进行编码,使用 rawvideo 编码

-pix_fmt 原始数据必须制定像素格式,yuv 4:2:0,是常用的像素格式

提取 PCM 数据

1
ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm

-vn 表示不要视频数据

-ar a表示audio r表示rate 音频采样率为 44100,44.1k

常用的采样率还有:48k 32k 16k

-ac2 audio channel 2 表示双声道

立体声就是3,还有环绕立体声

-f 表示抽取音频数据存储格式是 s15le s表示有符号,16表示每一个数值用16位表示 le 表示小头(小端?)

注意播放音频的时候还是一样,原始数据需要指定相关的采样率、声道数等才能播放

1
ffplay -ar 44100 -ac 2 -f s16le out.pcm

5、滤镜命令

加减水印、画中画、裁剪等。

image.png

解码后的数据帧 -> 滤镜 -> 重新编码

滤镜命令

1
ffmpeg -i out.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4

-vf 视频滤镜 crop

后面是 crop 滤镜的参数

in_w 视频宽度-200

in_h 视频高度-200

-c:v 视频编码器 libx264

-c:a copy 不对音频做处理

视频添加图片/文字水印

https://www.jianshu.com/p/c0e151775075

添加图片水印:

1
ffmpeg -i shanqiu.mp4 -vf "movie=DB24ED44963ED81BA24EAD243F006DCE.JPG[watermark];[in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10[out]" shuiyin.mp4

在视频右下角的添加图片水印:

1
ffmpeg -i input.mp4 -i logo.png -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' output.mp4

在视频左下角添加图片水印:

1
ffmpeg -i input.mp4 -i logo.png -filter_complex 'overlay=x=10:y=main_h-overlay_h-10' output.mp4

6、裁剪与合并命令

裁剪

1
ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.mp4

从 00:00:00 起始裁剪 10 秒,输出到 out.mp4

合并

1
ffmpeg -f concat -i inputs.txt out.flv

-f concat 拼接

-i 后的参数是需要拼接的文件列表 inputs.txt 记录的是所有要拼接的视频列表

inputs.txt 里的内容为:

file 'filename.mp4' 格式

如:

1
2
file '1.mp4'
file '2.mp4'

7、图片/视频互转命令

视频转图片:

1
ffmpeg -i in.flv -r 1 -f image2 image-%3d.jpeg

-r 每秒钟转换帧率

-f 表示将输入文件转成什么格式的 image2 表示一种图片格式

-%3d 表示由3个数字组成

图片转视频:

1
ffmpeg -i image-%3d.jpeg out.mp4

8、直播相关命令

直播推/拉流

直播推流:

1
ffmpeg -re -i shanqiu.mp4 -c copy -f flv rtmp://server/live/streamName

-re 减慢帧率速度,对于直播流来说让帧率与真正的帧率保持同步

-i 多媒体文件

-c 音视频编解码(音频 -a 视频 -v) copy

-f 指定推出去的文件格式 flv

后面是服务器地址

其他的端再从 rtmp 服务器上拉流就可以看到影像了。

直播拉流:

1
ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -c copy a.m3u8

直接可以用 ffplay 看:

1
ffplay http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8

推流方法:

  1. 自己搭建 NGINX 服务器,然后推流上去

  2. bilibili 上推流

OSX下面用ffmpeg抓取桌面以及摄像头推流进行直播


EOF