网站首页 > 编程文章 正文
前言:
作者简介:小曾同学.com,小伙伴们也可以叫我小曾,一个致力于测试开发的博主??
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。
座右铭:不想当开发的测试,不是一个好测试??。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!
之前给小伙伴们分享了在Mac中安装FFMPEG,今天主要给大家整理了下在音视频测试中经常使用的FFMPEG相关命令。
1 FFMPEG概念
FFmpeg 是一款音视频编解码工具,也是一组音视频编解码开发套件,为开发者提供了丰富的音视频处理调用接口。
FFmpeg 源代码编译后会生成几个可执行程序,分别是ffmpeg、ffplay、ffprobe,这三个也称为 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 -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
相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】
音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~
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标签括起来,其中包含的主要信息如下:
查看媒体包中具体的数据
ffprobe -show_data -show_packets input.mp4
查看多媒体的封装格式
ffprobe -show_format input.mp4
查看视频文件中的帧信息(最常用命令)
ffprobe -show_frames input.mp4
例如:输入如下命令
ffprobe -show_frames https://sdk-release.qnsdk.com/1080_60_5390.mp4 > input.log
## 显示结果如下图
在音视频测试中,经常会用到该命令 ffprobe -show_frames input.mp4 > demo.log,将日志保存至本地文件,这样方面查看数据帧信息。当查看视频中有多少个关键帧时,可以在文件中搜索 pict_type=I,pict_type 字段可以看到视频的帧是I帧、P帧或者B帧,也可以通过 pict_type=I,计算出关键帧时间;每一帧的大小也可以通过 ffprobe 的 pkt_size 查看到。
后续还会为小伙伴们补充相关知识,如果感觉博主的文章还不错的话,还请点赞、收藏哦!
原文链接:ffmpeg、ffplay、ffprobe 常用命令详解(音视频必备)
猜你喜欢
- 2024-09-08 技术分享| 如何使用FFmpeg命令处理音视频
- 2024-09-08 ubuntu ffmpeg开发环境搭建(ffmpeg linux开发)
- 2024-09-08 嘉宾博文:OpenCV如何在区块链操作系统中进行交叉编译
- 2024-09-08 想做人工智能的你,OpenCV安装好了吗?AI大神手把手教会你
- 2024-09-08 Kotlin编写一个AudioMerger 在线音视频解析七
- 2024-09-08 FFmpeg中与视频解码相关知识简介(ffmpeg hevc解码)
- 2024-09-08 ffmpeg教程-手把手教你如何简单快捷处理音视屏
- 2024-09-08 C++与音视频处理: 处理音频和视频数据的编码和解码
- 2024-09-08 ffmpeg安装大放送,包括编译需要的支持库
- 2024-09-08 ffmpeg推流桌面直播(ffmpeg推流rtsp命令)
你 发表评论:
欢迎- 05-09Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 05-09《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- 05-09MapStruct架构设计(mapstruct @mapping)
- 05-09分布式微服务架构组件(分布式微服务架构设计)
- 05-09Java Swing组件下的JButton实例(java swing 组件)
- 05-09java基础都在这了,小主们拿去吧(java基础是指什么)
- 05-09AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 05-09【Spring Boot】WebSocket 的 6 种集成方式
- 最近发表
-
- Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- MapStruct架构设计(mapstruct @mapping)
- 分布式微服务架构组件(分布式微服务架构设计)
- Java Swing组件下的JButton实例(java swing 组件)
- java基础都在这了,小主们拿去吧(java基础是指什么)
- AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 【Spring Boot】WebSocket 的 6 种集成方式
- Java 中五种最常见加密算法:原理、应用与代码实现
- 用注解进行参数校验,spring validation介绍、使用、实现原理分析
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)