ffmpeg、ffplay、ffprobe 常用命令详解(音视频必备)

news/2024/5/2 13:26:40/文章来源:https://blog.csdn.net/weixin_42182599/article/details/127147756

前言:
😄作者简介:小曾同学.com,小伙伴们也可以叫我小曾,一个致力于测试开发的博主⛽️
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊
座右铭:不想当开发的测试,不是一个好测试✌️。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍

之前给小伙伴们分享了在Mac中安装FFMPEG,今天主要给大家整理了下在音视频测试中经常使用的FFMPEG相关命令。

文章目录

  • 1 FFMPEG概念
  • 2 ffmpeg 介绍
    • 2.1 ffmpeg工作流程
    • 2.2 ffmpeg常用命令
  • 3 ffplay 常用命令
  • 4 ffprobe常用命令

1 FFMPEG概念

FFmpeg 是一款音视频编解码工具,也是一组音视频编解码开发套件,为开发者提供了丰富的音视频处理调用接口。
FFmpeg 源代码编译后会生成几个可执行程序,分别是ffmpegffplayffprobe,这三个也称为 FFmpeg 三剑客,各有各的作用,接下来就给大家一一介绍。

2 ffmpeg 介绍

2.1 ffmpeg工作流程

ffmpeg 主要是多媒体的编解码工具,具体功能主要包括视频裁剪,去除水印,添加 logo,提取封面,提取音频,提取视频等功能。
ffmpeg的主要工作流程相对比较简单,介绍如下,

1)解封装(Demuxing)
2)解码(Decoding)
3)编码(Encoding)
4)封装(Muxing)

其中需要经过六个步骤,具体如下,

1)读取输入源
2)进行音视频的解封装
3)解码每一帧音视频数据
4)编码每一帧音视频数据
5)进行音视频的重新封装
6)输出到目标

ffmpeg 整体处理的工作流程与步骤如图所示,
在这里插入图片描述
从工作流程可以看出,ffmpeg 首先读取输入源,然后通过Demuxer将音视频包进行解封装,再通过Decoder进行解码,将音视频通过Decoder解码成为 YUV 或者PCM数据,然后通过Encoder将对应的数据进行编码,将编码后的音视频数据包通过Muxer进行封装,最终输出为输出流。

2.2 ffmpeg常用命令

  • 基本信息查询命令
    在这里插入图片描述

  • 录制命令

    • 录制视频
    
    ffmpeg -f avfoundation -i 1 -r 30 out.yuv# -f:指定使用Mac下的avfoundation来采集数据。
    # -i:指定从哪采集的数据,
    # 1代表的是文件索引值(0:摄像头)
    # -r:表示帧率
    # 采集的数据 是原始数据,没有经过压缩# 或者输入命令
    ffmpeg -f avfoundation -pixel_format uyvy422 -i "1" -f flv  pingmu.flv
    
    • 录制音频
    ffmpeg -f avfoundation -i :0 out.wav
    # :0代表音频设备# 或者
    ffmpeg -f avfoundation -i ":0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv maikefeng.flv
    
    • 录制音视频
    ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i "0:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv "rtmp:xxxx推流地址"
    
  • 分解/复用命令

    • 文件格式的转换
    ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
    # copy:针对音视频编解码方式不做改变
    # -i:输入文件
    # -vcodec:视频编解码方式
    # -acodec:音频编解码方式
    
    • 提取视频
    ffmpeg -i out.mp4 -an -vcodec copy out.h264
    
    • 提取音频
    ffmpeg -i out.mp4 -vn -acodec copy out.aac 
    
  • 处理原始数据命令

    原始数据:就是ffmpeg解码后的数据,pcm、yuv格式的数据

    例如 提取PCM数据:

    ffmpeg -i out.mp4 -vn -ar 44100 -ac2 -f s16le out1212.pcm
    #  -ar 表示音频采样率
    # -ac2表示双声道
    # -f s16le:音频数据存储格式,s代表有符号的
    
  • 裁剪与合并命令

    • 视频裁剪
    ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out.ts
    ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out1.mp4# 十分秒
    # -t裁剪后视频的时长为10s
    
    • 视频合并
    ffmpeg -f concat -i in.txt outin999.mp4
    
  • 图片/视频互转命令

    ffmpeg -i outin999.mp4 -f image2 image-%3d.jpeg
    每秒转一张图片
    -f image2将图片转为什么格式# 图片转视频
    ffmpeg -i image-%3d.jpeg out1212121.mp4
    
  • 直播相关命令

    ffmpeg -re -i out.mp4 -c copy -f fly  推流地址
    # -re:减慢帧率速度
    # 推出去的文件格式:-f fly
    

