ffmpeg
鱼儿-1226
离家千里,出了地铁口,万家灯火。
多年从事于音视频相关直播行业,使用 windows / linux系统,熟练使用c++、c#、opengl、unity3d、UE、cocos、ffmpeg、directshow、obs、鼠标键盘钩子、汇编、逆向(爬虫) 等。
展开
-
ffmpeg拉流保存mp4 ,和格式转换
ffmpeg原创 2024-01-29 15:24:40 · 504 阅读 · 0 评论 -
FFmpeg内存IO模式(内存区作输入或输出)
ffmpeg原创 2023-09-22 13:33:19 · 808 阅读 · 0 评论 -
FFMPEG修改视频帧率
ffmpeg原创 2023-09-08 13:49:03 · 866 阅读 · 0 评论 -
Unity的视频捕捉插件FFmpegOut
ffmpeg unity原创 2023-09-05 10:25:07 · 502 阅读 · 0 评论 -
如何使用FFmpeg将flv文件转化为mp4格式
ffmpeg原创 2023-08-29 17:08:12 · 1576 阅读 · 0 评论 -
FFmpeg使用手册 - ffplay 的常用命令
ffmpeg原创 2023-03-28 19:22:03 · 1839 阅读 · 0 评论 -
音视频学习-H264帧基础知识
一组图像 GOP所谓GOP就是1组图像Group of Picture,在这一组图像中有且只有1个I帧,多个P帧或B帧,两个I帧之间的帧数,就是一个GOP。 GOP一般设置为编码器每秒输出的帧数,即每秒帧率,一般为25或30,当然也可设置为其他值。 在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个GOP中后续P、B帧的图像质量,直到下一个GOP 开始才有可能得以恢复,所以GOP值也不宜设置过大。 由于P、B帧的复杂度大于I帧,所以过多的P、B帧会影响编码效率,原创 2022-04-07 10:20:23 · 2592 阅读 · 1 评论 -
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) 不生效
最近在做一个项目用到系统震动,最合适满足需求的是 iOS系统 api 提供的 AudioServicesPlaySystemSound(kSystemSoundID_Vibrate),于是就高兴的调用了这强大的函数;比较诡异的是当把手机打开震动反馈与铃音提示,开始一直不震动最后查看官网的说法:根据官方文档说法有些设备不支持,但我的设备是 iOS14,并且是iPhone11 这个设备单独运行demo是可以震动的,但为什么在项目里不震动呢???开始探索,在调用AudioServices...原创 2020-12-31 10:08:36 · 2454 阅读 · 3 评论 -
文件音频编辑
音频编辑功能结构一个音频编辑的基本功能是要包含上面图片中的这些功能的。解释顺序如下:编辑操作、音频播放、音频保存编辑操作1.ActionModel对于编辑,首先要记录每次编辑所对应的起始点和结束点即beginFrame和endFrame,还要记录一个播放的位置 seekFrame。创建一个model用来记录每次的操作class WQAudioEditModel: NSObject { //开始 var beginFrame:Int64! = 0...原创 2020-12-31 10:07:13 · 295 阅读 · 1 评论 -
音视频-视频编/解码 实战
先来简单看下 音视频的采集 。一、音视频的采集音视频采集的核心流程:音/视频采集用到的视频输出的类是AVCaptureVideoDataOutput,音频输出的类是AVCaptureAudioDataOutput。 采集成功后的代理方法输出的音视频对象为CMSampleBufferRef类型的sampleBuffer。这里我们可以使用AVCaptureConnection来判断是音频还是视频。- (void)captureOutput:(AVCaptureOutp...原创 2020-12-15 10:45:39 · 1153 阅读 · 0 评论 -
ffmpeg命令大全
前言FFMPEG是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频文件。本文将简要介绍一下 FFMPEG 库的基本目录结构及其功能,然后详细介绍一下我们在日常工作中,如何使用 ffmpeg 提供的工具来处理音视频文件。FFMPEG 目录及作用· libavcodec: 提供了一系列编码器的实现。 · libavformat: 实现在流协议,容器格式及其本IO访问。 ·原创 2020-12-14 17:50:29 · 831 阅读 · 0 评论 -
VideoToolBox 硬编码
Apple Developer VideoToolBox 官方文档在iOS4.0苹果开始支持硬编解码,不过硬编解码在当时还属于私有API,不提供给开发者使用。在2014年的WWDC大会上,也就是iOS8.0之后,苹果才放开了硬编解码的API。VideoToolbox.framework是一套纯C语言的API,其中包含了很多C语言函数,同时VideoToolbox.framework是基于Core Foundation库函数,基于C语言VideoToolbox实际上属于低级框架,它是可以直接访问硬件编码原创 2020-12-10 10:33:41 · 1550 阅读 · 0 评论 -
VFoundation音频开发篇
预备知识对于音频我们需要一下储备知识,这篇文章主要介绍Audio的基础知识,我们需要知道音频的采样率、采样频率、采样位数、通道数、帧、音频周期、音频数据格式、iOS支持的文件格式和iOS对音频处理的一些框架等等。1、采样率、比特率:采样率:8000 Hz - 电话所用采样率, 对于人的说话已经足够11025 Hz-AM调幅广播所用采样率22050 Hz和24,000 Hz- FM调频广播所用采样率32000 Hz - min...原创 2020-12-03 11:06:36 · 459 阅读 · 0 评论 -
AVFoundation开发秘籍笔记:第5章 AV Kit用法
第4章中介绍了使用AVPlayer和AVPlayerltem创建一个自定义视频播放器的方法。创建一个自定义视频播放器在很多情况下是需要的,因为这样才可以对所有播放器行为和用户界面进行控制。不过我们是否希望既能利用AV Foundation强大的功能,又可以提供给用户熟悉的界面和优秀的体验呢,就如同使用iOS.上的Video应用程序或Mac OS X上的QuickTime播放器一样的感觉。要取得同样的效果和体验还需要进行大量的工作,并且还需要开发者为iOS或Mac OSX的不同版本编写多个用户界面。电视广“告原创 2020-11-26 13:53:09 · 1548 阅读 · 0 评论 -
AVFoundation开发秘籍笔记:第6章 捕捉媒体
6.1 捕捉功能综述AV Foundation的照片和视频捕捉功能从框架搭建之初就是它的一个强项。从iOS 4版本开始,开发者就可以直接访问iOS设备的摄像头和摄像头生成的数据,定义一个新的用于照片和视频应用的类。框架的捕捉功能仍然是苹果公司媒体工程师最关注的领域,每个新版本的发布都带来强大的新功能和提升。虽然核心的捕捉类在iOS和OS X上是一致的,但你会发现不同平台下的框架还是有一些区别,这些区别一般都是针对平台的定制功能。比如,Mac OSX为截屏功能定义了AVCaptureScreenInput原创 2020-11-26 13:52:26 · 668 阅读 · 0 评论 -
AVFoundation 的时间处理
媒体时间处理的背景AVPlayer 与AVPlayerItem都是基于时间的对象,但是在我们使用他们的功能之前,需要了解AVFoundation框架呈现时间的方式。人们习惯于用日子、小时、分钟、秒来表示时间,而在开发人员中则把时间精确到毫秒、纳秒。所以用一个双精度浮点型数值来表示时间也算是合情合理。在 iOS 开发中,通常使用 NSTimeInterval 来表示一个时间,其实就是简单的对double进行了typedef定义。不过使用浮点型数据表示时间存在一些问题,因为浮点型数据在进行运算会导致结果不原创 2020-11-25 13:39:29 · 579 阅读 · 0 评论 -
AVFoundation开发秘籍笔记:第9章 媒体的組合和編緝
9.1 組合媒体想象一下最近如果去一趙旧金山,在那里拍摂了一些金冂公国、日本茶圓和漁人码头的短片。我們希望將这些视頻中的最好镜头组合在一起, 配上合适的音乐,做成一个可与朋友和家人一起分享的影片,如圏9-1所示。要完成这一任务,我们首先需要將相美片段从这些源媒体中提取出来,再將它們組成一个临时排列。AV Foundation明確定于了这个功能,可以辻幵友者筒単地将多个音頻和視頻資源組合成一个新資源。圏9-2給出了框架提供的与資源組合相关的几个核心类。AV Foundation有关资.原创 2020-11-25 13:38:56 · 1810 阅读 · 1 评论 -
AVFoundation开发秘籍笔记:第12章 动图层内容
12.1 Core Animation应用Core Animation是OS X和iOS平台提供的用于合成和制作动画的框架,苹果平台上面漂亮、流畅的动画效果都是通过这个框架实现的。它提供- -种简 单、声明式应用程序模型使得在不需要使用OpenGL或OpenGL ES框架的前提下就可以很容易地创建高性能、基于GPU的动画效果。我们已经在书中见过AV Foundation是如何使用Core Animation框架提供硬件加速视频渲染效果的,其中就用到了AVPlayerL ayer和AVVideoCaptu原创 2020-11-25 13:34:04 · 767 阅读 · 0 评论 -
AVFoundation关于 iOS 中的视频压缩
最近在开发过程中涉及到了视频压缩的需求,那么在 iOS 上怎么实现自定义码率和分辨率的视频压缩呢?1. 传统压缩方式产品需求:不管原视频的清晰度如何,压缩后的视频码率和分辨率是一样的。首先,iOS在AVFoundation中已经提供了简单的视频压缩方法,示例代码如下:正常情况下这段代码不会出现任何问题,但是大家可以用下面的视频做个测试,链接: https://pan.baidu.com/s/1wLVbDFtzROVPo8T1qw6MXA 密码: ij7d。结果会发现原视频分辨率1080x60原创 2020-11-25 13:33:01 · 1633 阅读 · 0 评论 -
AVFoundation 自定义相机
AVFoundationAssets:加载、检查和导出媒体资产和元数据,并执行媒体示例数据的低级读写。Playback获取并检查媒体资产;用于回放和自定义回放行为的队列媒体;编辑和合并资产;导入和导出原始媒体流。Capture拍摄照片,录制视频和音频;配置内置摄像头和麦克风或外部捕获设备。Editing在一个组合中合并、编辑和混合来自多个来源的音频和视频轨道。Audio播放、记录和处理音频;配置你的应用程序的系统音频行为。Speech转换文本到语音捕捉会话:AVCaptureS原创 2020-11-24 20:45:05 · 839 阅读 · 0 评论 -
AVFoundation 二维码识别,人脸识别
二维码识别AVFoundation 二维码识别demo主要代码:#import "THCameraController.h"#import <AVFoundation/AVFoundation.h>@interface THCameraController ()<AVCaptureMetadataOutputObjectsDelegate>@property(strong,nonatomic)AVCaptureMetadataOutput *metadata.原创 2020-11-24 20:44:21 · 1831 阅读 · 0 评论 -
AVFoundation照片/视频捕捉功能 小视频/直播
AVFoundation捕捉会话: AVCaptrueSession 捕捉设备: AVCaptureDevice 捕捉设备输入: AVCaptureDeviceInput 捕捉设备输出: AVCaptureOutput 抽象类 AVCaptureStillImageOutput AVCaptureMovieFileOutput AVCaptureAudioDataOutput AVCaptureVideoDataOutput 捕捉连接: AVCaptureConnection原创 2020-11-24 17:21:54 · 6921 阅读 · 0 评论 -
AVFoundation框架解析(十二)—— AVFoundation的变化(四)
版本记录版本号 时间 V1.0 2017.09.01 前言AVFoundation框架是ios中很重要的框架,所有与视频音频相关的软硬件控制都在这个框架里面,接下来这几篇就主要对这个框架进行介绍和讲解。感兴趣的可以看我上几篇。1. AVFoundation框架解析(一)—— 基本概览2. AVFoundation框架解析(二)—— 实现视频预览录制保存到相册3. AVFoundation框架解析(三)—— 几个关键问题之关于框架的深度概括4. AVFoundation框架解析(原创 2020-11-17 17:43:51 · 1040 阅读 · 0 评论 -
AudioUnit录制音频+耳返(四)
前言视频直播,K歌应用等等都会有音频录制的功能,音频录制时还可以带有耳返效果,那这些是如何实现的呢?如果仅仅是录制音频,那使用IOS的AudioQueue框架实现即可,但是在直播这些实时性要求比较高、特效比较多(比如混音,变声等)的应用中,AudioQueue可能满足不了要求了,AudioUnit可以完成这些功能。本文将介绍用AudioUnit完成音频采集,耳返效果,保存裸PCM音频文件AudioUnit音频系列AudioUnit之-播放裸PCM音频文件(一)AudioUnit之-录制音频+耳原创 2020-11-04 11:08:05 · 3893 阅读 · 0 评论 -
AudioUnit录制和播放m4a/CAF/WAV(五)
前言直有时候我们采集音频后希望将它通过网络传输给另一端播放,比如直播时,主播录制的声音通过网络传输给观众再播放,那肯定要先将裸音频数据先压缩了在传输,比如我们可以用aac编码方式压缩,可以用MP3编码方式压缩,他们都可以在保证音质效果的前提下极大的压缩音频数据,至于aac和MP3算法的区别和原理这里就不讨论了。其实能进行aac和mp3压缩的方式有很多,比如可以用FFMpeeg库,也可以用苹果自带的AudioToolbox框架,这里将讨论如何用AudioUnit实现aac压缩音频数据并保存到M4A封装格式原创 2020-11-04 11:07:35 · 1196 阅读 · 0 评论 -
AudioUnit合并音频文件(七)
前言上一篇文章初步了解了音频混合的原理及如何使用Mixer Unit混合音频的流程,学习了如何在录制音频时播放背景音乐开启耳返效果。那有人就会提出疑问,我录制时只需要播放背景音乐不想开启耳返,录制结束后再将录制的声音和背景音乐混合,这要如何实现?这是一个很好的问题,也是一个很常用的场景,对于问题的前半部分,我想只要学会了前面几篇文章,很简单实现,对于后半部分问题该如何做呢?离线音频混合,离线与在线是个相对的概念,在线就是音频数据最终会通过扬声器播放出来。离线的意思就是音频数据不发送给扬声器,由APP自己原创 2020-11-04 11:06:02 · 966 阅读 · 0 评论 -
AudioToolBox音频编解码(八)
前言AAC音频数据格式是一个很常见的音频压缩编码数据格式,经常会有这样的需求,通过麦克风采集到的PCM格式音频数据,编码为AAC格式音频数据,然后通过网络发给另一端,网络的另一端接收到AAC格式音频数据后,解码为PCM格式音频数据。本文将介绍用AudioToobox框架实现音频的编解码AAC数据格式封装格式ADTS解析原始音频编码后形成的裸的AAC数据是无法直接解码的,一般会在前面添加能够描述音频信息(如采样率,采样格式,声道数)的头部信息,常见的有ADTS封装格式,如下:(ADTS头部)(压原创 2020-11-04 11:05:29 · 1183 阅读 · 0 评论 -
VideoToolbox硬编码YUV为h264(九)
前言IOS 8.0系统之后,苹果提供了VideoToolbox框架,它可以将摄像头采集的原始视频数据编码为指定的格式,如常见的h264/h265。摄像头采集的原始视频数据是很大的,以YUV颜色空间为例,1280x720p 30fps分辨率的视频,1秒的大小 = 1280x720x1.5x30 = 41.472mbps,所以原始视频数据不利于存储和在网络上进行传输,一般在采集到原始视频数据后都会进行一次有损压缩,然后进行存储或者传输。本文将记录如何采集视频然后编码为h264码流h264码流格式1、原创 2020-11-04 11:05:00 · 1629 阅读 · 0 评论 -
音视频传输协议(RTSP/RTP/RTCP)(十三)
前言RTP/RTCP协议设计用来传输音视频数据,对应的RFC文档为:RFC3550,对应的中文版RFC3550中文版RTP被定义为在一对一或者一对多的传输情况下工作,其目的是为了提供时间信息和实现流同步。RTP的典型应用是建立在UDP上的,也可以建立在TCP等其它协议之上进行工作,一般将其看作传输层的一部分,位于UDP层之上,应用层之下,它不保证数据传输的可靠性RTCP为RTP提供服务质量保证,其主要功能为:服务质量的监视与反馈、媒体间的同步,以及多播组中成员的标识。RTCP协议是基于每隔一段时原创 2020-11-04 11:04:06 · 1212 阅读 · 0 评论 -
MAC编译ffmpeg+x264+mp3lame(IOS和android)(一)
前言FFmpeg是一个很强大的垮平台的音视频处理库,它可用于Mac/windows/ios/android/linux等各个平台,FFmpeg库自身native代码实现了很多功能,也引入了其它的很多外部库,比如x264、fdk_aac、lamemp3等等,然后对这些外部库做封装,对外则提供了统一的接口。如下提供了尽量简单的方法编译用于这些平台的ffmpeg库(引入常用的x264、fdk_aac、lamemp3外部库)。编译基础知识编译一般分为本地编译和交叉编译,本地编译是相对于交叉编译而言的。本原创 2020-10-30 10:19:35 · 1828 阅读 · 1 评论 -
YUV格式与RGB的转换
前言YUV与RGB是两种不同的颜色空间,视频一般都用YUV来进行存储,因为相同分辨率的视频RGB占用空间为YUV420的1.5倍YUV的采样方式YUV根据采样方式的不同,其占用大小也不一样,主流有如下三种YUV444 每一个Y对应一组UV分量,即:一个YUV占8+8+8 = 24bits,3个字节。 YUV422 每两个Y共用一组UV分量,即:一个YUV占8+4+4 = 16bits 2个字节。 YUV420 每四个Y共用一组UV分量,即:一个YUV占8+2+2 = 12bits原创 2020-10-30 10:16:50 · 1134 阅读 · 0 评论 -
MAC编译ffmpeg+x264(IOS和android)(一)
前言FFmpeg是一个很强大的垮平台的音视频处理库,它可用于Mac/windows/ios/android/linux等各个平台,FFmpeg库自身native代码实现了很多功能,也引入了其它的很多外部库,比如x264、fdk_aac、lamemp3等等,然后对这些外部库做封装,对外则提供了统一的接口。如下提供了尽量简单的方法编译用于这些平台的ffmpeg库(引入常用的x264、fdk_aac、lamemp3外部库)。编译基础知识编译一般分为本地编译和交叉编译,本地编译是相对于交叉编译而言的。本原创 2020-10-30 10:16:16 · 3479 阅读 · 0 评论 -
windows编译ffmpeg+x264库(android和linux)(二)
前言ffmpeg是一个跨平台的音视频处理库,为了跨平台那么就需要编译出适用于各个平台的ffmpeg库。一般在windows平台下会进行windows开发和安卓开发,所以本文的目的就是在windows平台下编译用于windows和安卓使用的ffmpeg库在windows平台下编译ffmpeg有多种方式:1、windows下装linux虚拟机编译用于Linux,Android平台使用的库2、windows下通过Cygwin或minGW+MSYS编译用于windows,Android平台的库这里采原创 2020-10-30 10:15:22 · 675 阅读 · 0 评论 -
ubuntu下编译ffmpeg+x264库(android和Linux)(三)
前言ffmpeg是一个跨平台的音视频处理库,为了跨平台那么就需要编译出适用于各个平台的ffmpeg库。前文分别实现了在windows平台和Mac平台下编译安卓,mac,windows使用的库,本文的目的就是在Linux平台下编译用于Linux和安卓使用的ffmpeg库。这里采用的Linux为Ubuntu系统,基本上Mac平台的编译脚本只需要做少量的修改就可以移植到Ubuntu系统。编译环境准备 1、安装Ubuntu系统虚拟机: 我这里用的是Mac电脑(ps:mac电脑的可以直接使用脚本编译a原创 2020-10-30 10:14:43 · 541 阅读 · 0 评论 -
ffmpeg之-AVFrame解析(五)
前言AVFrame 位于libavutil/frame.h中,AVpacket一样,是FFmpeg中很重要的结构体。它用于表示未压缩的音视频数据(编码前或者解码后),使用了引用计数机制来管理内存源码首先是源码部分(基于ffmpeg版本为4.2),已去掉注释部分typedef struct AVFrame {#define AV_NUM_DATA_POINTERS 8 uint8_t *data[AV_NUM_DATA_POINTERS]; int linesize[.原创 2020-10-29 10:29:31 · 3087 阅读 · 0 评论 -
ffmpeg之-ffmpeg/ffplay/ffprobe(六)
ffplay常用命令1、ffplay播放yuv文件ffplay -f rawvideo -pix_fmt nv12 -video_size 640x480 -framerate 50 -i test.yuv备注:如果不指定-pix_fmt,默认为yuv420p;如果不指定framerate 默认25fps通过ffplay -pix_fmts 可以查看支持的播放格式2、ffplay播放pcm文件ffplay -ar 44100 -ac 2 -f f32le -i test_441_f32le_原创 2020-10-29 10:28:47 · 421 阅读 · 0 评论 -
x264编码YUV420P为H264格式ffmpeg(七)
前言原始的视频数据(YUV格式)非常大,要进行存储或者传输之前一般都需要进行压缩处理,x264支持几乎所有h264的特性而且是速度最快的商用编码器之一。ffmpeg编码流程图image.png根据官网的介绍,原始视频帧首先送入输入缓冲区,此时并没有立即进行编码,输入缓冲区默认存储gopsize+一个GOP内B帧数量+4 个原始视频帧后输出缓冲区才有输出1、编码器有一个draining状态,当原始视频帧为NULL时,编码器进入draining状态,此时输入缓冲区不再接受新的输入.原创 2020-10-29 10:28:13 · 1287 阅读 · 0 评论 -
pcm编码为aac/MP3格式ffmpeg(八)
前言pcm音频是未压缩的数据,占空间,在存储或者传输时一般都会选择先进行有损压缩(比如aac,MP3等等)。pcm音频数据在文件存储时一般都按照planner格式存储,例如:声道1声道2声道3..声道1声道2声道3......常见音频编码格式参考资料 地址ffmpeg函数编码流程以下流程图还包括编码后的数据封装到指定的文件格式容器中2.jpgffmpeg编码相关函数介绍1、重要的结构体AVCodec1、常见音频编码格式介绍,参考博客文档:https://blo.原创 2020-10-29 10:27:40 · 2389 阅读 · 2 评论 -
音频重采样ffmpeg(九)
前言广义的音频重采样包括:1、采样格式转化:比如采样格式从16位整形变为浮点型2、采样率的转换:降采样和升采样,比如44100采样率降为2000采样率3、存放方式转化:音频数据从packet方式变为planner方式。有的硬件平台在播放声音时需要的音频数据是planner格式的,而有的可能又是packet格式的,或者其它需求原因经常需要进行这种存放方式的转化通常意义上的音频重采样是指上述的第2点,即升采样和降采样,这个对音质有一定影响重采样相关函数流程图1584929874392.原创 2020-10-29 10:26:42 · 1999 阅读 · 1 评论 -
aac和h264软解码ffmpeg(十)
前言音视频解码是一个很常用的需求场景,同时它也是一个非常耗时的过程。压缩的音视频数据aac音频流,h264视频流等等,常常需要先解码为未压缩数据才能进行播放,ffmpeg为音视频的软解码提供了统一的接口,使用起来非常方便。软解码相关流程image.png软解码相关函数AVPacket结构体 该结构体用于存储压缩的音频或者视频对应初始化函数和释放函数av_packet_alloc();av_packet_free();av_packet_unref();AVFrame结构原创 2020-10-29 10:26:10 · 918 阅读 · 0 评论