- 博客(11)
- 收藏
- 关注
原创 ffmpeg重采样补偿解释
目标样本数与当前帧样本数不匹配时这段代码通过计算目标音频样本数与输入音频帧样本数之间的差异(和),并利用这些补偿参数来调整音频重采样过程。这是为了保证在音频重采样时,目标音频的播放速度、时间轴和样本数能够与输入音频保持同步。通过这种补偿机制,可以避免因样本数或采样率不匹配导致的音频失真或播放异常。这段代码的计算过程与将一帧44100 Hz的音频数据重采样为48000 Hz的情况是类似的,但它处理的情况要更复杂一些,因为它不仅仅是简单的调整采样率,而是根据目标样本数与当前样本数的差异进行补偿。
2024-12-26 00:20:34
981
原创 FFmpeg音视频编码实战 - 2.yuv_to_h264
通常情况下,视频流占⽤的带宽越⾼则视频质量也越⾼,需要的⽹络带宽也越⼤,解决这⼀⽭盾的钥匙当然是视频编解码技术。在相同的视频质量条件下,哪个占⽤的⽹络带宽更少(⽂件体积⼩)。tune是x264中重要性仅次于preset的选项,它是视觉优化的参数,tune可以理解为视频偏好(或者视频类型),tune不是⼀个单⼀的参数,⽽是由⼀组参数构成-tune来改变参数设置。通常是在保证可接受视频质量的前提下选择⼀个最⼤的CRF值,如果输出视频质量很好,那就尝试⼀个更⼤的值,如果看起来很糟,那就尝试⼀个⼩⼀点值。
2024-11-19 17:25:00
708
原创 FFmpeg音视频编码实战 - 1.pcm_to_aac
测试发现,其中AAC解码输出的数据为浮点型的 AV_SAMPLE_FMT_FLTP 格式,MP3解码输出的数据为 AV_SAMPLE_FMT_S16P 格式(使⽤的mp3⽂件为16位深)。avcodec_receive_packet() 直到其返回 AVERROR_EOF,取出所有缓存帧,avcodec_receive_packet() 返回 AVERROR_EOF 这⼀次是没有有效数据的,仅仅获取到⼀。planar为FFmpeg内部存储⾳频使⽤的采样格式,所有的Planar格式后⾯都有字⺟P标识。
2024-11-19 14:52:15
753
原创 FFMPEG视频解封装解码 - 4、音频解码实战 AAC解码为PCM
avcodec_send_packet、avcodec_receive_frame的API是FFmpeg3版本加⼊的。为了正确的使⽤它们,有必要阅读FFmpeg的⽂档说明。
2024-11-08 14:44:31
969
原创 FFMPEG视频解封装解码 - 3、解封装实战 MP4中提取h264视频流
H.264 是一种高效的视频编码方法,可以在保证视频质量的前提下显著减少视频文件的大小。⼀个NALU = ⼀组对应于视频编码的NALU头部信息 + ⼀个原始字节序列负荷(RBSP,Raw。H.264原始码流(裸流)是由⼀个接⼀个NALU组成,它的功能分为两层,VCL(视频编码层)和。每个NAL单元是⼀个⼀定语法元素的可变⻓字节字符串,包括包含⼀个字节的头信息(⽤来表。PPS:图像参数集,对应的是⼀个序列中某⼀幅图像或者某⼏幅图像的参数。一个简单的实例,在MP4和TS文件中提取h264视频流。
2024-11-07 21:07:20
709
原创 FFMPEG视频解封装解码 - 2、解封装实战 MP4中提取AAC音频流
这种格式的特征是可以确定的找到这个⾳频数据的开始,不需进⾏在⾳频数据流中间开始的解码,即它的解码必须在明确定义的开始处进⾏。所以说number_of_raw_data_blocks_in_frame == 0 表示说ADTS帧中有⼀个。⼀个AAC原始数据块⻓度是可变的,对原始帧加上ADTS头进⾏ADTS的封装,就形成了ADTS帧。number_of_raw_data_blocks_in_frame + 1个AAC原始帧。机上播放,很⼤的可能就是AAC⽂件的每⼀帧⾥缺少了ADTS头信息⽂件的包装拼接。
2024-11-07 13:52:23
691
原创 FFMPEG视频解封装解码 - 1、解封装基本流程
使用avcodec_receive_frame()和av_send_packet(),可以将AVPacket发送到解码器,并接收解码后的帧(AVFrame)。补充:在初始信息不足的情况下(比如FLV 和 H264 文件),avformat_find_stream_info 接口需要在内部调用read_frame_internal 接口读取流数据(音视频帧),然后再分析后,设置核心数据结构 AVFormatContext。也可使用av_find_best_stream()找到视频流和音频流。
2024-11-06 21:28:14
438
原创 FFmpeg过滤器框架分析-音频audio
音频过滤器框架同视频相似(可参考我的视频框架分析),有一个小小不同是音频在出口过滤器abuffersink前还需要一个接收过滤器aformat。下面是实例代码,输入2段音频,将音频混合起来。AudioMixer.cpp文件。AudioMixer.h文件。main.cpp文件。
2024-06-07 11:12:38
438
原创 FFmpeg过滤器框架分析-视频video
AVFilterGraph-对filters系统的整体管理重点AVFilter-定义filter本身的能⼒AVFilterContext-filter实例,管理filter与外部的联系// filter实例,管理filter与外部的联系重点char *name;// 从属于哪个AVFilterGraphAVFilterLink-定义两个filters之间的联接。
2024-06-05 21:19:32
1561
原创 h264编码原理
编码的目的是为了压缩,各种视频编码算法都是为了让视频体积变得更小,减少对存储空间和传输带宽的占用。编码的核心是去除冗余信息,通过以下 几 种冗余来达到压缩视频的目的:1.空间冗余 图像相邻像素之间有较强的相关性, 比如一帧图像划分成 多 个 16x16 的块之后,相邻的块很多时候都有比较明显的相似性。2.时间冗余: 视频序列的相邻前后帧图像之间内容相似,比如帧率为 25fps 的视频中前后两帧图像相差只有 40ms ,前后两张图像的变化较小,相似性很高。
2024-05-28 21:55:18
2103
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人