学习ffmpeg-从了解开始


前言:从安装开始
sudo apt update
sudo apt install ffmpeg


ffmpeg的基本组成

模块名称 功能描述 主要用途
AVFormat 实现媒体封装格式的处理,支持多种音视频容器格式(如 MP4、AVI、MKV 等)。 - 读取和解析音视频文件的容器格式 - 封装和复用音视频流 - 支持流媒体协议(如 RTMP、HTTP)
AVCodec 提供音视频编解码器,支持多种编解码格式(如 H.264、AAC、MP3 等)。 - 编码音视频数据 - 解码音视频数据 - 支持硬件加速编解码(如 NVENC、VAAPI)
AVFilter 提供音视频滤镜处理框架,用于对音视频数据进行处理和转换。 - 视频滤镜(如裁剪、旋转、添加水印) - 音频滤镜(如调整音量、混音) - 创建复杂的滤镜链
AVDevice 提供对音视频设备的访问接口,支持摄像头、麦克风、显示器等设备。 - 捕获音视频数据(如从摄像头或麦克风) - 输出音视频数据(如到显示器或扬声器) - 列举和控制设备
AVUtil 提供通用工具函数,支持数学运算、内存管理、数据结构等。 - 提供辅助函数(如哈希计算、时间戳处理) - 支持像素格式和音频样本格式的转换 - 提供错误处理和日志功能
swscale 用于视频图像的缩放和像素格式转换。 - 将图像从一种分辨率缩放到另一种分辨率 - 将像素格式从一种转换为另一种(如 YUV 到 RGB)
swresample 用于音频的重采样、声道转换和音频格式转换。 - 将音频从一种采样率转换为另一种采样率 - 调整声道数(如单声道到立体声) - 转换音频格式
说明
  • AVFormat:负责处理音视频文件的容器格式,支持多种格式的读取和写入。
  • AVCodec:提供编解码器,支持多种音视频编解码格式。
  • AVFilter:提供音视频滤镜框架,用于处理音视频数据。
  • AVDevice:提供对音视频设备的访问接口,支持设备输入和输出。
  • AVUtil:提供通用工具函数,支持多种辅助功能。
  • swscale:专门用于视频图像的缩放和像素格式转换。
  • swresample:专门用于音频的重采样和格式转换。

ffmpeg的核心组件

工具名称 功能描述 主要用途
ffmpeg FFmpeg 的核心工具,用于多媒体文件的解码、编码、转码及特效添加。其主要工作流程包括解封装、解码、处理、编码和封装。 - 音视频编解码 - 格式转换 - 视频剪辑与合并 - 添加视频滤镜和特效 - 性能优化与调试
ffplay 基于 FFmpeg 的 avformat 和 avcodec 实现媒体文件或流的播放。依赖于 SDL 库,可以进行音视频显示和播放相关信息的查看。 - 播放本地音视频文件 - 播放网络流媒体 - 基本播放控制(暂停、快进等) - 显示播放信息
ffprobe 多媒体分析工具,可从媒体文件或流中获取音频、视频、媒体容器等参数。支持多种输出格式。 - 显示多媒体文件的详细信息(如编解码器、帧率、分辨率等) - 分析音视频流的详细信息 - 输出信息为 JSON、CSV 等格式 - 提取元数据和章节信息

ffmpeg:

功能 :核心工具,用于音视频的编解码、转码、格式转换、特效添加等。
工作流程

  • 解封装:从输入文件中提取音视频流。
  • 解码:将压缩的音视频数据解码为原始数据。
  • 处理:对音视频数据进行处理(如裁剪、拼接、添加滤镜等)。
  • 编码:将处理后的音视频数据重新编码。
  • 封装:将编码后的音视频数据封装到输出文件中。
    用途
  • 音视频编解码
  • 格式转换
  • 视频剪辑与合并
  • 添加视频滤镜和特效
  • 性能优化与调试

ffplay:

功能 :基于 FFmpeg 的 avformat 和 avcodec 实现媒体文件或流的播放。

特点:

  • 支持多种音视频格式。
  • 提供基本的播放控制功能(如暂停、快进、快退等)。
  • 可以显示音视频的播放信息。

用途

  • 播放本地音视频文件
  • 播放网络流媒体
  • 基本播放控制
  • 显示播放信息

ffprobe:

功能:多媒体分析工具,可从媒体文件或流中获取音频、视频、媒体容器等参数。

特点

支持多种输出格式(如 JSON、CSV、XML)。

可以提取文件的元数据和章节信息。
用途

  • 显示多媒体文件的详细信息(如编解码器、帧率、分辨率等)
  • 分析音视频流的详细信息
  • 输出信息为 JSON、CSV 等格式
  • 提取元数据和章节信息

ffmpeg命令

