音视频编解码流程与如何使用 FFMPEG 命令进行音视频处理

一、前言

FFMPEG 是特别强大的专门用于处理音视频的开源库。你既可以使用它的 API 对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频文件。

本文将简要介绍一下 FFMPEG 库的基本目录结构及其功能,然后详细介绍一下我们在日常工作中,如何使用 ffmpeg 提供的工具来处理音视频文件。


二、FFMPEG 目录及作用

libavcodec: 提供了一系列编码器的实现。

libavformat: 实现在流协议,容器格式及其本 IO 访问。

libavutil: 包括了 hash 器,解码器和各利工具函数。

libavfilter: 提供了各种音视频过滤器。

libavdevice: 提供了访问捕获设备和回放设备的接口。

libswresample: 实现了混音和重采样。

libswscale: 实现了色彩转换和缩放工能。


三、FFMPEG 基本概念

在讲解 FFMPEG 命令之前,我们先要介绍一些音视频格式的基要概念。

(1) 音/视频流

在音视频领域,我们把一路音/视频称为一路。如我们小时候经常使用 VCD 看港片,在里边可以选择粤语或国语声音,其实就是 CD 视频文件中存放了两路音频流,用户可以选择其中一路进行播放。

(2) 容器

我们一般把 MP4、 FLV、MOV 等文件格式称之为容器。也就是在这些常用格式文件中,可以存放多路音视频文件。以 MP4 为例,就可以存放一路视频流,多路音频流,多路字幕流。

(3) channel

channel 是音频中的概念,称之为声道。在一路音频流中,可以有单声道,双声道或立体声。


四、FFMPEG 功能分类

我们按使用目的可以将 FFMPEG 命令分成以下几类:

  • 基本信息查询命令

  • 录制

  • 分解/复用

  • 处理原始数据

  • 滤镜

  • 切割与合并

  • 图/视互转

  • 直播相关

除了 FFMPEG 的基本信息查询命令外,其它命令都按下图所示的流程处理音视频。

然后将编码的数据包传送给解码器(除非为数据流选择了流拷贝,请参阅进一步描述)。 解码器产生未压缩的帧(原始视频/ PCM 音频/ ...),可以通过滤波进一步处理(见下一节)。 在过滤之后,帧被传递到编码器,编码器并输出编码的数据包。 最后,这些传递给复用器,将编码的数据包写入输出文件。

默认情况下,ffmpeg 只包含输入文件中每种类型(视频,音频,字幕)的一个流,并将其添加到每个输出文件中。 它根据以下标准挑选每一个的“最佳”:对于视频,它是具有最高分辨率的流,对于音频,它是具有最多 channel 的流,对于字幕,是第一个字幕流。 在相同类型的几个流相等的情况下,选择具有最低索引的流。

您可以通过使用-vn / -an / -sn / -dn 选项来禁用某些默认设置。 要进行全面的手动控制,请使用-map 选项,该选项禁用刚描述的默认设置。


五、基本信息查询命令

MPEG 可以使用下面的参数进行基本信息查询。例如,想查询一下现在使用的 FFMPEG 都支持哪些 filter,就可以用 ffmpeg -filters 来查询。详细参数说明如下:

参数 说明


-version 显示版本。


-formats 显示可用的格式(包括设备)。


-demuxers 显示可用的 demuxers。


-muxers 显示可用的 muxers。


-devices 显示可用的设备。


-codecs 显示 libavcodec 已知的所有编解码器。


-decoders 显示可用的解码器。


-encoders 显示所有可用的编码器。


-bsfs 显示可用的比特流 filter。


-protocols 显示可用的协议。


-filters 显示可用的 libavfilter 过滤器。


-pix_fmts 显示可用的像素格式。


-sample_fmts 显示可用的采样格式。


-layouts 显示 channel 名称和标准 channel 布局。


-colors 显示识别的颜色名称。


接下来介绍的是 FFMPEG 处理音视频时使用的命令格式与参数

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值