3 ffplay 常用命令

ffplay提供了音视频显示和播放相关的图像信息,音频的波形信息等。简而言之就是一个播放器。

  • 播放一个音视频资源

    ffplay -i input.mp4
    或者 
    ffplay input.mp4
    
  • 指定视频起始位置及播放时长播放

    ffplay -ss 10 -t 20 input.mp4
    ## 从视频的第10秒开始播放,播放20秒
    
  • 自定义播放器的显示窗口标题

    ffplay -window_title "hello world" input.mp4
    

    在这里插入图片描述

  • 播放音频文件以波形的形式显示

    ffplay -showmode 1 input.mp3
    

    在这里插入图片描述

4 ffprobe常用命令

ffprobe是多媒体分析工具,比如音视频的参数、媒体容器的参数信息等。也可以分析媒体文件中每个包的长度、包的类型、帧的信息等。

  • 查看多媒体数据包信息

    ffprobe -show_packages input.mp4
    ## 可以将打印的日志保存在文本中,这样方便查找
    ffprobe -show_packets input.mp4 >log.log
    

    在这里插入图片描述
    show_packets 查看的多媒体数据包信息使用PACKET标签括起来,其中包含的主要信息如下:

    字段描述
    codec_type多媒体类型,表示该段是音频包还是视频包等
    stream_index表示多媒体的stream 索引
    pts表示多媒体的显示时间值
    pts_time根据不同格式计算过后的多媒体的显示时间
    dts多媒体解码时间值
    dts_time根据不同格式计算过后的多媒体解码时间
    duration多媒体包占用的时间值
    duration_time根据不同格式计算过后的多媒体包所占用的时间值
    size多媒体包的大小
    pos多媒体所在的文件偏移位置
    flags多媒体包标记,如关键包与非关键包的标记
  • 查看媒体包中具体的数据

    ffprobe -show_data -show_packets input.mp4
    

    在这里插入图片描述

  • 查看多媒体的封装格式

    ffprobe -show_format input.mp4
    

    在这里插入图片描述

    字段描述信息
    filename表示文件名
    nb_streams表示媒体中包含的流的个数
    nb_programs表示节目数
    format_name表示使用的封装模块的名称
    format_long_name表示封装的完整名称
    start_time表示媒体的起始时间
    duration表示媒体文件的总时间长度
    size表示媒体文件的大小
    bit_rate表示媒体文件的码率(bit/s)
    probe_score表示输入媒体文件的格式与其实际数据格式的匹配度,匹配度高则得分高,例如 input.mp4 确实是 mp4 格式),匹配度低则得分低(比如:input.mp4 其实是 wav 的格式
  • 查看视频文件中的帧信息(最常用命令)

    ffprobe -show_frames input.mp4
    

    例如:输入如下命令

    ffprobe -show_frames https://sdk-release.qnsdk.com/1080_60_5390.mp4 > input.log
    ## 显示结果如下图
    

    在这里插入图片描述

    字段描述信息
    media_type表示帧的类型(视频、音频、字幕等)
    stream_index表示帧所在的索引区域
    key_frame表示是否为关键帧
    pkt_pts表示Frame包的pts
    pkt_pts_time表示Frame包的pts的时间显示
    pkt_dts表示Frame包的dts
    pkt_dts_time表示Frame包的dts的时间显示
    pkt_durationFrame包的时长
    pkt_duration_time表示Frame包的时长时间显示
    pkt_pos表示Frame包的所在文件的偏移位置
    pkt_size表示Frame包的大小
    width帧显示的宽度
    height帧的显示高度
    pix_fmt帧的图像色彩格式
    pict_type帧类型
    SIDE_DATA表示视频中包含SEI信息

    在音视频测试中,经常会用到该命令 ffprobe -show_frames input.mp4 > demo.log,将日志保存至本地文件,这样方面查看数据帧信息。当查看视频中有多少个关键帧时,可以在文件中搜索 pict_type=I,pict_type 字段可以看到视频的帧是I帧P帧或者B帧,也可以通过 pict_type=I,计算出关键帧时间;每一帧的大小也可以通过 ffprobe 的 pkt_size 查看到。

后续还会为小伙伴们补充相关知识,如果感觉博主的文章还不错的话,还请点赞、收藏哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_206627.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

回溯算法 - 二叉树中和为某一值的路径 字符串的排列

目录 1.二叉树中和为某一值的路径 1.1 题目描述 1.2 回溯算法的一般步骤 1.3 解题思路 1.4 代码实现 2. 字符串的排列 2.1 题目描述 2.2 解题思路 2.3 代码实现 1.二叉树中和为某一值的路径 1.1 题目描述 输入一颗二叉树的根节点root和一个整数expectNumber&#xff…

华为模拟器ensp学习笔记

CSDN话题挑战赛第2期 参赛话题:学习笔记 目录前言1️⃣如何注册eNSP设备?2️⃣如何通过SecureCRT登录eNSP模拟设备?结语前言 记录华为模拟器使用中遇到的问题 1️⃣如何注册eNSP设备? 如何注册eNSP设备 重新注册AR、WLAN设备: 启动AR时&…

模块化:CommonJS规范

目录 CommonJS规范 模块使用环境区分 核心语法 如何使用 CommonJS:服务器端使用 CommonJS:浏览器端使用 CommonJS规范 模块使用环境区分 CommonJS规范中,每一个JS文件都可以作为一个模块。模块的引入,主要区分两个环境&…

基于Java后台(Springboot框架)+前端小程序(MINA框架)+Mysql数据库的医院预约挂号小程序系统设计与实现

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序医院预约挂号系统,前台用户使用小程序,后台管理使用基JavaMySql技术;通过后台设置医院信息、录入医院科室信息、录入医生信息、设置医生排班信息、查看预约…

(附源码)计算机毕业设计SSM毕业设计管理系统

毕设帮助,指导,本源码分享,调试部署(见文末) 3.3功能需求分析 本系统采用从上往下的步骤开发,基本功能如下: 本课题要求实现一套毕业设计管理系统,系统主要包括(管理员,教师和学生&a…

python-pyecharts基础知识

资料来源:2022新版黑马程序员python教程,8天python从入门到精通,学python看这套就够了_哔哩哔哩_bilibili 折线图 地图 动态GDP增长图 补充知识: json 1)JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去…

群晖Docker套件注册Harbor私有镜像仓库,并下载运行自己发布的Docker镜像

[群晖Docker套件注册Harbor私有镜像仓库,并下载运行自己发布的Docker镜像] 在进行微服务开发时,一些基础服务组件(Nacos、Redis、Mysql)的运行以及越来越多的业务服务组件的开发,会导致开发者电脑的内存资源紧张&#…

Android:玩转Jetpack Compose之MVI架构——基类中使用页面UiState

系列文章目录 架构一(MVP):Android:玩转RetrofitOkHttpKotlin协程 网络请求架构 架构二(MVVM):Android:玩转网络请求架构 RetrofitKotlin协程简单使用(MVVM架构模式) 架构三(MVI)&a…

吴恩达machine-learning-specialization2022第1周的optional lab

1. 使用python和numpy实现一个线性回归 要求使用梯度下降法,可视化losslossloss随着迭代次数的变化曲线 2. 说明 2.1 拟合函数 fw,b(x(i))wx(i)bf_{w,b}(x^{(i)})wx^{(i)}bfw,b​(x(i))wx(i)b 2.2 均方误差损失函数 J(w,b)12m∑i0m−1(fw,b(x(i))−y(i))2J(w,b)…

【云原生丨Kubernetes系列15】创建 ConfigMap 资源对象

前言 前⾯我们深入学习了 Servie 的使⽤, Service 是 Kubernetes 系统中⾮常重要的⼀个核⼼概念,这节课我们来学习另外⼀个⾮常重要的资源对象: ConfigMap 文章目录前言引入创建引入 应用部署的一个最佳实践是将应用所需的配置信息与程序进行…

【ML13】overfitting and underfitting 过拟合与欠拟合

过拟合与欠拟合过拟合与欠拟合概念过拟合解决办法解决办法一:在训练集中加入更多数据解决办法二:优化数据集 feature selection解决方法三:正则化 Regularization正则化线性回归Recape of Cost Function of Linear RegressionAdd the regular…

算法刷题:可交换的连续最大和

目录前言1. 题目描述2. 题目分析3. 代码实现4. 运行测试后记前言 好久没有做题了,前两天做了一道题,感觉还比较有意思,来分享一下。想学习,但是自己实在是懒,懒癌怎么治?期待着自己彻底奋发图强那一天。 …

【Ubuntu】常用软件下载与安装汇总

前言 发现很多诸如Detectron2的开源项目官方仅提供Liunx系统的安装方式,于是愤而将工作机系统换成了Ubuntu20.04,下面记录一些常用软件的安装方式,以便再次换机时能快速迁移,后续装新的软件会持续更新。 安装yum 直接安装会报错…

潜伏在ISP网络中数月的新黑客组织“Metador”

研究人员称之为“Metador”的一个以前未知的威胁因素已经入侵电信、互联网服务提供商(ISP)和大学大约两年了。 Metador的目标是中东和非洲的组织,他们的目的似乎是长期坚持间谍活动。该组织使用了两种基于Windows的恶意软件,它们被描述为“极其复杂”&a…

JavaScript:BOM

目录 一、BOM介绍 1、BOM的构成 二、window对象常用方法 1、窗口加载事件 2、window.onresize 3、confirm()方法 4、open()方法 5、setTimeout()定时器 6、this的使用 7、JS是单线程 8、JS执行机制 9、URL 10、location对象的属性 11、document对象 12、Date对象…

(附源码)计算机毕业设计ssm办公自动化系统

毕设帮助,指导,本源码分享,调试部署(见文末) 3.3系统流程和逻辑 系统业务流程图,如图所示: 图3-1登录流程图 图3-2添加信息流程图 图3-3注册信息流程图 4.1 概述 办公自动化系统基于Web服务模式,是一个适…

实训十七:交换机单端口环路检测配置

一、实验目的 1、了解单端口环路检测的作用 2、熟悉单端口环路检测的配置 二、 应用环境 1、针对网络中存在用户自行架设的 HUB 设备可能导致的环路,在交换机设备上运行单端 口环路检测以防止由于 HUB 连线失误导致的网络环路。 三、 实验设备 1、 DCN-CS6200 …

【CH559L单片机】串口下载程序说明

【CH559L单片机】串口下载程序说明📌关篇《【硬件开源电路】CH559L开发板和CH55x_DAP-Link二合一开发板分享》 📢CH559L单片机想通过串口来实现程序的烧录,折腾了我2天了,一直是失败,没有成功过一次,昨天跑…

【CSS3】 平面转换 空间转换 动画

目录平面转换平移缩放倾斜旋转transform复合属性空间转换空间位移空间旋转呈现立体图形空间缩放动画动画属性steps逐帧动画多组动画平面转换 CSS3中动画效果包括3个部分:过渡(transition)、变形(transform)、动画&…

如何使用 SAP UI5 V2 ODataModel 模型 API 实现 deepCreate 的场景以及局限性

如果开发人员期望在持久化时请求已创建条目的导航属性(navigation property),请使用可选的 expand 参数在与实体创建的 POST 请求相同的批处理请求中有效地执行此操作。 可选的 inactive 参数确定是否创建非活动 transient 上下文。 这样的上下文只会在属性更新时成…