- 博客(49)
- 资源 (7)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 ffmpeg的一些用法,不定期更新
ffmpeg的一些用法,不定期更新宽度占一半,贴图ffmpeg.exe -i .\7200.mp4 -i .\640.png -filter_complex "[1]scale=360:-2[a],[0][a]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" -y out7200.mp4FFmpeg drawtext添加文字和阴影样式d...
2020-03-25 10:55:34
2495
原创 .torch.save与torch.jit.save
1.torch.jit.savetorch.jit.save用来保存编译后的模型,支持跨平台,要注意模型中只能使用pytorch的函数。jit.save支持保存script类型和trace类型的模型,其中script为全量模型,trace为仅保存运行过的路径2.torch.savetorch.save有三种使用场景,参考:https://stackoverflow.com/questions/42703500/best-way-to-save-a-trained-model-in-pytorch1.保存模型
2022-06-21 11:06:39
4479
1
原创 模拟Kub-proxy ipvs规则实现负载均衡
一、背景有三台master机器组成的apiserver服务,外部有若干台worker机器,worker机器通过阿里云的负载均衡可以正常访问apiserver。但是master机器如果想访问worker机器,由于阿里云负载均衡在四层上存在无法访问自己的缺陷,因此master内部机器访问apiserver无法实现负载均衡二、设计使用lvscare工具,通过ipvs实现四层负载均衡三、实施1.添加虚拟网卡ip link add dev my-ipvs type dummyip addr add 1.
2022-05-20 16:38:54
505
原创 ffmpeg文件名含特殊字符引起的问题
一、背景一个png图片,文件名为 “%xx{xx.png”这种形式,在ffmpeg的avformat_find_stream_info执行后,没有报错,但是AVFormat对象中没有获取到文件的宽高信息二、分析1.用av_log_set_callback设置日志回调,打印出日志信息static void log_callback_report(void* ptr, int level, const char* fmt, va_list vl){ va_list vl2; char line[1
2021-10-09 14:08:28
1831
1
原创 AVFrame内部yuv数据原画质存储成图片
一、背景排查一个问题,需要确定在哪个过程画质变模糊了,因此需要抽取出数据存成图片查看清晰度二、方法BYTE* rgbdstp = new BYTE[frame->linesize[0] * frame->height * 4];memset(rgbdstp, 0x00, frame->linesize[0] * frame->height * 4);libyuv::I420ToARGB(frame->data[0], frame->linesize[0], fr
2021-09-14 20:30:31
707
原创 AVI文件花屏问题分析和解决
一、背景用一段采集到的桌面数据流进行编码,复用后生成AVI文件,结果AVI文件播放过程中会有花屏现象。环境:ffmpeg二次开发环境二、分析1.首先是想办法把花屏的问题复现出来,但是尝试了很多参数组合,经过多轮测试,依然没有复现出来,直到最后找到了一个好方法:采集带有复杂内容的Excel表格的桌面内容。因为Excel表格中但凡有一点花屏都能很容易看出来2.分析花屏的原因,这个问题在出现的时候非常没有头绪,无法直接在代码中分析到,于是到网上搜罗了很多关于花屏问题解决的文章,然后发现了下面这个文章h
2021-09-08 17:06:35
598
原创 恒定帧率30帧以上录制掉帧问题分析
一、背景二、分析经测试,ffmpeg动态帧率转恒定帧率不会有问题,因此,可能可以把ffmpeg的插帧逻辑移植过来。1、 ffmpeg补帧逻辑获取解码后的pkt -----> 拿到pkt_duration和编码时间差计算出nb_frames -------->循环nb_frames次对当前帧重复编码2、录制补帧逻辑3、录制采集逻辑start—>获取绝对时间—>gdi截图—>设置pts—>frame入队—>sleep()—>startgid截图过
2021-08-23 16:29:35
1615
原创 一个音画不同步的问题分析
一、背景某个视频播放过程中出现音频超前播放,而且越播放越不同步。视频文件的参数如下:项目采用ffms2+avisynth的框架二、分析过程(ffms2)音频比视频短1、 既然是音频播放超前,那么要么是画面播放太慢了,要么是音频播快了。首先分析了视频播放流程,确定了和视频丢帧没关系,即便丢帧再快,视频也都跟不上音频2、接下来就重点分析音频了,用ffprobe从视频文件中抓取到音频包,大概内容如下3、从2中可以看到,每个音频包的采样点个数,即nb_samples都是1024,pkt_durati
2021-08-23 14:11:03
2913
原创 一些常用算法整理
void mySwap(int* pa, int* pb) { * pa ^= *pb;// 异或 * pb ^= *pa; * pa ^= *pb;}void selectSort(int* p, int n) { int idx; for (int i = 0; i < n - 1; i++) { idx = i; for (int j = i + 1; j < n; j++) {
2021-07-06 18:16:08
87
原创 d3dx9 hlsl中if else 和 for语句使用细节
一、背景hlsl中有以下代码,const float2 guassBlurPriority[33] = { {float2(-16.0, 0.0138)}, {float2(-15.0, 0.0158)}, {float2(-14.0, 0.018)}, {float2(-13.0, 0.0203)}, {float2(-12.0, 0.0226)}, {float2(-11.0, 0.025)}, {float2(-10.0, 0.0274)}, {float2(-9.0, 0.029
2021-06-23 11:05:16
1046
原创 libaom解码时崩溃的问题分析
一、背景一个libaom编码格式视频令播放器在解码阶段崩溃,起初以为是该视频B帧过多导致CPU运算量太大,进而导致崩溃,后来发现该格式并不像h264一样存在I P B帧,于是进行了进一步分析。。。播放器依赖库:ffms2.lib avisynth.lib ffmpeg相关lib二、分析过程a. 因为崩溃源头在ffms2库中的解码过程中,所以第一反应是该开源库未同步到最新版导致b. 编写测试demo,分别测试当前的ffms2库和最新版的库,发现在解码该视频时均会在同一位置崩溃c. 在ff
2021-06-21 21:30:23
359
原创 为什么用const可以解决全局变量重定义
一、背景偶然发现当在头文件中定义全局变量时,如果未声明为const会出现变量重定义,这个很容易理解,因为头文件被多次引用了,那问什么声明为const就可以呢?我的项目结构如下header.hconst string A = "hello";--A.cpp---header.h--B.cpp---header.h二、分析摘录C++ primer中的一段话:当以编译时初始化的方式定义一个const对象时,就如对bufSize的定义一样:const int bufSize = 512
2021-06-11 10:53:45
1995
原创 正则表达式使用
gl_FragColor.xyz = xxxxx; 修改为 return vec4(xxxxx, 1);notepad++下替换操作如下查找内容:gl_FragColor.xyz\s*=\s*([^;]*);替换为:return vec4(\1,1);
2021-06-09 09:57:51
66
原创 windows下bmp文件读写操作
一、读引用自 https://www.cnblogs.com/nowornever-L/p/6421776.html#include <iostream>#include <windows.h>#include <stdio.h>using namespace std;int bmpwidth, bmpheight, linebyte;unsigned char* pBmpBuf; //存储图像数据bool readBmp(const char*
2021-05-10 09:55:29
594
原创 一次ffmpeg -c copy 在avformat_write_header函数处报错:Could not find tag for codec rawvideo in stream #0的原因分析
一、背景在一次处理视频转换的时候使用了copy模式,然后在avformat_write_header函数处报错:Couldnotfindtagforcodecrawvideoinstream#0二、分析1.首先avformat_write_header调用如下 ret = avformat_write_header(of->ctx, &of->opts); if (ret < 0) { av_log(NULL, AV_...
2021-04-23 14:00:39
5478
4
原创 c语言 uint8_t与uint32_t相互转换
一、uint8_t转uint32_tuint8_t var1 = 0x12;uint8_t var2 = 0x34;uint8_t var3 = 0x56;uint8_t var3 = 0x78; uint32_t bigvar = (var3 << 24) + (var3 << 16) + (var2 << 8) + var1;// bigvar=0x78563412二、uint32_t转uint8_tuint8_t p[4];uint
2021-04-14 10:08:27
11365
2
原创 Linux 下bmp文件的读写操作
1.写操作int bmp_write(unsigned char* image, int imageWidth, int imageHeight, const char* filename){ long extrabytes = 4 - ((imageWidth * 3) % 4); if (extrabytes == 4) extrabytes = 0; long paddedsize = ((imageWidth * 3) + extrabytes) * imageHeight; unsi
2021-03-10 14:46:19
1073
1
原创 qsv,nivdia解码花屏研究
一、问题在英特尔显卡和英伟达显卡环境下使用ffmpeg命令行的方式对h265 4k视频进行缩放转码操作,出现花屏现象。二、过程1.经过多轮对比测试,把问题锁定在ffmpeg使用硬件加速解码的过程2.对硬件解码进行分析,有几个猜想a.显存不够导致解码花屏b.分辨率太高导致解码花屏c.用来测试的英特尔显卡和英伟达显卡本身对H265解码支持不好3.对以上几个猜想做了测试a.在一台带有15G显存的ECS上做了测试,结果及结论如下H265格式 硬解+硬编:花屏,GPU占用率很低。说明花屏问
2021-01-23 11:35:48
1238
原创 基于ffmpeg进行二次开发中的一些概念整理
1. av_rescale_q(a,b,c)的作用是,把时间戳从一个时基调整到另外一个时基时候用的函数。其中,a 表式要换算的值;b 表式原来的时间基;c表式要转换的时间基。其计算公式为 a * b / c2. refcounted_frames设置为1的时候表示解码出来的frames引用永久有效,需要手动释放av_opt_set_int(avctx, "refcounted_frames", 1, 0);等同于avctx->refcounted_frames = 1;...
2021-01-15 09:54:59
599
原创 记一次因纹理缩放导致OpenGL对连续视频帧添加等比例分屏效果时,只能输出第一帧的分屏画面问题的解决过程
一、背景最近抖音的分屏效果很火,于是打算基于OpenGL的片元着色器来开发一个分屏的滤镜。开发环境:Windows10OpenGL版本:4.6二、问题开发了五种分屏,分别是二、三、四、六、九分屏,其中,二、三、六均没有问题,而四和六对图片处理没问题,但是对连续视频帧处理时,会出现后续的帧无法正常输出的问题,如下为了便于对比,把出问题的(上半部)和不出问题的(下半部)放在同一个视口上了。可以看到上下显示的内容不一样,但是我输入的纹理是一样的!三、解决过程思路如下:1.非缩放分屏,即裁剪形式的
2021-01-07 16:51:12
434
1
原创 go开发过程中踩的坑
背景:因Linux下无界面,程序开发和简单的调试在Windows上进行,程序运行在Linux上进行。一、环境搭建1.enable go modules integration激活这个选项以启用代码中依赖的第三方包go modules的解释如下默认模式(未设置该环境变量或 GO111MODULE=auto):Go 命令行工具在同时满足以下两个条件时使用 Go Modules:当前目录不在 GOPATH/src/ 下;在当前目录或上层目录中存在 go.mod 文件。GOPATH 模式(GO111
2020-12-07 11:50:35
2722
原创 记一次win7(OpenGL3.3)上顶点着色器的bug导致画面只出现四分之一的问题解决过程
一、背景将一个正常在win10(OpenGL4.6)上运行的程序放到win7(OpenGL3.3)上后,出现如下的只显示四分之一画面的异常现象二、解决过程1.将一个简单的OpenGL demo放到OpenGL3.3上运行,可以正常显示画面,于是把代码移植到软件的渲染过程中,可以显示画面,如下图,说明该问题至少是个可以解决的问题2.依次将顶点设置代码、着色器代码、纹理上传代码、渲染代码恢复到出问题的版本,定位到问题出在了顶点着色器代码中,我的顶点着色器代码如下#version 130in vec
2020-11-13 20:44:48
993
原创 Windows版钉钉自动更换缓存目录的问题
1. 背景无意中发现,如果C盘爆满的话,钉钉会自动把缓存目录移动到D盘,于是D盘会多出一个名为DingTalkAppData的目录,这样不仅我之前的数据没法同步了,电脑上增加了一个缓存目录不利于我清理内存,所以要想办法把缓存目录换回去2. 方法1.首先要C盘的垃圾清理一下,恢复健康的磁盘容量2.进入钉钉的APPdata目录,一般是在地址栏输入%appdata%,再根据dingtalk的名称就能找到了3.在钉钉的appdata目录下可以发现一个名为 redirectAppData ,把它删除再重装钉
2020-11-05 15:00:08
12694
3
原创 C++新标准库学习笔记
移动构造1.解决临时对象问题2.被拷贝对象立即释放,避免一个堆内存多个引用class A{…}A getTemp(){return A(); )int main(){A && a = getTemp();//会调用两次移动构造}3.自己实现移动构造时,默认拷贝被删除。自己实现拷贝构造,默认移动构造会被删除4.A func(){return A();}// 首先构造一个A,然后调用拷贝构造或者移动构造A a = func();// 再调用一次拷贝构造或者移动构造
2020-08-28 17:55:56
122
原创 enable_shared_from_this类的用法
在官方文档上找了个例子,然后深入剖析了一下struct Good : std::enable_shared_from_this<Good> // note: public inheritance{ std::shared_ptr<Good> getptr() { return shared_from_this(); }};struct Bad{ std::shared_ptr<Bad> getptr() {
2020-08-21 09:55:00
415
原创 DirectX3d 9 实现3d lut滤镜效果
一、背景已经在OpenGL中实现了3Dlut滤镜,下面需要在DirectX中做实现二、方法一在d3d上下文中创建d2d对象,再用d2d的内建效果实现lut滤镜。原理https://docs.microsoft.com/en-us/windows/win32/direct2d/3d-lookup-table-effect实现demohttps://download.csdn.net/download/dustpg/7830947备注:这种方法用d2d可实现lut滤镜,但是d3d9不支持创建共享
2020-07-28 14:53:28
741
原创 opengl纹理缩放的原理
一、背景用OpenGL处理3dlut映射的时候,lut滤镜数据输入到纹理后,不经过任何处理直接输出,图像两边会有错误的像素点出现,如下(更换了图片,以便验证结果的一般性)如上图,在边缘出现了模糊的颜色二、原因在我的测试demo中有以下代码设置纹理的属性// 当纹理坐标超出范围时,重复当前纹理glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE
2020-07-14 10:46:18
1899
原创 小白也能看懂的《数字图像处理》冈萨雷斯版中直方图均衡的公式
一、直方图均衡的目的通过一个变换函数T (r )将像素点映射到s,s中所有级数的像素点出现的概率相同二、公式推导公式1推导过程令fx(x)为pr®,fy(y)为ps(s),g(x)为T( r ),且其导数大于0,h(y)为g(x)的反函数,即h(y)=x由此,可以直接得到公式1公式2公式3推导1.连续函数介值定理2.积分中值定理3.变上线积分的求导把上面最后的结果写成变上线积分的形式,即b改成x,之前的x改成t,就得到变上限积分函数。然后定义一个点x0,用x->x0+
2020-07-01 15:13:17
450
原创 const变量修改与volatile
一、背景有时候在写一些测试代码的时候,偶尔会出现需要修改const变量的操作,在通过指针或者引用修改const变量后,居然可以编译成功。于是就引起了困惑——既然可以修改,那const声明的意义何在呢?二、测试看下面的代码const int i = 12;int& j = (int&)i;j = 15;std::cout << i << " " << j;// 12 15将会输出 12 15.为什么呢(不使用引用,改成指针,结果也
2020-07-01 10:40:14
480
原创 多种直方图均衡化的方法
一、理论1.直方图均衡直方图均衡的主要目的是让图片中各个灰度级数的像素数目相等,均匀分布,这样可以达到信息熵最大的目的,从而突出更多的图像细节。在医学领域应用广泛公式推导https://blog.csdn.net/spongebob1234/article/details/777787092.CLAHE1.直方图裁剪设定一个阈值threshold,当直方图中统计个数count大于threshold时,将count设置为threshold,然后将差值记录下来,累加,最后将差值除以256得到平均数
2020-06-30 20:11:55
1371
原创 图像处理中不注意内存对齐pitch的后果
1.首先了解pitch的概念pitch指的是每一行图像数据的字节数,比如一个宽100pix的图片用rgb格式存储,那pitch一般会等于100*3,但是,如果宽不为偶数,pitch可能不会等于width * <每个像素的字节数>,而是先把width取一个最近的偶数值,然后计算。类似ceil(width) * <每个像素的字节数>。—https://blog.csdn.net/hulingerlin/article/details/821205522.不注意pitch的后果假设
2020-05-28 10:59:45
1551
原创 OpenGL抠像之后用CPU与背景混合的操作
1.首先要明白OpenGL自身的混合操作//打开OpenGL混合,并设置为预乘模式混合glEnable(GL_BLEND);glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);while (!glfwWindowShouldClose(window)){ // input // ----- processInput(window); // render // ------ glClearColor(0.2f, 0
2020-05-19 22:11:51
428
原创 C++ 读取UTF8编码,调试过程显示乱码问题
1.原因std::string不支持utf8编码,因此在调试器中看到的是乱码,并且使用一些不支持utf8编码的api判断该字符串对应的文件路径时,也会判定失败。所以要想在调试过程中正常显示utf8编码的中文内容,就要把字符串转换成gbk编码2.解决string UTF8ToGB(const char* str){ string result; WCHAR* strSrc; LPSTR szRes; //获得临时变量的大小 int i = MultiByteToWideChar(CP_UT
2020-05-18 09:58:25
3514
1
原创 OpenGL绿幕抠图原理
1。计算当前像素点RGB值对应的HSV值2。设定HSV三个分量的权重,根据权重计算当前像素点的HSV值到给定背景色的HSV值的欧式距离3。将欧式距离用smoothstep做平滑,0.5以下的一定要滤掉4。将原图和背景图用平滑值混合...
2020-04-28 20:37:41
2756
2
原创 记录一个ftp公网文件传输问题解决过程
记录一个ftp公网文件传输问题解决过程之前的模式是服务器和客户端均在同一内网,所以用port模式可在比较安全的模式下传输,但是如果需要在公网下访问并传输文件,这种模式就行不通,因为客户端和服务器端均处于nat后面,客户端发送给服务器的port报文里面携带的是私网IP,服务器端是无法通过这个IP建立连接的(但是在本地开发机上发送的port里面携带的地址是公网IP,此时可以通,可能是我的机器并没有处...
2020-04-24 16:20:11
921
原创 信令服务器和打洞服务器里面一些杂乱的概念(持续更新)
1.首先是trickle-ice上面的测试结果的理解1 srflx 1 udp 116.25.147.192 14511 第一个nat映射的地址2 srflx 1 udp 116.25.147.192 14512 第二个nat映射的地址上述地址可用于stun1 relay 3 udp 47.112.189.57 529822 relay 3 udp 47.112.189.57 52654...
2020-04-17 10:50:40
776
原创 简单的搭建一个计算token的node服务器
简单的搭建一个计算token的node服务器var http = require('http');const querystring = require("querystring");var url = require('url');const crypto = require('crypto');var server = http.createServer(function (requ...
2020-04-10 18:25:43
208
原创 使用ffmpeg在视频结尾插入图片
今天通过搜罗一些关于ffmpeg片尾加广告的功能,找到了几个解决方案1。使用OpenGL的转场,即gltranslation滤镜,可以直接使用编写好的OpenGL转场,实现片尾加广告参考连接:https://blog.csdn.net/JAVA_XCNH/article/details/1038587942。使用opencl 的xfade滤镜注:1中需要GPU支持,2需要编译时指定enabl...
2020-03-09 21:47:46
3165
原创 嵌套从属模板类型
今天在看spdlog的源码的时候,发现了一个重要的知识点——嵌套从属模板类型,示例代码如下struct synchronous_factory{ template<typename T> static auto create(T arg){ return 1; }};template<typename Factory = synchronous_factory...
2020-03-06 11:24:56
555
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人