美文网首页
音视频流媒体开发【三十九】FFmpeg媒体转换器3-命令行解析

音视频流媒体开发【三十九】FFmpeg媒体转换器3-命令行解析

作者: AlanGe | 来源:发表于2023-04-08 08:49 被阅读0次

音视频流媒体开发-目录
iOS知识点-目录
Android-目录
Flutter-目录
数据结构与算法-目录
uni-pp-目录

对应代码 ffmpeg-pro-03
对应代码 ffmpeg-pro-04

03-命令行解析

FFmpeg 命令⾏基础语法:
ffmpeg [global_options] {[input_file_options] -i input_file}...{[output_file_options] output_file}...
  • global_options:全局参数
  • input_file_options:输⼊⽂件相关参数
  • output_file_options:输出⽂件相关参数

如下为⼀个简单的 FFmpeg 命令,将 input.avi 视频⽂件转换为 640kbps 码率的 output.avi

ffmpeg -i 3.flv -acodec copy -vcodec libx264 -g 30 -b 500kb 3.mp4 -y -loglevel 56

当我们使⽤命令⾏来调⽤ FFmpeg 时,当命令⾏传⼊ FFmpeg 时,FFmpeg内部是如何识别这些命令并进⾏解析和赋值的呢?

首先简单看下流程图

总结起来,解析命令⾏的⼤致流程就是:
  1. 跳过 “--xx xxx” 参数
  2. “-xx xxx” 格式的默认参数存⼊全局参数数组或临时参数数组
  3. “-noxx xxx”格式的参数,即默认值为“0”,将值存⼊全局参数数组或临时参数数组
  4. 解析专属参数,并存⼊专属数组结构体(AVDictionary)
  5. “-i xxx” 格式的输⼊⽂件路径参数,将临时参数数组的值、输⼊⽂件路径以及专属参数存⼊输⼊相关参数结构体,并清空临时参数数组
  6. “xxx” 格式的输出⽂件路径参数,将临时参数数组的值、输出⽂件路径以及专属参数存⼊输出相关参数结构体,并清空临时参数数组
参数解析后存放在哪?
  • 有关全局参数、输⼊参数、输出参数都存储到 OptionParseContext *octx 中
typedef struct OptionParseContext {
    // 全局命令分组
    OptionGroup global_opts;
    // 输⼊和输出的命令分组 (groups[0] 存储与输出⽂件相关参数,groups[1] 存储与输⼊⽂件相关参数)
    OptionGroupList *groups;
    int nb_groups;
    /* 临时数组,存储输出、输⼊相关参数 */
    OptionGroup cur_group;
} OptionParseContext;
  • 专属参数会先存储到 AVDictionary
AVDictionary *codec_opts;
AVDictionary *format_opts;
AVDictionary *resample_opts;
AVDictionary *sws_dict;
AVDictionary *swr_opts;

相关文章

  • 直播项目笔记(六)

    FFmpeg + 流媒体协议 FFmpeg FFmpeg简介 FFmpeg是一个非常强大的音视频处理库,包括视频采...

  • FFmpeg音视频开发入门--Apple的学习笔记

    之前看过一个流媒体开发的音视频基础,并且搭建过FFmpeg的VS2017调试环境。所以现在要通过使用FFmpeg库...

  • 线程池及红黑树复习--Apple的学习笔记

    FFmpeg也算是入门了。回顾我之前理解的流媒体开发就是指FFmpeg是错误的,因为流媒体开发主要是指网络视频,否...

  • FFmpeg编码支持与定制

    FFmpeg本身支持一些音视频编码格式、文件封装格式与流媒体传输协议,但是支持的数量仍然有限,FFmpeg所做的只...

  • Android FFmpeg01 --- 音视频解码播放

    一. FFmpeg 音视频解码流程 平常我们播放媒体文件时,通常需要经过以下几个步骤: 二. 解协议 将流媒体协议...

  • ffmpeg常用指令整理

    构架流媒体服务器还是从事跟流媒体音视频相关的工作就会发现ffmpeg一款必备的强大的工具及解决方案。 什么是ffm...

  • 使用RTMP流媒体服务器

    常用音视频工具: ffmpeg ffplay flashplayer 所谓流媒体,它不是一个固定大小的视频文件,而...

  • FFmpeg for iOS 3.4 编译与集成

    FFmpeg是一套开源的多媒体处理方案,可以应用于流媒体或直播中,能够实现音视频的编解码以及其他音视频处理等,非常...

  • iOS开发集成ffmpeg

    FFmpeg是一套开源的多媒体处理方案,可以应用于流媒体或直播中,能够实现音视频的编解码以及其他音视频处理等,非常...

  • NALU格式

    音视频编码在流媒体和网络领域占有重要地位;流媒体编解码流程大致如下图所示: x264原理解析 参考链接: x264...

网友评论

      本文标题:音视频流媒体开发【三十九】FFmpeg媒体转换器3-命令行解析

      本文链接:https://www.haomeiwen.com/subject/dfgpddtx.html