层主 @yingshaoxo 于 2025-03-21 19:12 删除了该楼层。
我在用alpine linux,我一般装docker 运行各类程序,
层主 @咯叽 于 2025-03-23 12:11 删除了该楼层。
@上善若水,php默认命令行模式,不是fpm模式
华夏手机X100(蓝)
@无名啊,诶,怎么我搜索出来的机械硬盘都这么贵![]()
发言未通过审核,仅管理员和作者本人可见。
清纯甜美.jpeg![]()
@tasy5kg,用新版
Chrome
、MX Player
看 28 楼 1080p 60fps av1(第四个视频)很流畅,直接用via
+ 老旧内核会卡。。
@tasy5kg,我主要是转虎友的游戏视频时发现的,画面精细时,即使用上 svt-av1-psy 众多参数,1.5 Mbps 码率时还是有一点模糊。。
同码率改用
x265 veryslow no-sao no-strong-intra-smoothing
,看着犀利一些。。
x265
就算改用 1 Mbps 码率,观感还是不错。。
当然,画面大范围色块,没这么精细,还是中低码率时,
av1
表现比x265
细腻。比如另一款 1080p 60fps 才 0.7 Mbps,观感都还不错。。视频链接:【乐高蝙蝠侠】片段(60fps+av1+crf60).mp4(5.2 MB)
这是前面视频的原视频,你可以试试同码率能否比
x265
转得更好。。我功力不足,只能干成第一个视频那样了。。
@无名啊,第一次了解到svt-av1-psy,看介绍好像挺有用,以后试试效果。
你用的手机应该也是k40,播放av1视频不会经常卡吗?
@tasy5kg,是的,像你说的情况,某宝买些 20+ 元 500GB 硬盘存原片,塞满就丢角落,可能是更好的保管方式。。(怕丢数据就多店铺买几个,一式两份)
@无名啊,去年发完这个帖子之后,我感觉把相册里的所有视频转成av1可能不是一个好决定。av1视频发QQ和微信时会发不了或者被转码,而且在不支持硬解的手机上播放很卡,我试了k40播放2k且fastdecode的视频依然会一顿一顿的。然后我就把视频存到硬盘里没管了
@tasy5kg,下图
pig-10
的描述,很符合我现在对于x265
和svt-av1
适用视频的感受。。据我所知就当年来说,HEVC因为继承了AVC的很多特性,对低分辨率或者Spatial复杂度高的素材品质表现优于AV1。而AV1在高清、4k等分辨率下,Spatial复杂度低、大范围色块多的素材显著优于HEVC。
@tasy5kg,感觉有必要重新审视下
av1
。。我尝试画面精细的视频,svt-av1
不如x265
。。你若感兴趣,我再展开说
层主 @咯叽 于 2025-03-15 17:57 删除了该楼层。
@yingshaoxo,你是说,帖子放内存里,就不会慢了,是吧。。
- 单线程提供服务,并发量会不会很低。。
- 多线程数据同步,会不会很麻烦?
- 啥时候落盘一次数据呢?此时整个服务都要卡住吗。。
- 后续扩展功能,会不会还不如写
SQL
方便。。
之前用mysql的时候,安装需要导入一个sql的命令文本文件,来实现table的建立。但现在换成sqlite,难道只能手工建表了吗
或者你把mysql的建表语句修改为兼容sqlite然后写一个程序去执行这些sql就能自动建出来了。
从我切换到mysql以来,后续所有涉及数据库的代码修改都没有考虑sqlite兼容性,所以这个sqlite连接功能其实基本不能用,只是还没从代码里删掉而已。
@无名啊,
1. 全文搜索不是事儿
2. 增量备份没必要,一般纯文本的数据不会超过3GB
3. 一天备份一次
4. 服务器程序一般不会断电
5. SSD的速度很快了,人类几乎没有延时感。同时纯文本要做memory dict cache,保存最近访问的1000个文章,快如闪电。
我之前用Python写过类似的数据库,只不过没写中心化的pipe line,多进程会出问题:
https://github.com/yingshaoxo/auto_everything/blob/dev/auto_everything/database.py#L357
其中一点代码:
“”“
if self.use_sqlite == False:
self.database_txt_file_path = self._disk.join_paths(self.database_base_folder, f"{self.database_name}.txt")
if (not self._disk.exists(self.database_txt_file_path)):
self._io.write(self.database_txt_file_path, "")
”“”
“”“
def raw_search(self, one_row_json_string_handler: Callable[[str], dict[str, Any] | None]) -> Iterator[dict[str, Any]]:
"""
one_row_json_string_handler: a_function to handle search process. If it returns None, we'll ignore it, otherwise, we'll add the return value into the result list.
```
def one_row_json_string_handler(item: str) -> dict[str, Any] | None:
return json.loads(item)
#return None
```
"""
if self.global_multiprocessing_shared_dict != None:
self._wait_until_unlock()
self.global_multiprocessing_shared_dict[self._the_key_for_the_lock_of_memory_data] = True
for row in self.global_multiprocessing_shared_dict[self._the_key_for_memory_data]:
json_string = self._json.dumps(row, sort_keys=True).strip()
result = one_row_json_string_handler(json_string)
if (result != None):
yield result
self.global_multiprocessing_shared_dict[self._the_key_for_the_lock_of_memory_data] = False
return
if self.use_sqlite:
for row in self.sql_cursor.execute(
f"SELECT * FROM {self._sql_table_name}"
):
result = one_row_json_string_handler(row[0])
if (result != None):
yield result
else:
with open(self.database_txt_file_path, "r") as file_stream:
previous_position = None
while True:
current_position = file_stream.tell()
line = file_stream.readline()
if previous_position == current_position:
# reach the end
break
previous_position = current_position
if (line.strip() == ""):
# ignore empty line
continue
if (line.startswith('#')):
# ignore deleted line
continue
result = one_row_json_string_handler(line)
if (result != None):
yield result
”“”