信息查询

  • ffmpeg -formats:封装格式
  • ffmpeg -encoders :支持编码器
  • ffmpeg -decoders: 查看支持的解码器
  • ffmpeg -filters

封装转换

封装转换功能由 AVFormat 模块实现,通过 libavformat 库操作。可以使用以下参数:

  • 通用参数:

  • avioflags:设置 I/O 操作的标志。

    avioflags 是一个用于设置 I/O(输入/输出)操作标志的参数。它主要用于控制 FFmpeg 在读取或写入文件时的行为。
    direct :启用直接 I/O 模式,减少缓冲区的使用。
    nonblock:启用非阻塞模式,使 I/O 操作不会阻塞程序的执行

  • probesize:设置读取文件头的大小,用于检测文件格式。

    文件格式检测:

    FFmpeg 在处理多媒体文件时,需要先读取文件头来确定文件的格式(如 MP4、AVI、MKV 等)。

    probesize 参数控制 FFmpeg 读取文件头的大小,影响格式检测的准确性和效率。kb为单位

ffmpeg -i input.mp4 -probesize 5000000 - avioflags direct output.mp4

转码参数

转码功能由 AVCodec 模块完成,通过 libavcodec 库实现。可以使用以下参数
设置协议

  • c✌️ 可以是copy 也可以转协议
  • c:a 可以是copy 也可以转协议
    设置码率
  • b:v:设置视频比特率。
  • b:a:设置音频比特率。
    设置关键帧间隔:
  • g:设置关键帧间隔。
    ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 30 output.mp4

将输入文件 input.mp4 转码为 output.mp4,设置视频比特率为 1000 kbps,音频比特率为 128 kbps,关键帧间隔为 30。使用H.264和aac协议

补充知识点

关键帧:也称为 I 帧(Intra-coded frame),是一种包含完整图像信息的视频帧。它不依赖于其他帧进行解码,可以独立解码和显示。

关键帧的间隔(关键帧间隔)影响视频的质量和压缩效率。关键帧间隔越短视频的随机访问性能越好,但文件大小会增加;关键帧间隔越长,文件大小会减小,但随机访问性能会下降。

比特率(Bitrate):视频比特率表示每秒传输的视频数据量。较高的比特率意味着视频数据更丰富,图像质量更好,但文件大小也更大。

基本转码原理

FFmpeg 的转码过程包括以下步骤:

  • 解封装:从输入文件中提取音视频流。
  • 解码:将压缩的音视频数据解码为原始数据。
  • 处理:对音视频数据进行处理(如裁剪、拼接、添加滤镜等)。
  • 编码:将处理后的音视频数据重新编码。
  • 封装:将编码后的音视频数据封装到输出文件中

FFplay

1 设置窗口大小

-x:设置播放窗口的宽度。

-y:设置播放窗口的高度。

-s:设置播放窗口的大小(宽x高)。

示例:
ffplay -s 800x600 input.mp4
2 全屏显示
ffplay -fs input.mp4
3 屏蔽音频、视频、字幕
-an:屏蔽音频流,不播放音频。 -vn:屏蔽视频流,不显示视频。 -sn:屏蔽字幕流,不显示字幕。
4 定位播放

-ss:定位播放,跳转到指定的时间点开始播放。时间可以是秒数或时间戳格式(如 00:01:30).
ffplay -ss 00:01:30 input.mp4
5 设置播放时长

-t:设置播放时长,指定播放的持续时间(单位为秒)
ffplay -ss 00:01:30 -t 30 input.mp

相关推荐
东京老树根17 分钟前
SAP 学习笔记 - 系统移行业务 - MALSY(由Excel 移行到SAP 的收费工具)
笔记·学习
云上艺旅2 小时前
K8S学习之基础六十四:helm常用命令
学习·云原生·容器·kubernetes
时光追逐者2 小时前
学习如何设计大规模系统,为系统设计面试做准备!
学习·面试·职场和发展·系统设计
淬渊阁2 小时前
汇编学习之《指针寄存器&大小端学习》
汇编·学习
淬渊阁3 小时前
汇编学习之《段寄存器》
汇编·学习
虾球xz3 小时前
游戏引擎学习第193天
c++·学习·游戏引擎
学习是种信仰啊3 小时前
QT文件操作(QT实操学习3)
开发语言·qt·学习
Allen_LVyingbo4 小时前
文章配图新纪元:OpenAI新推出的GPT-4o原生图像生成功能启示
人工智能·学习·架构·数据分析·健康医疗
傍晚冰川4 小时前
【STM32】最后一刷-江科大Flash闪存-学习笔记
笔记·科技·stm32·单片机·嵌入式硬件·学习·实时音视频
吴梓穆4 小时前
UE5学习笔记 FPS游戏制作33 游戏保存
笔记·学习·ue5