跳转至

2023

Keepass

简介

KeePass是一个轻量级、易用且安全性极高的密码管理器,其源码完全开源(OSI certified),获得了世界多国的安全认证和评级。

只需要一个主密码+一个数据库文件即可安全的保存所有的密码。

特点

  1. 密码数据库自己掌握,与1Password和LastPass相比不存在平台泄露的可能。
  2. 所以在云存储、多终端同步上不如商业产品1Password和LastPass便捷,需要自己配置。
  3. 跨平台(有大量开源的第三方的客户端)。
  4. 支持WebDAV,配合网盘可实现跨平台、多终端同步。
  5. Windows下可配置浏览器自动输入(Mac据说也可以)。

密码安全

普通用户面临的问题: * 重要的密码会泄露在非重要的地方:每个人心中都有一个常用的密码,这个密码在注册各类账户时都会拿出来用,甚至银行卡的6位数密码也包含其中 * 小网站的“脱裤”会导致你的常用密码被泄露 * 不同的网站对密码的复杂度要求不同,我们也会临时“演变”导致“找回密码”成了登录前的基本操作

美观兼容版

  • KeePassXC:KeePassX的分支,功能齐全,
  • 跨平台(Windows、macOS和Linux),
  • 界面更加美观、扁平化,
  • 但不支持WebDAV。
  • 支持KDBX 3.1和4.0。
  • KeeWeb:后起之秀,与KeePass兼容,功能齐全,
  • 跨平台(Windows、macOS和Linux),
  • 另有自动备份等功能,
  • 界面美观;
  • 支持在线安装插件;支持离线Web应用;
  • 笔者认为是Mac OS的首选;使用坚果云webdav时报错:“No Last-Modified header”。

Windows KeeWeb使用

  1. 中文插件 https://plugins.keeweb.info/translations/zh-CN
  2. 设置里方便激活浏览器拓展

多平台

  • Windows:KeePass、KeeWeb
  • Android:KeePass2Android
  • 读取群晖Drive下的文件即可
  • 支持自动填充功能,和生物识别
  • Mac OS:KeeWeb
  • IOS、 ipad OS:
  • https://github.com/keeweb/keeweb/wiki/iOS
  • Strongbox 就还行
  • iPhone:keepass touch

同步实现

坚果云

坚果云更像Dropbox, * 支持WebDAV、 * 增量同步和历史版本等功能。

坚果云免费版虽不如Dropbox,但也还算厚道: * 上传流量1G/月,下载流量3G/月, * 支持1个月的历史版本,用来使用KeePass、云笔记等足矣。

操作

  1. 添加“应用密钥”
  2. 在《账户信息》-《安全选项》
  3. keeweb 添加 即可
  4. 注意坚果云用户是 邮箱, 不是昵称

参考教程

但是keeweb无法同步,会报错

其他第三方密码管理器

LastPass、1Password、 秘迹 app

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

