V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  GeruzoniAnsasu  ›  全部回复第 57 页 / 共 147 页
回复总数  2926
1 ... 53  54  55  56  57  58  59  60  61  62 ... 147  
2022-03-26 14:01:32 +08:00
回复了 A01514035 创建的主题 问与答 请教一个关于视频文件大小的问题
1. 视频文件有封装格式和视频流编码格式两个概念(其实「格式」不准确,但正因为这两个概念容易混淆所以我用相似的词提醒)
2. 封装是指 mp4/avi/mkv 这样的容器格式,除了视频流外还可以封装音频流、字幕、音画同步信息等额外的东西。你的 test2.mov 和 test2-2.mp4 由于没有经过重编码所以它们的主要内容,即原来那个视频流,是完全一样的,只是采用了不同封装而已,类似一个 gz 压缩一个 zip 压缩
3. 视频流的编码指的是 mpeg1/h.264/AV1/hevc 之类的算法,更先进的算法可以实现更高的清晰度、分辨率的同时降低所需的空间大小。以前 av 画质时一个视频几百 m ,现在 1080p 一个视频还是几百 m ,这是编码方式在影响
4. 在采用同样编码方式的前提下(比如你展示的 3 个文件视频都是 x264 编码的,它们都是 h.264 视频流),能控制的参数也还有非常多。不同的采集设备和播放设备能支持的参数不同,所以有非常多级的标准来限制编码器的数十上百个参数变量。比如老旧便携播放器解码能力很弱,甚至没有并行指令集( SIMD 之类的指令集),那视频就不能编码得太复杂,跟手游不用高精 3D 模型一个道理。
5. 那么具体到算法上是些什么差异呢: 前后帧变化估计的精确性、变化位置的搜索方式、搜索范围、压缩时寻找最佳字典的复杂度、区域片段「重要性」占整体的权重……

打个粗浅的比方,完美的编码:
「 这一帧的像素由前 20 帧的 x 到 y 位置卷积后与 10 帧后的 z 位置相乘得到,下一帧的图像人肉眼不可能看清,所以直接使用本帧 1/4 分辨率数据。」
辣鸡编码:
「这一帧有 1920*1080 个像素,但我只记了一万个位置的值,分区平摊吧,依次是 1.1,0.9,0.132,0.15768……」
显然完美编码体积就能很小同时也很精确。辣鸡编码就又占地又粗糙。但前者要得到这么准确的前后参考数据是要经过大量反复多次的搜索和迭代的,这也是编码器编码要花大量时间的原因。实际应用时,往往会在编码耗时和成品质量 /大小之间取舍一个合适的平衡
2022-03-26 13:23:46 +08:00
回复了 chzmwfg 创建的主题 推广 Vi/Vim vs Emacs 哪一个更厉害?新人应该如何选择呢?
我说一句话: 它们这么牛逼你为啥用 sublime 做视频?
@vcfghtyjc
> 为啥会需要引用两次

你先再看一眼 1L ,然后看这个
https://onlinegdb.com/b4qgRG-ZS


哎,你别说以前可能还真有人认为会有需要 include 两次的地方
能让编译器「自己做这个事情」的提案叫 modules ,是一个有近 10 年历史的卫星,当然这跟 c++存在的漫长时间相比并不算什么

https://en.cppreference.com/w/cpp/compiler_support 在这里搜 modules 有惊喜

p.s. 别看这个 proposal 是 2019 年的,但其实随便一搜就能找到过去的弃案比如 https://isocpp.org/files/papers/n4214.pdf
说一个会的人都知道但没学过可能无法想象的事:

c++的编译器只会处理「一个文件」,include 的作用是把所有<>里的文件全都拼在一起



字面意思,拼在一起。include 两次就拼两次。
2022-03-25 13:31:39 +08:00
回复了 Zink99 创建的主题 职场话题 请教一个今天面试中出现的问题
如果是你先提到有 webpack proxy 这种方式然后追问的,那我觉得不冤,如果是在说

「本质上有代理 /浏览器 /HTTP 规范三种方式」然后让你把所有代理配置方式都说一遍,那我觉得很傻逼
2022-03-25 13:16:20 +08:00
回复了 frank1256 创建的主题 Go 编程语言 go 我就不用指针不行?
如下机制必须使用指针:

type T struct {
Field int
}

func (t *T) SetValue(v int) {
t.Field = v
}

var t T
t.SetValue(1) // 否则 t 的值永远不会改变

如下结构传递值会有问题:
defer func(v T){someChan <-v}(vv) // channel 捕捉不到 v 的最后状态而是当前值

gorm 的 scan 使用了大一 C 语言教科书级别的指针传递:
db.Where("id = ?", 1).Scan(&ModeledValue)




无脑用指针的话:

func (*T) TableName() string {
return "t_"
}

你要写 db.Table((&T{}).TableName()) ,本来可以 db.Table(T{}.TableName())




还有浅拷贝的问题:

type T struct{v:int}
type U struct{t *T}
type N struct {u *U}

t := T{v:1}
u := U{}
n := N{}

n.u = &u
u.t = &t


func foo(n *N) N {
return N{u: &U{t: n.u.t}}// 我想「用 n 的值初始化一个新 N 」
}

newN := foo(&n)
newN.u.t.v = 2
n.u.t.v == 2 //但其实 n.u.t 被改了


ref: https://go.dev/play/p/74Q6bC13xN0
2022-03-23 23:14:48 +08:00
回复了 erquren 创建的主题 问与答 国内视频网站用户体验 B 站应该是第一了吧?
@awen233333 说明大部分人都默认标题观点但碍于面子或者奇怪的政治正确只好挑些其它毛病。你看不认同的人就会拿出例子来做对比
2022-03-23 07:58:00 +08:00
回复了 qile1 创建的主题 Flask flask 和 fastapi 及 bottle 如何多进程共享认证 token
> window 的注册表可以不?

