【WIP】压制技术 B:从不熟悉的编码开始

文章摘录和润色于本人的笔记,难免有错漏之处。若您发现了其中的一处或几处,请在评论处指正,我将不胜感激。

什么是压制?

压制的对象

可以是一切种类的音频、视频、图像,比如说:

  • 蓝光光盘(BD)中的视频或音频(m2ts格式比较多见)
  • DVD光盘中的视频或音频(dat等格式比较多见)
  • CD光碟中的视频或音频
  • 通过Web下载的各流媒体网站的视频或音频
  • 各种剪辑软件、合成软件、特效软件、DAW等渲染的视频或音频
  • 图片(或者动态图片)转换为视频,例如“一图流MV”等

注意:要区分压制(Rip)和混流(Mix)。

压制是编码间转换的过程,混流是编码不变的视频轨/音频轨在容器间转换的过程。

注意:要区分编码(Encode)和容器(Container)

举例说明如下:

  • H.264是一种视频编码,aac是一种音频编码。
  • mp4是一种视频容器,wav是·一种音频容器。
  • avi既是一种视频编码也是一种视频容器。
  • mp3既是一种音频编码也是一种音频容器。

压制的目标

对视频、音频等的压制,不全面地、概括地来说,有以下几点主要目标:

  • 使音频/视频的编码符合要求。例如符合视频网站点播视频的要求、直播网站直播串流的要求、流水线中剪辑代理的要求等。
  • 使音频/视频的数据总量(可以理解为音频/视频的体积)或音频/视频在单位时间内的数据量(可以理解为音频/视频的码率)符合要求。例如符合蓝光光盘的码率要求、窄带(依照2010年新的标准为4Mbps以下)情况下视频点播的要求等。
  • 尽可能地保留音频/视频中的有效信息。可以理解为视频画面中物体的轮廓、音频的频段细节等。
  • 去除或降低音频/视频中的干扰信息。可以理解为视频画面中的噪点、音频中的杂音等。
阅读更多
【补档】D^3CTF 2021 - Misc - easyQuantum WriteUp

【补档】D^3CTF 2021 - Misc - easyQuantum WriteUp

图源:@しぐれうい 《雨に恋う》 83975808

cap.pcapng用Wireshark打开,清晰可见TCP的三次握手和四次挥手:

image-20210225173442277

image-20210225173518052

于是需要仔细分析中间的数据传输过程。

注意到某些数据包内有“numpy”等字符串:

image-20210225173716886

于是想到可能是某种兼容Python的序列化方法。

又注意到有固定的头部数据:

image-20210225174044360

image-20210225174106286

而pickle序列化时也有固定的头部数据(协议版本4.0):

image-20210225174451338

于是尝试利用pickle进行反序列化。示例如下:

1
2
3
4
5
6
7
8
9
10
import pyshark
import pickle

cap = pyshark.FileCapture('cap.pcapng')
test_pack = cap[3]
data = test_pack.data.data.binary_value

deserialized = pickle.loads(data)

print(deserialized)
阅读更多
【补档】D^3CTF 2021 - Misc - Robust WriteUp

【补档】D^3CTF 2021 - Misc - Robust WriteUp

图源:@電瘋扇 《仓鼠松鼠》 91999586

“Robust”意为“鲁棒性”。

打开cap.pcapng,发现都是QUIC协议的数据包。结合提供的firefox.log(即使用firefox浏览器访问时生成的SSL Key Log)可以想到基于QUIC协议且强制使用TLS 1.3的HTTP3。

导入SSL Key Log:

image-20210301153942031

清晰可见HTTP3数据包。利用过滤器过滤出所有HTTP3数据包,然后从头查看:

1
http3

image-20210301154351049

可以明显看出,642号包之前的部分是在载入网页和JavaScript脚本。在第642号包处可以发现一个m3u8 playlist:

image-20210305163835730

阅读更多

【WIP】C 语言拾遗 Part.1

long 与 long long

long 一般占用4~8字节,long long 至少 占用8个字节。不同的平台和编译器,长度可能不同。

sizeof() 运算符

注意 sizeof() 属于运算符的一种,这个运算符用于测量括号内的变量(或类型)占用的字节数量。多数情况下,这一数量在编译时确定,因此 sizeof() 的运行结果是一个编译时常量。但也有例外,如C99标准引入的变长数组特性。该类数组的size需在程序运行时、数组开辟后确定。

由于是编译时常量,括号内如果是表达式,则表达式不会被执行。

1
2
3
int a = 1; // a = 1
int b = sizeof(a++); // b = 4
// a = 1, a++ 没有执行

浮点数精度问题

老生长谈的话题了。由于误差,以下的逻辑判断结果都是成立(1):

1
2
(0.1 + 0.1 + 0.1) != 0.3; // 1;
1 + (1e123 - 1e123) != (1 + 1e123) - 1e123; // 1;

没有 body 的 for 循环

可以写成如下形式:

1
2
3
for(i = 0; i < 10; i++) {
;
}

或者如下形式:

1
for(i = 0; i < 10; i++);
阅读更多
Rime(1):介绍与安装

Rime(1):介绍与安装

