ffmpeg命令使用例子2

谈到视频编码相关内容就不得不提一个伟大的软件包 - FFmpeg。


FFmpeg 是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了 libavcodec -这是一个用于多个项目中音频和视频的解码器库,以及 libavformat -一个音频与视频格式转换库。


FFmpeg 这个单词中的 FF 指的是 Fast Forward。有些新手写信给 FFmpeg 的项目负责人,询问 FF 是不是代表 Fast Free 或者 Fast Fourier 等意思,FFmpeg  的项目负责人回信说:「Just for the record, the original meaning of FF in FFmpeg is Fast Forward.」


这个项目最初是由 Fabrice Bellard 发起的,而现在是由 Michael Niedermayer 在进行维护。许多 FFmpeg 的开发者同时也是 MPlayer 项目的成员,FFmpeg 在 MPlayer 项目中是被设计为服务器版本进行开发。


FFmpeg 下载地址是 : https://ffmpeg.org/download.html

  • 可以浏览器输入下载,目前支持 Linux ,Mac OS,Windows 三个主流的平台,也可以自己编译到 Android 或者 iOS 平台。


  • 如果是 Mac OS ,可以通过 brew 安装

 brew install ffmpeg --with-libvpx --with-libvorbis --with-ffplay

我们可以用 FFmpeg 来做哪些有用有好玩的事情呢?通过一系列小实验来带大家领略 FFmpeg 的神奇和强大。


FFmpeg 录屏


通过一个小例子看一下怎么在 Mac OS 下面使用 FFmpeg 进行录屏:

输入:

ffmpeg -f avfoundation -list_devices true -i ""

输出:

[AVFoundation input device @ 0x7fbec0c10940] AVFoundation video devices:
[AVFoundation input device @ 0x7fbec0c10940] [0] FaceTime HD Camera
[AVFoundation input device @ 0x7fbec0c10940] [1] Capture screen 0
[AVFoundation input device @ 0x7fbec0c10940] [2] Capture screen 1
[AVFoundation input device @ 0x7fbec0c10940] AVFoundation audio devices:
[AVFoundation input device @ 0x7fbec0c10940] [0] Built-in Microphone

给出了当前设备支持的所有输入设备的列表和编号,我本地有两块显示器,所以 1 和 2 都是我屏幕,可以选择一块进行录屏。

查看当前的 H.264 编解码器:

输入:

ffmpeg -codecs | grep 264

输出:

 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_vda ) (encoders: libx264 libx264rgb )

查看当前的 VP8 编解码器:

输入:

ffmpeg -codecs | grep vp8

输出:

  DEV.L. vp8                  On2 VP8 (decoders: vp8 libvpx ) (encoders: libvpx )

可以选择用 VP8 或者 H264 做编码器

ffmpeg -r 30 -f avfoundation -i 1 -vcodec vp8 -quality realtime screen2.webm
# -quality realtime 用来优化编码器,如果不加在我的 Air 上帧率只能达到 2

or

ffmpeg -r 30 -f avfoundation -i 1 -vcodec h264 screen.mp4

然后用 ffplay 播放就可以了

ffplay screen.mp4

or

ffplay screen2.webp


FFmpeg 视频转换成 gif


有一个特别有用的需求,在网上发现了一个特别有趣的视频想把它转换成一个动态表情,作为一个 IT 从业者,我第一个想到的不是下载一个转码器,也不是去找一个在线转换网站,直接利用手边的工具 FFmpeg,瞬间就完成了转码:

ffmpeg -ss 10 -t 10  -i tutu.mp4  -s 80x60  tutu.gif
## -ss 指从 10s 开始转码,-t 指转换 10s 的视频 -s


FFmpeg 录制屏幕并直播


可以继续扩展例子1,直播当前屏幕的内容,向大家介绍一下怎么通过几行命令搭建一个测试用的直播服务:

Step 1:首先安装 docker: 访问 https://www.docker.com/products/docker ,按操作系统下载安装。

Step 2:下载 nginx-rtmp 镜像:

docker pull chakkritte/docker-nginx-rtmp

Step 3:创建 nginx html 路径,启动 docker-nginx-rtmp

mkdir ~/rtmp

docker run -d -p 80:80 -p 1935:1935 -v ~/rtmp:/usr/local/nginx/html chakkritte/docker-nginx-rtmp

Step 4:推送屏幕录制到 nignx-rtmp

ffmpeg -y -loglevel warning -f avfoundation -i 2 -r 30 -s 480x320 -threads 2 -vcodec libx264  -f flv rtmp://127.0.0.1/live/test

Step 5:用 ffplay 播放

ffplay rtmp://127.0.0.1/live/test

总结一下,FFmpeg 是个优秀的工具,可以通过它完成很多日常的工作和实验,但是距离提供真正可用的流媒体服务、直播服务还有非常多的工作要做,这方面可以参考七牛云发布的七牛直播云服务 。

你可能感兴趣的:(直播)