FFmpeg 的使用与Docker安装流媒体服务器

2025-04-02

本文阐述的均为命令行的使用方式。

一、 介绍

本文读者会比较小众~ 看到此文的朋友,大概率是需要用到啦,简单说一下下。

就算是从来没接触过的朋友,其实也已经在生活的各个方面都接触过处理完东西(音视频)。

一句话来总结: 就是一款封装好的关于音视频方面的开源处理工具。

它功能强大,用途广泛,大量用于视频网站和商业软件(比如 和 ),也是许多音频和视频格式的标准编码/解码实现。

如果有接触过 (另外一个音视频处理框架),它的也有使用到 的编码器。

二、 安装

sudo apt-get

流媒体服务器_流媒体服务器用途_流媒体服务器什么意思

版本查看

ffmpeg --help

流媒体服务器用途_流媒体服务器_流媒体服务器什么意思

安装就一会的事情,主要还是要看怎么使用。

三、 使用

的命令行参数分布大致如下:

领C++音视频开发资料→「链接」

ffmpeg \
[全局参数] \
[输入文件参数] \
-i [输入文件] \
[输出文件参数] \
[输出文件]

下面是一个例子。

ffmpeg \
-y \ # 全局参数
-c:a libfdk_aac -c:v libx264 \ # 输入文件参数
-i input.mp4 \ # 输入文件
-c:v libvpx-vp9 -c:a libvorbis \ # 输出文件参数
output.avi # 输出文件

上面的命令将 mp4 文件转成 webm 文件,这两个都是容器格式。输入的 mp4 文件的音频编码格式是 aac,视频编码格式是 H.264;输出的 webm 文件的视频编码格式是 VP9,音频格式是 。

如果不指明编码格式, 会自己判断输入文件的编码。因此,上面的命令可以简单写成下面的样子。

ffmpeg -i input.avi output.mp4

四、 常见案例

本章节只是简单的介绍了如何使用,并且解释啦常用的参数,如果需要更详细全面的参数解释,可以查看官方文档。

封包格式(、视频格式)、编码、解码、帧率、I帧、B帧等等一些偏向于专业的名词,大伙如果有需求可以去仔细了解了解,我这边暂时只是简单使用一下。

4.1、转换编码格式

转换编码格式()指的是, 将视频文件从一种编码转成另一种编码。比如转成 H.264 编码,一般使用编码器,所以只需指定输出文件的视频编码器即可。

-i 1.mp4 -c:v .mp4

流媒体服务器用途_流媒体服务器什么意思_流媒体服务器

查看支持的编码器(也就是 - 简称为 -c:v 后面可以接的参数):

-

流媒体服务器_流媒体服务器什么意思_流媒体服务器用途

支持很多很多,不一一列举出来啦

4.2、转换文件格式:

-y -i 1.mp4 -c:v - -b:v 6000k .avi 其中,

流媒体服务器用途_流媒体服务器什么意思_流媒体服务器

:v 代表视频,:a 代表音频;

4.3、对已有视频进行抓图:

-i .avi -y -f -ss 8 -t 0.001 -s 'test.jpg'

流媒体服务器用途_流媒体服务器_流媒体服务器什么意思

4.4 调整码率

流媒体服务器_流媒体服务器用途_流媒体服务器什么意思

调整码率()指的是,改变编码的比特率,一般用来将视频文件的体积变小。下面的例子指定码率最小为964K,最大为3856K,缓冲区大小为 2000K。

-i 1.mp4 - 964K - 3856K - 2000K .mp4

流媒体服务器什么意思_流媒体服务器_流媒体服务器用途

4.5 改变分辨率()

下面是改变视频分辨率()的例子,从 1080p 转为 480p 。

-y -i 1.mp4 -vf scale=480:-1 .mp4

流媒体服务器什么意思_流媒体服务器用途_流媒体服务器

4.6 提取音频

有时,需要从视频里面提取音频(),可以像下面这样写。

-y -i 1.mp4 -vn -c:a copy .aac

上面例子中,-vn表示去掉视频,-c:a copy表示不改变音频编码,直接拷贝。

4.7、本地摄像头推流

ffmpeg -f video4linux2 -r 30 -i /dev/video0 -vcodec h264 -f flv rtmp://192.168.79.133:1935/live/stream0

稍微解释一下上面的命令:

流媒体服务器用途_流媒体服务器什么意思_流媒体服务器

注意:在虚拟机中使用摄像头需注意、将USB的兼容性设置成USB3.0 ,否则出现推流一直卡在那

流媒体服务器什么意思_流媒体服务器_流媒体服务器用途

五、 安装流媒体服务器,推流和拉流实现

这里我当时就是随便在上找了一个可以方式部署的流媒体服务器~

直接输入下面这条命令就可以构建成功啦。

sudo run -id --= -p 1935:1935 -p 8080:80 -p 8443:443 -p 554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp -p 9000:9000/udp /:

流媒体服务器用途_流媒体服务器什么意思_流媒体服务器

推流和拉流测试

推流和拉流,要是接触过视频服务可能就比较了解~

流媒体服务器什么意思_流媒体服务器_流媒体服务器用途

粗糙的流程就大致如上图啦,推流就是将收集到的视频流推送到流媒体服务器上去,拉流就是从流媒体服务器上把视频拉取下来,进行播放。

至于如何收集视频,如何进行视频处理,更为详细的就没有介绍啦, 是涵盖了全流程的, 可以去了解了解。

里面牵扯到的 RTSP、RTMP、HTTP-FLV协议,都是一些视频相关的协议,可以去了解了解,我这里只测试了 RTSP和RTMP协议。

领C++音视频开发资料→「链接」

rtsp 推流和拉流

-re -i 1.mp4 - h264 - aac -f rtsp - tcp rtsp://192.168.79.133/live/room

(rtsp 端口我这里使用的是默认的 554,故而省略没写啦

拉流进行播放可以使用专门的播放器,也可以使用的组件来进行视频的播放

拉流进行播放

rtsp://192.168.79.133:554/live/room

流媒体服务器什么意思_流媒体服务器用途_流媒体服务器

常用的播放器 vlc media 也可以播放 rtsp 和 rtmp 协议的视频流。

播放器截图

流媒体服务器什么意思_流媒体服务器_流媒体服务器用途

流媒体服务器什么意思_流媒体服务器_流媒体服务器用途

然后正常播放就是ok啦

rtmp 推流

-re -i 1.mp4 - h264 - aac -f flv rtmp://192.168.79.133/live/room

rtmp://192.168.79.133:1935/live/room

rtmp协议的端口号是 1935 ~这些端口号,都是可以修改的,是否支持取决于你部署的流媒体服务器是什么样的。

流媒体服务器用途_流媒体服务器什么意思_流媒体服务器

播放器截图

流媒体服务器用途_流媒体服务器什么意思_流媒体服务器

(另外,这个流媒体服务器内部对视频做了处理,可以实现多种输出,你RTMP推上去的,也可以用RTSP协议拉流下来的)

下一篇:流媒体电视是什么啊!
上一篇:声韵AURALiC白羊座Aries G2.2无线流媒体服务器
相关文章
返回顶部小火箭