- 博客(31)
- 资源 (1)
- 收藏
- 关注
原创 FFmpeg的HEVC解码器源代码学习笔记-3
使用FFmpeg对HEVC码流进行解码时,所采用的各种结构体的介绍:为了弄清楚这个结构体每个变量的作用,以及在解码过程中的实际值,我将HEVC解码过程中的codec变量打印出来
2024-02-25 16:31:36
713
原创 HEVC视频编解码标准学习笔记-1
视频编解码标准H.265/HEVC(High Efficiency Video Coding)通过将视频数据编码为更高效格式,大幅改善了视频流的压缩效率。这里主要介绍Tile、Slice和CTU的定义,以及介绍这些技术组件之间的相互关系。
2024-02-21 08:07:48
1579
原创 FFmpeg的HEVC解码器源代码学习笔记-1
一直想写一个HEVC的码流解析工具,看了雷神264码流解析工具,本来想尝试模仿写一个相似的265码流分析工具,但是发现265的解码过程和结构体和264的不太一样,很多结构体并没有完全暴露出来,没有想到很好的方法获得量化参数,运动向量等这些信息。想着从头学习一下ffmpeg中的265解码函数,再来获取解码后的量化参数,运动向量等一系列信息,再做码流分析。这里主要学习HEVC的解析函数代码众所周知,解码器是标准的,因此只要按照官方给定的解码流程对码流进行解码就能正常解码。
2024-02-17 23:30:43
1667
原创 FFMPEG 不到200行实现HEVC/H265解码器并读取量化参数
本文采用不到200行代码基于ffmpeg实现了一个简易的HEVC解码器
2024-01-29 00:06:38
1196
1
原创 Python程序报错SyntaxError: Non-UTF-8 code starting with ‘\xef‘ in file
Python报错 SyntaxError: Non-UTF-8 code starting with '\xef' in file
2022-10-27 11:17:18
6216
原创 视频编解码中的temporal id和layer id(x265,HM,VTM)
但是依旧没有直接的变量可以用来提取temporal_id。在《新一代高效视频编解码原理、标准与实现》书中NAL部分提到NALU头重承载了NALU载荷的内容特征,由定长的4部分组成:forbidden_zero_bit, nal_unit_type, nuh_layer_id, nuh_temporal_id_plus1,分别占用1,6,6,3个比特位,并排列后成为一个新的变量,在x265中为nalUnitType。Temporal_Id = nuh_temporal_id_plus1-1得到时域层级。
2022-09-27 09:44:08
1257
原创 FFmpeg转yuv到png报错
FFmpeg转yuv到png报错最近转yuv到png的时候出现下面很奇怪的错误ffmpeg -i 001.yuv -s 1280x720 -pix_fmt yuv420p 001.png会显示Picture size 0x0 is invalidInvalid argument这是因为从yuv转png时要先写格式,再写输入正确的命令应该是:ffmpeg -s 1280x720 -pix_fmt yuv420p -i 001.yuv 001.png输入格式的顺序有差别但是在使用pn
2022-04-29 15:37:14
3756
原创 417太平洋大西洋水流问题(中等题)
417太平洋大西洋水流问题(中等题)题目有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights , heights[r][c] 表示坐标 (r, c) 上单元格 高于海平面的高度 。岛上雨水较多,如果相邻单元格的高度 小于或等于 当前单元格的高度,雨水可以直接向北、南、东、西流向相邻单元格。水可以从海洋附近的任何单元
2022-04-27 08:37:29
213
原创 LeetCode 380 在O(1)时间内插入、删除和获取随机元素
LeetCode 380在O(1)时间内插入、删除和获取随机元素题目题解题目实现RandomizedSet 类:RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。int getRandom() 随机返回现有集合中的
2022-04-13 12:00:22
374
原创 leetcode 593 有效的正方形
题目给定2D空间中四个点的坐标 p1, p2, p3 和 p4,如果这四个点构成一个正方形,则返回 true 。点的坐标 pi 表示为 [xi, yi] 。输入 不是 按任何顺序给出的。一个 有效的正方形 有四条等边和四个等角(90度角)。示例 1:输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]输出: True示例 2:输入:p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12]输出:f
2022-04-12 20:30:33
463
原创 第287场周赛
第287场周赛第287场周赛第一题(模拟)第二题(哈希)第三题(二分)第四题(模拟)第287场周赛第一题(模拟)这道题取巧用python分割字符串更加方便class Solution: def convertTime(self, current: str, correct: str) -> int: a = current.split(':') b = correct.split(':') a[0] = int(a[0])
2022-04-04 22:01:06
133
原创 第75场双周赛
最近的题目貌似有点简单第一题,直接暴力对比每位是否相等,统计所有不相等位的数量class Solution {public: int minBitFlips(int start, int goal) { int ans = 0; while(start || goal) { int a = start%2; int b = goal%2; if(a != b)
2022-04-04 21:39:05
792
原创 IBDI(Internal Bit Depth Increase)技术
IBDIIBDI(Internal Bit Depth Increase)技术是指在编码器的输入端将未压缩图像像素深度由P比特增加到Q比特(Q>P),在编码器的输出端又将解压缩图像像素深度从Q比特恢复到P比特。IBDI技术提高了编码器的编码精度,降低了帧内/帧间预测误差。但由于要建立参考队列,像素深度为Q比特的重构图像须占较大的内存空间。此外,在进行帧间运动估计和补偿时,需要较多的内存访问带宽,这样会给内存受限的系统带来不便。解决的办法是引入参考帧压缩算法,来减小重构图像的数据量。......
2022-03-15 16:03:32
722
原创 annoconda在D盘创建环境
conda create --prefix=D:\python36\py36 python=3.6上面的命令中, 路径D:\python36是先建好的文件夹,py36是需要安装的虚拟环境名称。请注意,安装完成后,虚拟环境的全称包含整个路径,为D:\python36\py36。激活指定路径下的虚拟环境的命令如下:activate D:\python36\py36退出虚拟环境的命令如下:deactivate想要删除conda remove --prefix=D:\python36.
2021-09-07 10:59:24
8718
7
原创 leetcode特别赛
乐鑫02.调整电平某实验逻辑电路中,初始时有cnt个观测点处于低电平状态。对于某个观测点的电平调整意味着:如果观测点处于低电平,会被调整为高电平;而观测点处于高电平,会被调整为低电平。第 1 轮,每个观测点调整一次电平。即,所有观测点处于高电平;第 2 轮,每两个观测点调整一次电平。即,第 1、3、5 ...个观察点不调整,第 2、4、6 ... 个观察点调整;第 3 轮,每三个观测点调整一次电平。即,第 1、2、4、5 ... 个观察点不调整,第 3、6 ... 个观察点调整;...
2021-08-21 13:01:12
219
2
原创 论文阅读:Reinforcement Learning for HEVC/H.265Intra-Frame Rate Control
摘要 任务是给一帧中每个编码树单元(CTU)都选择一个QP参数,目标是在码率限制的条件下最小化帧级的失真。通过将码率控制问题和强化学习问题对比,将纹理复杂度(亮度样本方差,梯度幅度,色数),CTU和比特平衡作为状态,QP值作为agent需要采取的action,而编码树单元的负失真作为即时的reward。训练一个Q-learing作为一个agent,观察状态来评估每个可能动作的reward。当只在有限序列上训练时,此模型的性能已经与HM-16.15中的速率控制算法相差不多。引言强化学...
2021-08-10 11:42:00
332
原创 阅读笔记:Reinforced Bit Allocation under Task-Driven Semantic Distortion Metrics
摘要快速增长的智能应用需要优化图像/视频编码中的位分配,以支持特定的任务驱动场景,如检测、分类、分割等。一些基于学习的框架已经被提出来用于他的目的,或者用于其他内部优化机制。由于其固有的端到端优化机制,一些基于学习的框架已经被提出用于此目的。然而,将这些任务驱动的度量标准完美无缝集成到传统的混合编码框架中仍然是相当具有挑战性的。目前这篇文章是第一篇尝试使用基于强化学习方法来解决这一问题的论文。特别地,我们将比特分配问题表示为一个MDP,并且训练RL代理实现根据任务驱动的语义失真度量在HEVC帧内编码中自
2021-08-09 12:56:29
470
原创 阅读笔记A Dual-Critic Reinforcement Learning Framework for Frame-level Bit Allocation in HEVC/H.265
刚入门,记录一下读过文章的重点。摘要 本文介绍了一种双临界强化学习(RL)框架来解决HEVC/H.265中的帧级比特分配问题,目标是在速率约束下最小化GOP的失真。之前基于RL的方法通常是结合了失真和码率奖励的单个奖励函数来解决这样的约束优化问题。然而,如何组合这些奖励的方式通常是具有特异性的,不能很好地推广到各种编码条件和视频序列的情况下。为了克服这个问题,我们将深度确定性策略梯度(DDPG)强化学习算法用于两个批评者,一个学习预测失真奖励,另一个学习预测码率奖励。其中,当满足速率约束时...
2021-08-08 21:06:16
412
2
转载 Pytorch数据读取(Dataset, DataLoader, DataLoaderIter)
Pytorch的数据读取非常方便, 可以很容易地实现多线程数据预读. 我个人认为编程难度比TF小很多,而且灵活性也更高. (TF需要把文件名封装成list, 传入string_input_producer, 这样可以得到一个queue;然后把这个queue给一个WholeFileReader.read(); 再把read()回来的value用decode_jpeg()解码; 然后再用一系列处理去clip, flip等等...)Pytorch的数据读取主要包含三个类:Dataset DataLoa.
2021-04-08 20:21:56
844
1
原创 2021-3-20LeetCode双周赛
做了两题,这是第三题,在最开始想到的是通过深搜找到所有出现的组合情况,然后找到最大的连续段。结果题目是要求从零开始的最长的连续段。结束了看了第一大佬的答案才明白。(大佬12分钟结束战斗,我一个小时才做完两题)题目:给你一个长度为n的整数数组coins,它代表你拥有的n个硬币。第i个硬币的值为coins[i]。如果你从这些硬币中选出一部分硬币,它们的和为x,那么称,你可以构造出x。请返回从0开始(包括0),你最多能构造出多少个连续整数。你可能有多个...
2021-03-21 00:32:08
194
转载 解决vscode以及colab无法调用模块(无法使用其它文件内函数)的问题from 文件.文件... import *
问题经过45个小时终于解决!遇到的问题:colab无法调用模块,或者说colab代码无法调用其它文件内定义的函数的问题。报错一般两种:1、ModuleNotFoundError: No module named 'XXXX',2、AttributeError:'module' XXXX' has no attribute 'xx'(XXXX是指要调用的“文件名”,xx是指”函数名“)无论哪种,都不要再去纠结它什么意思,看下面我写的就能明白。问题所在:1、...
2020-11-24 19:17:42
3045
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人