图源:@爱卿 《夏》 82079855

什么是 Rime?

RIME,官方中文名称为“中州韻”(即“中州韵”,中原之韵),是一款开源的轻量的跨平台输入法库,由佛振等人开发。源代码现托管在 Github 上:rime/librime。Rime 具有很强的扩展性和可定制性——你可以使用 Lua 编写它的插件,也可以通过自定义配置文件实现自己研发的、更加高效的汉字输入方案,或者实现多语言混合输入,又或者你只是想在各个平台上获得统一的文字输入体验。这一特性使得强大的 Rime 在使用上拥有无限的可能性。本文是 Rime 系列的第一篇,主要记录 Rime 在各个平台下的安装,及其基础的使用方法。

如何安装 Rime?

Librime 是一个开源的输入法库。库像是一种”后端“,不能直接用于文字输入。需要和配套的“前端”(一说“发行版”)一起使用。“前端”也已有不少实现,列举使用人数较多的输入法“前端”如下:

  • rime/squirrel,中文名为“鼠须管”,macOS 下的输入法前端;
  • rime/weasel,中文名为“小狼毫”,Windows 下的输入法前端;
  • osfans/trime,中文名为“同文输入法”,Android 下的输入法前端;
  • jimmy54/iRime,中文名为“iRime输入法”,iOS 下的输入法前端,注意有应用内购付费,而且有人反映其并未严格按照Rime前端统一的规范加载配置文件;
  • rime/ibus-rime,Linux 下的输入法前端,基于 IBus;
  • fcitx-rime,Linux 下的输入法前端,基于 Fcitx

或者你也可以利用librime,编写自己的输入法前端。

Windows - Weasel

Weasel可以直接在Rime的官网下载安装,也可以手动编译安装。截止本文写作之时,Rime官方发布的稳定版本为0.14.3,采用librime 1.5.3版本,更新于2019年6月22日。而librime的最新版本已迭代至了1.7.2,修复了不少错误并且向后兼容。因此强烈推荐手动编译新版本并安装。

编译所需环境:

  • Visual Studio 2017
  • Boost 1.69.0
  • CMake
  • NSIS
  • Git、7z、Wget for Windows等常见工具

下面简单叙述步骤。

阅读更多
【WIP】CMU 15-462 笔记 Part.1

【WIP】CMU 15-462 笔记 Part.1

图片来源:@Lifeline 88401620

增补(感谢@oyiadin):本系列笔记将添加《Games 101:现代计算机图形学入门》、《Games 102:几何建模与处理》、“龙书”(《Introduction to 3D Game Programming with DirectX 12》)三个额外来源的笔记。大段的非CMU课程的笔记会在显著位置标识。

Lecture 1

什么是计算机图形学

计算机图形学:利用计算机合成视觉信息或利用计算机合成/操控感官信息的学科。

计算机图形学的应用

  • 影视

  • 动画

  • 游戏

  • 数据可视化

  • 工业设计,平面设计

  • 数字绘画

  • 虚拟现实

    相同的内容后续整理VR课笔记时不再赘述。

    • 虚拟现实(VR):指所看到的一切均为虚拟的,比如虚拟现实游戏、虚拟现实视频等。

    • 增强现实(AR):指看到的是真实的现实 + 虚拟的、对当前现实进行分析处理或修改等生成的虚拟事物,比如Apple ARkit。

    • 混合现实(MR):VR + AR,使用类似VR的手段,达到AR这种结合当前现实与虚拟事物的效果,比如Hololens。

  • 制造业(3D打印)

  • 模拟

  • 排版与字体设计

    • “The Quick Brown Fox Jumps Over The Lazy Dog”:一句有意义的英文句子,内含全部的26个英文字母,常用来对字体(字形、字号、间距等)进行测试。

    • “Lorem ipsum dolor sit amet, consectetur adipisicing elit.”:又叫“乱数假文”或者“哑元文本”。主要的目的为测试文章或文字在不同字型、版型下看起来的效果。更多资料请查阅:https://cn.lipsum.com/

  • ……

计算机图形学与计算机视觉的区别

计算机图形学:将数据转化为图形。也就是“画出来”。

计算机视觉:将图形转化为数据。也就是“看到”。

计算机图形学需要哪些基础

  • 表示方法(编码)

  • 采样与混叠

  • 数学方法(表示动态和三位形体)

  • 光线

  • 透视

  • ……

对正方体建个模?

  • 如何表示

    • 顶点:利用坐标

    • 边:利用边的两个顶点唯一确定

  • 如何绘制

    • 三维图形转化为二维图形:小孔成像模型

      设相机坐标为 $(a,b,c)$ ,待确定点的坐标为 $(x,y,z)$ 。要得到该点在二维平面上的坐标,可进行如下算法步骤:

      1. $(x,y,z)$ 与 $(a,b,c)$ 相减,得到原三维点与摄像机的相对位置;

      2. 将其中的 $(x,y)$ 与 $z$ 相除,得到 $(\frac{x}{z},\frac{y}{z})$,即是所求的 $(u,v)$。

    • 连线。这就要细说到电脑如何绘制直线。

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×