原本我是懒得用的,edge自带的密码管理器不好吗?

  1. 一方面,自动填写带来的安全性问题
  2. 目前大多数第三方密码管理器,如LastPass和1Password都不容易受到这种攻击的影响,因为它们避免了自动填入不可见的登录表单,并且需要进行用户交互。
  3. 可以直接导出所有信息的黑客程序HackBrowserdata
  4. 还有windows管理员密码获取程序。(如果要玩,记得先把火绒等杀毒软件关了
  5. 另一方面,假如你电脑被攻击了,浏览器根本无法保护你的密码

目标

  1. 多端同步的(Windows,macbook,ipad,Android)
  2. 浏览器有保存插件的(Safari,edge,chrome)

参考文献

https://www.rmnof.com/article/keepass-password-manager/

Home Network

ping、arp、tracert、route命令

tracert

https://zhuanlan.zhihu.com/p/504688650

ipv6

查看是否有ipv6

ipw.cn 查看是否有ipv6(手机热点是ipv6优先的)

如图,由于不支持,所以ping不了ipv6

D:\PowerShell\github\hugoMinos [main ≡ +1 ~4 -0 !]> ping 2001:da8:d800:112::23

Pinging 2001:da8:d800:112::23 with 32 bytes of data:
PING: transmit failed. General failure.
PING: transmit failed. General failure.
PING: transmit failed. General failure.

2001:da8:d800:112::23 的 Ping 统计信息:
    数据包: 已发送 = 3,已接收 = 0,丢失 = 3 (100% 丢失),

光猫,路由器修改ipv6

光猫背后账号,密码,和移动的网址http://192.168.1.1/

参考:https://www.luyouwang.net/8778.html

这网络界面根本改不了,G

这是普通用户账号密码,查询移动给的吉比特智能网关GM220-S的超级管理员

账号:CMCCAdmin
密码:aDm8H%MdA
感觉应该开启了ipv6的样子,难道是子路由没开?

原因是子路由普联TL-WR886N不支持ipv6

LAN1的T568B水晶头还只有4根: 网线8根线1236重要。

网线8根线一般只使用1、2、3、6编号的芯线传递数据,即1、2用于发送,3、6用于接收。

4578属于备用线路,1236有故障时自动切换4578,如果4578没有接好,导致的结果就是1236中的某一根出现问题时,因没有备用线路而断网。

NAT6

解决办法: 1. 首先换成小米的WIFI6的路由器 2. 打开ipv6的功能,由于家里暂时没有外网访问家庭设备的需求 1. 没有设置桥接 2. 采用了简单的NAT6来实现家庭ipv6上网 3. 虽然恩山的论坛说很慢,因ipv6地址更长,所以效率更低,速度更慢。,但是NAT6百兆还是能跑满的

获取pppoe 账号密码

备份config.bin后,用routerpassview工具打开,查找用户名,结果发现密码就是123456。我真是无语了(小潮🦅

意外之喜,我家竟然是“千兆网”

原本以为我家是爸爸法院送的移动网不会怎么样,结果直接插GM220-S的千兆口,竟然是非对等带宽的千兆网

但是弱电箱就埋了两根线,一根是到客厅的iptv的线,另一根是到主卧室的(但是水晶头里的线被剪断一半的,导致实际测速只有百兆的线。

临时处理:暂时用iptv的线当拉出来的网线。能达到300Mbps的WIFI-6

需要进一步的研究学习

暂无

遇到的问题

  1. 学校的服务器全部ping不通

没有登录网络的肯定ping不通

登录了ping不通的原因是,脚本默认是8号端口,改成0号教育网端口就行了。

D:\PowerShell> ping -r 9 -w 10000 222.195.72.114

Pinging 222.195.72.114 with 32 bytes of data:
Reply from 222.195.72.114: bytes=32 time=60ms TTL=60
    Route: 172.17.0.3 -> (局域网)
           202.38.73.217 -> (node5)
           202.38.96.189 -> (北京教育网)
           210.45.112.254 -> (合肥教育网)
           222.195.72.114 -> (snode2)
           222.195.72.114 -> 
           202.38.96.188 ->(北京教育网)
           202.38.73.254 ->(合肥教育网)
           172.17.0.1

  1. ipv6不知道是不是因为变化了,也连接不上

家里路由器不支持ipv6,所以连接不上

开题缘由、总结、反思、吐槽~~

参考文献

https://jingyan.baidu.com/article/ac6a9a5e47b4222b653eac95.html

IPV4 && IPV6

IPV4

展示了A、B、C类IP地址的二进制表示和它们的特征:

类别 地址范围 网络数 主机数 说明
A 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 1-126 2^24-2 第一位为0
B 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 128-191 2^16-2 前两位为10
C 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 192-223 2^8-2 前三位为110
D 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 224-239 不适用 用于多播
E 11110xxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 240-255 不适用 保留用于实验和未来使用

在这个表格中:

  • A类地址的范围是从 0.0.0.0127.255.255.255,第一位必须是0。
  • B类地址的范围是从 128.0.0.0191.255.255.255,前两位必须是10。
  • C类地址的范围是从 192.0.0.0223.255.255.255,前三位必须是110。

D类和E类地址用于特殊用途,不用于普通的网络和主机地址分配。

拥抱ipv6

ipv6 原本是为了解决ipv4不足而提出的:

  • IPv4的地址范围是0.0.0.0~255.255.255.255,其地址总量约43亿个(2的32次方),这其中还要刨去私有网段、网络ID、广播ID、保留网段、本地环回、组播地址等特殊地址段,最终的实际可用地址约为25.68亿个,全球互联网设备数是远超这个的。所以一方面设计了私有地址来上网
  • 另一方面就是ipv6。IPv6的地址长度为128位,虽然地址长度仅仅是IPv4的4倍(IPv4是32位的),但IPv6的地址总量却达到了惊人的\(2^{128}\)。换一种更通俗的说法:地球上每一平方米,都可以分到10^26次方个IPv6地址,夸张一点来说,可以给每一粒尘埃都分配到一个地址。

OpenVPN in Docker

在接触wireguard之前,网络返校的方案是自己在有公网IP的机器上搭建OpenVPN。而使用docker比裸机配置OpenVPN方便多了。

OpenVPN Image

ARM

我們使用 kylemanna/docker-openvpn 來實作,因為 dockerhub 上只有 x86 image,如果是 arm 平台則需要自己 build(x86 可跳過)

clone repo 後,直接 build

$ git clone https://github.com/kylemanna/docker-openvpn
$ cd docker-openvpn
$ docker build -t kylemanna/openvpn -f Dockerfile.aarch64 .
如果發生找不到 aarch64/alpine:3.5 的錯誤,修改 Dockerfile 中的 base image 為
FROM alpine:3.15.4
或更新的 alpine 版本即可

相关的中文教程

http://blog.gdb.wiki/2020/03/19/Docker-OpenVPN%E9%95%9C%E5%83%8F%E9%85%8D%E7%BD%AE/#kylemanna-openvpn%E8%BF%99%E4%B8%AA%E9%95%9C%E5%83%8F%E5%B0%86%E5%A4%A7%E9%83%A8%E5%88%86%E7%9A%84%E4%B8%80%E9%94%AE%E5%8C%96%E8%87%AA%E5%8A%A8%E8%84%9A%E6%9C%AC%E8%BF%9B%E8%A1%8C%E6%95%B4%E5%90%88%EF%BC%8C%E9%80%9A%E8%BF%87docker-run%E4%B8%80%E6%AD%A5%E4%B8%80%E6%AD%A5%E8%BF%9B%E8%A1%8C%E9%85%8D%E7%BD%AE

https://koding.work/10-minutes-build-open-vpn-server/

https://taichunmin.idv.tw/blog/2018-05-23-docker-openvpn.html

Quick Start

以README为主

# shaojiemike @ node5 in ~ [23:53:42] C:125
$ export OVPN_DATA="ovpn-data-tsj"

# shaojiemike @ node5 in ~ [23:54:10]
$ docker volume create --name $OVPN_DATA
ovpn-data-example

# shaojiemike @ node5 in ~ [23:54:11]
$ docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://node5.xydustc.me
Unable to find image 'kylemanna/openvpn:latest' locally
latest: Pulling from kylemanna/openvpn
188c0c94c7c5: Pull complete
e470f824352c: Pull complete
d6ed0c7c142e: Pull complete
74586f3c5cd4: Pull complete
cb26244a2b2a: Pull complete
Digest: sha256:643531abb010a088f1e23a1c99d44f0bd417a3dbb483f809caf4396b5c9829a0
Status: Downloaded newer image for kylemanna/openvpn:latest
Processing PUSH Config: 'block-outside-dns'
Processing Route Config: '192.168.254.0/24'
Processing PUSH Config: 'dhcp-option DNS 8.8.8.8'
Processing PUSH Config: 'dhcp-option DNS 8.8.4.4'
Processing PUSH Config: 'comp-lzo no'
Successfully generated config
Cleaning up before Exit ...
CA(certificate authority.)的私钥密码
# shaojiemike @ node5 in ~ [23:55:47]
$ docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/pki


Using SSL: openssl OpenSSL 1.1.1g  21 Apr 2020

Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
Generating RSA private key, 2048 bit long modulus (2 primes)
.........+++++
...................+++++
e is 65537 (0x010001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:tsj-node5

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/pki/ca.crt

Using SSL: openssl OpenSSL 1.1.1g  21 Apr 2020
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
......................+.......................+..........................................................+........................................................................................................+........................................+...................................................................................................................................+.....................................................................................................................+......................................................................................................................................................................................................................................+......++*++*++*++*

DH parameters of size 2048 created at /etc/openvpn/pki/dh.pem


Using SSL: openssl OpenSSL 1.1.1g  21 Apr 2020
Generating a RSA private key
.......................................+++++
.........................................+++++
writing new private key to '/etc/openvpn/pki/easy-rsa-73.EeNnaB/tmp.jhHaaF'
-----
Using configuration from /etc/openvpn/pki/easy-rsa-73.EeNnaB/tmp.LGnDjB
Enter pass phrase for /etc/openvpn/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'node5.xydustc.me'
Certificate is to be certified until Jan  1 15:58:37 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Using SSL: openssl OpenSSL 1.1.1g  21 Apr 2020
Using configuration from /etc/openvpn/pki/easy-rsa-148.CDCEmf/tmp.iJCIGL
Enter pass phrase for /etc/openvpn/pki/private/ca.key:

An updated CRL has been created.

1194貌似有人用了

# shaojiemike @ node5 in ~ [0:02:06]
$ sudo lsof -i UDP:1194
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
openvpn 1834 nobody    6u  IPv4  56802      0t0  UDP node5:openvpn

 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf

  sudo vim /etc/openvpn/server/server.conf

  改成7194等端口

# shaojiemike @ node5 in ~ [0:02:10]
$ sudo service openvpn status
 openvpn.service - OpenVPN service
     Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
     Active: active (exited) since Tue 2022-04-19 18:42:24 CST; 5 months 11 days ago
   Main PID: 1715 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 154181)
     Memory: 0B
     CGroup: /system.slice/openvpn.service

Apr 19 18:42:24 node5 systemd[1]: Starting OpenVPN service...
Apr 19 18:42:24 node5 systemd[1]: Finished OpenVPN service.

# shaojiemike @ node5 in ~ [0:15:49] C:125
$ sudo service openvpn stop

# shaojiemike @ node5 in ~ [0:16:30]
$ sudo kill -9 1834

在1195启动服务失败,还是1194

# shaojiemike @ node5 in ~ [0:16:46]
$ docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
cb0f7e78f389f112c3c3b230d20d2b50818f6cf59eea2edfaa076c7e8fad7128

# shaojiemike @ node5 in ~ [0:06:01]
$ docker container list
CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS                  PORTS                                                 NAMES
6c716b27b3f1   kylemanna/openvpn       "ovpn_run"               49 seconds ago   Up 48 seconds           1194/udp, 0.0.0.0:1195->1195/udp, :::1195->1195/udp   charming_zhukovsky

# 上面是错误的

# shaojiemike @ node5 in ~ [0:16:50]
$ docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED              STATUS                  PORTS                                                 NAMES
cb0f7e78f389   kylemanna/openvpn       "ovpn_run"               About a minute ago   Up About a minute       0.0.0.0:1194->1194/udp, :::1194->1194/udp             pedantic_euler
产生客户端证书,和ovpn文件
# shaojiemike @ node5 in ~ [0:07:27] C:2
$ docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full tsj-node5-client nopass
Using SSL: openssl OpenSSL 1.1.1g  21 Apr 2020
Generating a RSA private key
...............+++++
...............................+++++
writing new private key to '/etc/openvpn/pki/easy-rsa-1.olaINa/tmp.MfohAO'
-----
Using configuration from /etc/openvpn/pki/easy-rsa-1.olaINa/tmp.EMkEHF
Enter pass phrase for /etc/openvpn/pki/private/ca.key:
139775495048520:error:28078065:UI routines:UI_set_result_ex:result too small:crypto/ui/ui_lib.c:905:You must type in 4 to 1023 characters
Enter pass phrase for /etc/openvpn/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'tsj-node5-client'
Certificate is to be certified until Jan  1 16:08:23 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated


# shaojiemike @ node5 in ~ [0:08:24]
$ docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient tsj-node5-client > tsj-node5-client.ovpn

# shaojiemike @ node5 in ~ [0:09:20]
$ ls tsj-node5-client.ovpn
tsj-node5-client.ovpn

还是不行,奇怪

解决办法

ping不通的原因是,脚本默认是8号端口,改成0号教育网端口就行了。

D:\PowerShell> ping -r 9 -w 10000 222.195.72.114

Pinging 222.195.72.114 with 32 bytes of data:
Reply from 222.195.72.114: bytes=32 time=60ms TTL=60
    Route: 172.17.0.3 -> (局域网)
           202.38.73.217 -> (node5)
           202.38.96.189 -> (北京教育网)
           210.45.112.254 -> (合肥教育网)
           222.195.72.114 -> (snode2)
           222.195.72.114 -> 
           202.38.96.188 ->(北京教育网)
           202.38.73.254 ->(合肥教育网)
           172.17.0.1

OpenVPN 3 linux client

apt install

First ensure that your apt supports the https transport:

   # apt install apt-transport-https
Install the OpenVPN repository key used by the OpenVPN 3 Linux packages
   # curl -x http://$proxy_addr:$proxy_http_port -fsSL https://swupdate.openvpn.net/repos/openvpn-repo-pkg-key.pub | gpg --dearmor > /etc/apt/trusted.gpg.d/openvpn-repo-pkg-keyring.gpg
Then you need to install the proper repository. Replace $DISTRO with the release name depending on your Debian/Ubuntu distribution.
   # curl -x http://$proxy_addr:$proxy_http_port -fsSL https://swupdate.openvpn.net/community/openvpn3/repos/openvpn3-$DISTRO.list >/etc/apt/sources.list.d/openvpn3.list
   # apt update
Supported distributions:

Distribution| Release| Release name ($DISTRO)| Architecture| DCO support |---| ---| ---| ---| ---| Ubuntu| 20.04| focal |amd64, arm64 |yes Ubuntu| 21.10| impish| amd64, arm64| yes Ubuntu| 22.04| jammy| amd64, arm64|yes

And finally the openvpn3 package can be installed

   # apt install openvpn3
apt需要代理看 apt-get install proxy

openvpn3使用

要提前保留ipv6, 没有设置“流量走当前机器”ssh会断联

Once you’ve moved the file to your Linux system, you can import it.

openvpn3 config-import --config ${client.ovpn}
Configuration imported.  Configuration path: /net/openvpn/v3/configuration/1f475d5cx8d2fx4ef5x8feex25f2871f2642
You can start a new VPN session:
openvpn3 session-start --config ${client.ovpn}
Configuration imported.  Configuration path: /net/openvpn/v3/configuration/1f475d5cx8d2fx4ef5x8feex25f2871f2642
You can manage a running VPN session:
openvpn3 sessions-list
-----------------------------------------------------------------------------
        Path: /net/openvpn/v3/sessions/f83c75e4sd56cs4b27s85bcsc5c6e3ce074e
     Created: Thu Oct  6 20:37:29 2022                  PID: 1034954
       Owner: shaojiemike                            Device: tun1
 Config name: node5-client.ovpn
Session name: snode6.swangeese.fun
      Status: Connection, Client connected
-----------------------------------------------------------------------------

$ openvpn3 session-manage
session-manage: ** ERROR ** One of --pause, --resume, --restart, --disconnect, --cleanup or --log-level must be present

$ openvpn3 session-manage --pause -c node5-client.ovpn
Initiated session pause: /net/openvpn/v3/sessions/f83c75e4sd56cs4b27s85bcsc5c6e3ce074e

需要进一步的研究学习

netplan 的 rule from to table

ip route

ip rule指令学习

iptables

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

基于kylemanna/docker-openvpn

https://openvpn.net/vpn-server-resources/connecting-to-access-server-with-linux/

Image

GIF

全称Graphics Interchange Format,原义是“图像互换格式”。

  • 优点:
  • 文件小
  • 支持动画
  • 支持LZW (Lempel-Ziv-Welch)无损压缩算法
    • 又叫“串表压缩算法”就是通过建立一个字符串表,用较短的代码来表示较长的字符串来实现压缩。
  • 缺点
  • 只支持8bit颜色

ICO

图标文件

一般像素为 16*16

BMP (类似的位点图 TGA TIF)

  • bitmap
  • TIF(Tag Image File Format)
  • 优点
  • 图像信息丰富
  • 缺点
  • 几乎不进行压缩,占用空间大

JPG (JPEG)

JPG即JPEG(Joint Photographic Experts Group)。

  • 此格式不适合用来绘制线条、文字或图标,因为JPEG支持极高的压缩率通常会导致图片质量严重受损,不太适用于高清晰的图像应用场景。
  • 对比之下PNG、GIF更适合做绘制线条、文字或图标的首选,不过GIF只支持8bit的颜色,不适合颜色丰富的图片。

JPEG图片压缩原理

JPEG的压缩方式主要有四种,其中一种是基于空间DPCM的无损压缩,另外三种是基于DCT的有损压缩。

  1. 基于DCT的顺序编码:
  2. 基于DCT变换原理,按照从上之下,从左至右的顺序对图像数据进行编码压缩。当接收端收到数据后,再按照这个顺序进行解码,在此过程中存在图像丢失,因此是有损压缩;
  3. 基于DCT的累进编码:
  4. 也是基于DCT变换原理,不过是对图像进行多次扫描,从而对图像进行进一步的数据压缩。所以图像还原时,看到的图像时粗略图,而后逐步细化,直到结束;
  5. 基于DCT的分层编码:
  6. 以图像分辨率为基准进行编码,从低分辨率开始,逐渐提高分辨率,直到于原图像的分辨率一致。图像的解码也是这样的步骤;
  7. 基于空间DPCM的无损压缩:
  8. 采用预测法和哈夫曼编码(或算术编码)以保证重建图像与原图像完全相同(设均方误差为零);

JFIF

JPEG文件交换格式(英语:JPEG File Interchange Format,简称JFIF)是一个图像文件格式标准。它是一种交换符合JPEG交换格式(JIF)标准的JPEG编码文件的格式。它解决了JIF在简单JPEG编码文件交换方面的一些限制。与所有符合JIF的文件一样,JFIF文件中的图像数据使用JPEG标准的技术压缩,因此JFIF有时被称为“JPEG/JFIF”。

Webp

2010年,谷歌为了让网络上的图片更小,让网站加载速度更快,提出了同画质下,比JPEG格式图像小40%的Webp格式。 * 主要是面向网页图片,截至2021年5月,已有94%的浏览器支持此格式 * Webp也支持无损压缩的选项。

PNG

是Portable Network Graphic的缩写,是一种光栅图像格式,是为了克服GIF格式的局限性并取代GIF格式而产生的。 PNG是一种无损的数据压缩和开放格式文件,没有版权限制。 * 采用了基于LZ77的无损的派生算法,能够在在保证图片清晰、逼真的前提下,达到更高的压缩比。 * PNG支持对原图像定义256个透明层次,使得图像的边缘能与任何背景平滑融合,这种功能是GIF和JPEG没有的。 * PNG图片可以分为三个类型,分别为 PNG 8/ PNG 24 / PNG 32: * PNG 8:8即指8bit,2^8 = 256种颜色; * PNG 24:24指的是24位,分为3个,即RGB,各占8bit,可以包含2^24种颜色; * PNG 32:32表示有32bit,除了RGB占了24bit,还有8 bit可以表示透明度,0-255表示透明程度;

压缩效果对比

同分辨率的图片(1491*1265), 使用格式工厂默认设置

ico(1616)|gif(170144)|webp |jpg | jfif | png|TIF|bmp(tga) |---|---|---|---|---|---|---|---| 1k|13k|159k|218K|248K|1.6M|1.62M|5.4M

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

https://zhuanlan.zhihu.com/p/156639005

Video

视频信息软件Mediainfo

同样是1080P 25帧,码率不同,大小差异很大。

或者(有时候会失效,eg 720P)

相关概念

CRF

CRF(英文:constant ratefactor 意思:压缩质量)是动态码率,要看你拍摄的视频画面抖动切换的程度,如果比较安静就20,动的厉害就25。

crf18就接近无损,字幕组惯用20-22,crf23是默认值。 CRF的值越小,视频将会越清晰 当然视频质量就会更大。

2-pass

2-pass通过两次编码,第一次编码是先对整个文件进行扫描,记录一些统计信息,第二次编码时根据前面记录的统计信息再进行编码。这么做虽然转换时间会漫长,但压出的片子会有更好的画质,画面细节更好,而且体积会更小。

常用于非实时转码的情景。

视频压缩实践

疫情线上参会邮件投递Presentation视频,邮件大小限制100MB。PPT生成的过大

格式工厂(Format Factory)压缩

直接自定义导入导出,默认设置就行(确定分辨率不变的情况下,大小无法限制)。视频部分就只有原来五分之一(中间),而且完全看不出损失。

如果要最小大小,选择“转mp4”,然后“输出设置”选择“低质量和大小”,最后在分辨率选回原来的分辨率。

如果不熟悉H.265的参数设置,压缩后不一定比H.264小。

PS: H.264中熵编码有两种方法: 1. 一种是对所有的待编码的符号采用统一的VLC(UVLC :Universal VLC), 2. 另一种是采用内容自适应的二进制算术编码(CABAC:Context-Adaptive Binary Arithmetic Coding)。CABAC是可选项

CABAC动态的根据内容的码率能在效能与压缩效率上取得相当大的改善空间,但是顺序处理造成资料依存性(Data Dependency)偏高。

FFmpeg命令行

已知大小需求来计算需要压缩的码率。直接设置压缩后的平均码率就行,常见软件有:小丸工具箱,HandBrake, 剪映

首先需要知道如何计算码率

ffmpeg是一个自由软件,可以运行音频、视频多种格式的录影、转换、流功能,包含 * libavcodec--这是一个用于多个项目中的音频、视频的解码器库, * libavformat--一个音频和视频格式转换库。

# 视频流码率 500k, 音频流码率 50k
ffmpeg -i huawei_report_English_video.mp4 -c:v libx264 -b:v 500k -b:a 50k out_500k.mp4    
# 或者设置最大最小
ffmpeg -i huawei_report_English_video.mp4 -minrate 100K -maxrate 500K -bufsize 2000K out.mp4
结果如下
$ ls
-rw-r--r--  1 shaojiemike staff 119M Jan  2 16:59 huawei_report_English_video.mp4
-rw-r--r--  1 shaojiemike staff  50M Jan  2 17:23 out_500k.mp4
-rw-r--r--  1 shaojiemike staff  24M Jan  2 17:14 out.mp4

$ ffmpeg -i out_500k.mp4 -hide_banner
  Duration: 00:12:25.68, start: 0.000000, bitrate: 553 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 493 kb/s, 30.30 fps, 30.30 tbr, 30303 tbn, 60.61 tbc (default)
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 50 kb/s (default)

# shaojiemike @ snode6 in ~/test/ffmpeg [17:14:42] C:1
$ ffmpeg -i out.mp4 -hide_banner
  Duration: 00:12:25.68, start: 0.000000, bitrate: 269 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 125 kb/s, 30.30 fps, 30.30 tbr, 30303 tbn, 60.61 tbc (default)
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 134 kb/s (default)

# shaojiemike @ snode6 in ~/test/ffmpeg [17:15:29] C:1
$ ffmpeg -i huawei_report_English_video.mp4 -hide_banner
  Duration: 00:12:25.66, start: 0.000000, bitrate: 1330 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1151 kb/s, 30.30 fps, 30.30 tbr, 30303 tbn, 60 tbc (default)

视频码率(视频比特率)

同样分辨率下,视频文件的码率越大,压缩比就越小,画面质量就越高。码率越高,精度就越高,处理出来的文件就越接近原始文件,图像质量越好,画质越清晰,要求播放设备的解码能力也越高。体积越大,说明压缩比小,越接近原文件。

帧率与码率的关系:帧率多,则每秒图片数目多;码率越高,每张图片质量越清晰。

码率的甜品点

VMAF - Video Multi-Method Assessment Fusion 视频多方法评估

3Mbps是1080p的甜品点。

其他标准

视频压缩编码

视频压缩原理看差评君的就懂了,讲的真好。

柴知道也行

为什么有这么多标准:

H26x的视频的编解码“贵”: * 视频编码由视频作者解决 * 使用H26x标准解码价格不菲

视频编码

我们知道,其实视频就是一帧一帧的图片。计算一下,一部25帧每秒,90分钟,分辨率为1024*768,24位真彩色的视频,没有经过压缩,大小为

1Byte(字节) = 8bit(位)
一帧大小 = 1024 * 768 * 24 = 18874368(bit) = 2359296(Byte)
总帧数 = 90 * 60 * 25 = 135000
总大小 = 一帧大小 * 总帧数 = 2359296 * 135000 = 318504960000(Byte)= 303750(MB)≈ 296(GB)
  从上面的计算可以看出,我们储存一部90分钟没压缩的电影需要296GB的,2部电影便可占满我们电脑整个硬盘。所以我们需要对视频进行压缩,这种视频压缩技术就是我们所说的编码。   视频编码方式:H.26X(H.261、H.262、…、H.264(目前最常用)、H.265)   音频编码方式:MP3、AAC等   通过视频压缩算法,减少了视频文件的大小。压缩比越大,解压缩还原后播放的视频越失真,这是因为压缩的同时不可避免的丢失了视频中原来图像的数据信息。

一般ITU(国际电信联盟)和ISO(国际标准化组织)来制定 1. ISO主导的MPEG系列: MPEG-1 用于 VCD, MPEG-2用于DVD 2. h.26x由ITU主导,比如 H.261到H.263 3. 两者联合制定了 H.264-H.265 1. 各自别称 MPEG-4/AVC(Advanced Video Coding)和 MPEG-4/HEVC(High Efficiency Video Coding)

B站新支持的AOM联盟的AV1标准,免费而且没有潜在的版权问题。

画质不变时,编码标准越先进,码率越低.

相对于优酷等最高大约4000的码率,虽然B站码率低,但是以普通的动画素材为主的视频而言,因为动画以简单的单色大色块居多,一般来说1500左右的码率就足够了。

目前 AVC 依然是使用最广泛的编码标准,无论新老设备都可以播放 AVC 视频,因此保留 AVC 编码可以保证广泛的兼容性。

但是 AVC 在编码超高清视频时,输出码率较高,无法保证良好的观看体验;同时很多 AVC 解码器也不支持 HDR 和 8K 视频的解码。而 HEVC 和 AV1 对于超高清视频的压缩能力明显提升,对于 HDR 和 8K 视频的支持显著改善,因此 B 站使用更先进的编码标准为用户提供服务。

H.261的关键两原理

DCT变换

低频率部分是最重要的信息。

视频帧分类(初版)

先将视频分块, 1. 重用不变的色块 2. 对于平移的色块只记录移动矢量

帧间预测 & 帧内预测 关键帧I帧 与 预测帧P帧

MPEG-1

在 H.261 的基础上加入 1. 双向预测帧B帧 1. 更省空间,但是视频编码解码需要算力更大 2. 帧序列的概念

BT文件命名概述

  • 标 AVC / H264 / H.264 / x264 的可以一律看作H264
  • 标 HEVC / HVC1 / H265 / H.265 / x265 的可以一律看作H265
  • GB / CHS / SC / zh-Hans 指简中
  • BIG5 / CHT / TC / zh-Hant 指繁中
  • 远离闲杂播放器,拥抱 Potplayer / IINA / VLC / MPC-BE / MPV
  • 容器
  • mkv,mp4
  • rmvb
    • RealMedia可变比特率(RMVB)。在网速缓慢的时代,边下载边看是巨大优势
    • 缺点:rm/rmvb格式编解码都是要收费。压缩比和速度都远逊于H264
  • avi
    • AVI是英语Audio Video Interleave(“音频视频交织”或译为“音频视频交错”)的首字母缩写,由微软在1992年11月推出的一种多媒体文件格式,用于对抗苹果Quicktime的技术。 现在所说的AVI多是指一种封装格式。
    • 图像数据和声音数据是交互存放的。从尾部的索引可以索引跳到自己想放的位置。
    • AVI與MP4本身只有聲音與影像沒有字幕

文字编码

  • ANSI 编码
  • 美国国家标准学会(American National Standards Institute)的缩写
  • ANSI并不是某一种特定的字符编码,而是在不同的系统中,ANSI表示不同的编码
  • 在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。
  • GB2312
  • 国家推出的常见6000汉字
  • GBK
  • 微软拓展了繁体汉字的普通技术规范,所以windows上基本都是默认GBK
  • UNICODE
  • Universal Multiple-Octet Coded Character Set 统一码,初始就25种文字
  • 采用了书写编码,导致会有长得像,但是完全不同的文字。导致很多钓鱼网站
  • UTF-8编码
  • UTF-8全称:8bit Unicode Transformation Format,8比特Unicode通用转换格式,是一种变长的编码方式。
  • 其编码中的第一个字节仍然与ASCII兼容。

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

https://bravoing.github.io/2020/02/14/%E8%A7%86%E9%A2%91%E6%92%AD%E6%94%BE%E5%99%A8%E5%8E%9F%E7%90%86%E3%80%81%E5%88%86%E8%BE%A8%E7%8E%87%E3%80%81%E5%B8%A7%E7%8E%87%E3%80%81%E7%A0%81%E7%8E%87/

作者:哔哩哔哩技术 https://www.bilibili.com/read/cv16198183 出处:bilibili

https://www.youtube.com/watch?v=0LSHhatwTxM

柴知道也行

https://www.jianshu.com/p/c23f3ea5443d