我都想替微软谢谢你 ……


redis 就是用来干这个的,你又不想用。数据库自己都有锁会处理好的你又不用,整个 sqlite…… 不会每个 app 自己使用一个 sqlite db 文件吧

要不我再指条路,叫 CreateFileMapping() : https://docs.microsoft.com/en-us/windows/win32/memory/creating-named-shared-memory
2022-03-23 06:28:31 +08:00
回复了 placeholder 创建的主题 Node.js 请各位把代码甩我脸上,读取 json 文件之后怎么搜索
我觉得又是个表达问题

我猜 OP 的原意是在反序列化的过程中中断读取文件流
你是否在找类似于
http://rapidjson.org/zh-cn/md_doc_sax_8zh-cn.html

这样的东西?
2022-03-22 11:28:49 +08:00
回复了 frank1256 创建的主题 Go 编程语言 Goland,单元测试怎么进行 debug?
显然是什么姿势不对
https://i.imgur.com/92Bodi1.png
2022-03-21 06:54:35 +08:00
回复了 Margelator 创建的主题 分享发现 可否欣赏一下大佬们的桌面壁纸?
https://i.imgur.com/27tFZ5h.png

别人问我为什么是这个壁纸我一般会回答

「因为很护眼」



但其实是因为这是我设过的唯一一次壁纸之后一直账号同步就再也没管过了
( macos 上就一直是默认)
2022-03-20 13:09:45 +08:00
回复了 Sekai 创建的主题 程序员 自主开发档案管理系统可能要用到哪些开发软件?
卧槽我第一次见把开发软件也算进项目成本的项目,兄弟咱公司名叫啥 :doge:
2022-03-20 13:04:46 +08:00
回复了 ShittyStars 创建的主题 游戏开发 做了个游戏原型,请大家提提意见并指教
害挺难,最高纪录 42 分
点不亮进不了 BIOS 说明 CPU 不能工作

CPU 不能工作有几个原因: 主板供电有问题、主板的初始化有问题无法使 CPU 上电、内存无法工作(常见于超频之后)



能点亮一次的话先进 BIOS 把 CPU 电压稍微调高,CPU 和内存频率全都减低一点,并且一次只插一根内存,观察稳定性有否改善,如果有,说明可能是内存条的问题,如果没有,那这台机子也许该淘汰了(主板都换了,还插个旧的 CPU 说不过去吧)
2022-03-20 03:17:27 +08:00
回复了 ChaosesIb 创建的主题 C++ 有关模板 + if constexpr + static_assert 的问题
https://stackoverflow.com/questions/50051473/if-constexpr-in-c17-does-not-work-in-a-non-templated-function
https://www.v2ex.com/t/815172#reply10

照上次获得的经验来看,这里应该已经是模板实例化的阶段,所以 GCC 的行为是对的。也许 MSVC 又做了什么非标准流程,无法深究了
2022-03-19 06:04:40 +08:00
回复了 userKamtao 创建的主题 程序员 后端大佬请进!帮我看看这个排序方法可以行得通吗?
@documentzhangx66 我在#28 是让你想清楚「直接操作」怎么操作,操作什么?是指真的去更新 100w 行吗?
2022-03-19 05:45:29 +08:00
回复了 userKamtao 创建的主题 程序员 后端大佬请进!帮我看看这个排序方法可以行得通吗?
@documentzhangx66
你甚至不知道 OP 遇到了个什么问题……

他之前的做法可以 SELECT * ORDER BY pos ,pos 是个浮点,他可以在任意两个 pos 之间找一个数作为新 pos 。但这也许会有问题,所以他想问有没有不用浮点数的方案。

那如果不用浮点的话 没法指定 pos=1 和 pos=2 之间的新数了,想把 pos=100w 移到 1 和 2 中间让它变成 2 ,其它的顺次后移,怎么办? id=100w 的那行,pos 改成什么? pos=2 的那行 pos 改成什么?其它的呢?

好,如果不用这种 pos=整数的表示方法,我们用一个链表 ——



回到我的回复开头
2022-03-19 05:38:49 +08:00
回复了 userKamtao 创建的主题 程序员 后端大佬请进!帮我看看这个排序方法可以行得通吗?
我们往表里放了一个链表,现在插入和移动都变得很快了,这很好——

但我怎么知道第四个元素应该是 ID 为几的行? 看起来 ID=4 被 ID=5 指着,然后 ID=4 自己指着 ID=3…… 那,id=3/4/5 这三行到底是第几个元素?没有映射,他们的 ID 与 next/prev 都不直接反应呈现顺序。当只有一个表的时候这做不到。

所以需要第二个映射表。

第四个元素,按桶大小为 3 估计(我给的例子),应该在第二桶,那么我们
查 SUM(桶容量) WHERE ID <2 ,得到 3 ,
再查 capacity WHERE id=2 ,为 3 ,说明确实在第二个桶里。那么
直接查第一个表 WHERE bucket_id = 2 ,提取出 3 行,看 2 号桶的头,是 id=2 。遍历内存里的三个元素找到 id=2 然后沿着 next 遍历(4-3)-1=0 次,得到 id=2 的元素。
总计 3 次查询完成了随机检索,一次桶表扫描,一次桶表索引,一次数据表索引,内存遍历忽略不计
1 ... 53  54  55  56  57  58  59  60  61  62 ... 147  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1943 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 41ms · UTC 10:33 · PVG 18:33 · LAX 03:33 · JFK 06:33
Developed with CodeLauncher
♥ Do have faith in what you're doing.