乱码三千 – 分享实用IT技术

乱码三千 – 码出一个新世界


  • 首页

  • 归档

  • 搜索

虚幻引擎实用快捷键汇总

发表于 2022-08-28

场景相关

  1. 快速定位聚焦到某个物体

    1
    键盘F
  2. 使物体下落吸附至地面

    1
    键盘end
  3. 快速旋转地图

    1
    Alt+鼠标左键
  4. 快速缩放地图

    1
    Alt+鼠标右键
  1. 临时放大地图

    1
    C+鼠标任意键长按
  2. 临时缩小地图

    1
    Z+鼠标任意键长按
  3. 进入预览模式

    1
    Alt+P

蓝图相关

  1. 在蓝图面板获取变量值

    1
    Ctrl+鼠标左键拖动
  2. 在蓝图面板设置变量值

    1
    Alt+鼠标左键拖动
  3. 切断蓝图节点之间的连线

    1
    光标移至线上 然后 Alt+鼠标左键
  4. 给选中的蓝图节点添加注释

    1
    键盘C
  5. 克隆选中的蓝图节点

    1
     

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

关于虚幻引擎位置迁移之路径修改

发表于 2022-08-22

起因

最近换了硬盘 打算将原来的虚幻引擎迁移到另一块硬盘 但是当我将引擎文件拷贝过去后 虚幻启动程序并未识别 然而设置面板中又没有关于这一块路径的修改

难道我得重新下载一遍? 这我肯定是不能接受的呀

于是乎我百度了一番经过尝试之后发现一个方法可行

解决方案一

重新下载引擎 然后选择新的引擎下载路径 该路径是你新硬盘位置

image-20220822145537993

下载开始后硬盘中会自动生成相应的引擎目录 此时暂停下载 紧接着将旧引擎迁移至该目录下 最后重启Epic Games Launcher即可

解决方案二

进入虚幻support目录 修改install.in文件, Mac系统路径如下:

1
/Users/你的用户名/Library/Application Support/Epic/UnrealEngine/install.in

用文本文件打开 然后修改对应的路径即可

image-20220822150921510

同样的 最后重启Epic Games Launcher即可

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Youtube的山寨版LibreTube国内直连

发表于 2022-08-03

前言

发现一款软件 - LibreTube,看这名字就知道八成是 Youtube 的山寨版。

请忽略google的渣翻译

打开 APP 后长这样,直接访问无压力:

界面设计的看起来还是不错的,视频刚打开需要多缓冲几秒。

左上角的设置里还可以设置不同国家和视频源,默认分辨率等。速度慢可以在【选择实例】里切换其他的\实例*。*

搜索功能也同样好用,经过小编测试,动漫新番,包括最近比较火的电视剧都能搜到,关键还都是正版。

视频播放器还自带字幕,变速功能。这么多年过去了,神仙姐姐依旧那么好看

另外还可以把喜欢的视频下载下来,订阅喜欢的频道,非常方便。

APP 是免费开源的,安装包只有 13.7MB,不得不说,开源牛逼,开源万岁。

由于直接从 Github 下载太慢,小编已经将 apk 安装包上传到了网盘。

最后附上下载地址:

  • GitHub: 点击下载

  • 蓝奏网盘: 点击下载

本文转载自:微信公众号

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

一款好用的搜索引擎推荐

发表于 2022-08-02

前言

周围不少小伙伴反应,最近搜索引擎的准确率越来越低了,有时候搜索官网都搜不到。

之前介绍过号称 “国内版 Google” 的F搜,前不久还由于各种原因无法访问了。

今天一看发现,又回归了,域名也由 fsou.cc换成了 fsoufsou.com。界面也和Google 搜索越来越像了。

不过今天的重点不在这里,最近发现个超级牛的搜索引擎。

网站走的简洁风格,但功能可不简单。汇聚了来自 Google,Bing 等70多个不同搜索引擎的结果。

除了常规的网页和图片搜索,还支持视频,新闻,音乐,学术,文件,社交媒体等。

还可以在首选项里设置里对不同标签开启不同的搜索引擎。比如常规类中只开启了Google,还可以开启Bing,duckduckgo 等搜索结果。

开启后你会发现搜索结果准确率又进一步提高。这个搜索引擎目前是开源的,人人都可以搭建。

不过,已经有很多大神已经搭建好了,镜像站点非常多,就没必要自己动手了。

只需要在 https://searx.space 选择一个最快的站点就能访问了。

通过这个搜索工具 可以搜到平常搜不到的东西 大家懂得

本文转载自:微信公众号

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

一款跨平台的m3u8视频下载工具

发表于 2022-08-02

介绍

M3U8-Downloader是基于Electron框架开发的一款可以下载、播放HLS视频流的APP。

功能 支持
HLS标准源 ✓
标准 AES-128-CBC加密 ✓
标准 AES-196-CBC加密 ✓
标准 AES-256-CBC加密 ✓
非标准 AES-*-CBC加密 ㄨ

开放源码 M3U8-Downloader

GitHub stars

下载最新版 2.0.7 (2022-01-26)

百度网盘下载
1
链接:https://pan.baidu.com/s/14zaMkxgfTC0HSge-Ze6EpQ 提取码:m3u8
阿里云盘下载
1
链接:https://www.aliyundrive.com/s/1QjQvn29W6J

使用展示

M3U8-Downloader 下载展示
M3U8-Downloader 合并展示
M3U8-Downloader 修复合并展示

HLS源怎么抓取呢?

在chrome浏览器打开视频网页,按下F12,页签点击到Network页面,在Filter框里输入”m3u8”,然后按F5刷新页面,如果网页里的视频使用的是HLS源,就可以在这里捕获到视频流地址,然后选中右键 Copy -> Copy Link Address.

M3U8-Downloader 可以使用您提供m3u8源地址下载并无损转码Mp4文件。

关于 M3U8-Downloader

点击进入官网

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

下载视频m3u8格式视频的若干种方法

发表于 2022-08-01

第一种方法 使用ffmpeg工具

先安装ffmpeg:

brew install ffmpeg

img

ffmpeg安装完成

ffmpeg使用:通过检查元素,元素定位,可以看到某视频地址的资源地址如下blob:URL的这种形式

img

然后通过查看Network,找到blob:URL地址背后的m3u8地址

img

用ffmpeg下载视频,并将m3u8格式转为mp4格式,指令如下

ffmpeg -i https://youku.com-youku.net/20180620/13336_33db73a9/index.m3u8 fileName.mp4

或

ffmpeg -i https://youku.com-youku.net/20180620/13336_33db73a9/index.m3u8 -c copy fileName.mp4

img

如上下载中

由于视频很大,下载需要很长长长时间(1个G的视频可能需下载几小时…)。

可以通过如下指令进行下载提速(下载速度大约能提升到几到十几分钟,很棒了哦,起码比百度云快):

ffmpeg -i https://youku.com-youku.net/20180620/13336_33db73a9/index.m3u8 -c copy -bsf:a aac_adtstoasc fileName.mp4

如果你想用终端工具拉起视频播放,直接通过如下指令就能 播放某链接的视频

ffplay -i https://youku.com-youku.net/20180620/13336_33db73a9/index.m3u8

img

下载完成,播放中

第二种方法 使用Chrome插件Tampermonkey(油猴)

关于Tampermonkey油猴的安装和基本使用,见我之前的一篇文章:

晒一下我常用的几款chrome 插件,你值得拥有

这里介绍油猴中1个好用的脚本:media-source-extract

在油猴脚本列表中暂时无法提供下载,目前需要手动创建安装,具体的视频下载和工具使用,见链接:

点击进入下载

media-source-extract是一款提取视频画面和音频的工具,最终下载得到的是音频文件和视频画面文件。

因此可以通过合并音视频来完成最终的视频。

具体音视频合成方法网上有很多,我这边提供一套ffmpeg的合并方法,具体分2步走:

1、先把音频「audio_mp4」(或多个「audio_mp4」) 进行合并转码,转为.aac格式:命令行执行如下:

1
ffmpeg -i "***-audio_mp4;codecs=***.mp4" -acodec copy "audio.aac"

(记得命令行先切换到音频所在的文件路径下)

2、再将原始视频「video_mp4」(或多个「video_mp4」),和上一步得到的 aac 「audio.aac」组装到一起,命令行执行如下:

1
ffmpeg -i "***-video_mp4;codecs=***.mp4" -i "audio.aac" -c copy -shortest "result.mp4"

(记得命令行先切换到音频所在的文件路径下)

最终result.mp4就是你要的合并了音频和画面的视频了!

media-source-extract这种提取音视频合并的方法,太麻烦了,有点像录屏的感觉。

下载操作的复杂度,以及过程可能会丢失的视频片段,我表示很淦。

但是作为一个下载方式,有价值,可作为备胎。

再介绍1个比较好油猴插件:m3u8-downloader

在油猴脚本地址栏 用户脚本 中去搜索下载安装,如下图:

img

img

使用:譬如下载一部烂片 动作片《蛇蝎情人2003正片》免费在线播放-星空影院,用google浏览器输入该视频网址,m3u8-downloader 脚本会自动识别blob:URL地址并拿到m3u8文件,如下:

img

点击“跳转下载”,会跳转到下载页面

img

选择“原格式下载”或“转码为MP4下载”

img

开始下载,同时可以看到下载进度,如下:

img

下载完成,本地播放,如图:

img

第三种方法 使用NeatDownloadManager Extension

这是一款我常用的插件,很好用。

可以去下载1个PC端软件 和 google插件

PC端NeatDownloadManager下载地址:Neat Download Manager for Mac and Windows (Free Internet Download Manager Mac & Windows )

安装后,界面如下

img

在红色标记1的Setting中,可以设置对应代理,譬如常见的某d下载提速,可以像这样设置:

img

红色标记2的Browsers中,点击“Add Chrome Extension”就可以给google浏览器添加该插件啦:

img

当然也可以直接在google插件搜索 NeatDownloadManager Extension(需要f墙),进行安装:

img

安装已经完成啦:

img

NeatDownloadManager Extension插件的使用:

我想下载温老的视频:温铁军:四大文明古国为何只有中国没有灭亡?罗马的民主只对其10%的人口?【温铁军践闻录5-35】_哔哩哔哩_bilibili

在google浏览器里,打开该地址,就可以看到该插件拿到的视频资源:

img

点击那个size最大的视频资源,就会自动下载了:

img

下载完成

img

搞定!

第四种方法 使用视频下载器 - CoCoCut

在google网上应用商店(需要f墙),搜索“视频下载器 - CoCoCut”

img

安装该插件:

img

视频下载器 - CoCoCut使用:

譬如我想下载一个电影,我在goolge 浏览器上随便找了一个电影网站:《战狼2》高清完整版_最新电影_免费在线观看平台_猪蹄影院 ,然后该插件就会自动检测到该视频信息,点开该插件,就可以看到并执行下载了

img

下载中

img

下载完成。

img


最后,推荐几款我常用的解析.m3u8的在线网站:

FLVCD - 硕鼠官网|FLV下载|视频下载

Gihosoft TubeGet

真心希望,更多的技术为更多人使用。

本文转载自:知乎

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

ANDROID跳转到手机自启动管理页面

发表于 2022-07-21

前言

有时候,为了确保APP的后台正常运行,需要让用户去设置打开APP的自启动权限(或者改为手动管理/huawei)。为了更好的用户体验,在APP中可以直接跳转到手机的自启动管理页面或者权限管理页面。


应用启动管理页面

oppo/vivo是没有这个页面的
华为

  • 华为
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ComponentName componentName = null;
int sdkVersion = Build.VERSION.SDK_INT;
try {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//跳自启动管理
if (sdkVersion >= 28){//9:已测试
componentName = ComponentName.unflattenFromString("com.huawei.systemmanager/.startupmgr.ui.StartupNormalAppListActivity");//跳自启动管理
}else if (sdkVersion >= 26){//8:已测试
componentName = ComponentName.unflattenFromString("com.huawei.systemmanager/.appcontrol.activity.StartupAppControlActivity");
}else if (sdkVersion >= 23){//7.6:已测试
componentName = ComponentName.unflattenFromString("com.huawei.systemmanager/.startupmgr.ui.StartupNormalAppListActivity");
}else if (sdkVersion >= 21){//5
componentName = ComponentName.unflattenFromString("com.huawei.systemmanager/com.huawei.permissionmanager.ui.MainActivity");
}
//componentName = new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity");//锁屏清理
intent.setComponent(componentName);
startActivity(intent);
}catch (Exception e){
//跳转失败
}
123456789101112131415161718192021
  • 小米
1
2
3
4
5
6
7
8
9
10
11
Intent intent = new Intent();
try {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName componentName = null;
componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity");
intent.setComponent(componentName);
context.startActivity(intent);
} catch (Exception e) {//抛出异常就直接打开设置页面
jumpAPPInfo(context);
}
12345678910
  • 三星
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Intent intent = new Intent();
ComponentName componentName = null;
try {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//跳自启动管理
componentName = ComponentName.unflattenFromString("com.samsung.android.sm/.app.dashboard.SmartManagerDashBoardActivity");
intent.setComponent(componentName);
startActivity(intent);
}catch (Exception e){
try {
componentName = new ComponentName("com.samsung.android.sm_cn", "com.samsung.android.sm.ui.ram.AutoRunActivity");
intent.setComponent(componentName);
startActivity(intent);
}catch (Exception e1){
//跳转失败
}
}
1234567891011121314151617
  • 魅族
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Intent intent = new Intent();
ComponentName componentName = null;
try {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//跳自启动管理
componentName = ComponentName.unflattenFromString("com.meizu.safe/.permission.SmartBGActivity");//跳转到后台管理页面
intent.setComponent(componentName);
startActivity(intent);
}catch (Exception e){
try {
componentName = ComponentName.unflattenFromString("com.meizu.safe/.permission.PermissionMainActivity");//跳转到手机管家
intent.setComponent(componentName);
startActivity(intent);
}catch (Exception e1){
//跳转失败
}
}
1234567891011121314151617

权限管理页面

这个页面重要的权限自启动、锁屏显示、后台弹出界面

vivo

  • vivo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Intent localIntent;
try {
if (((Build.MODEL.contains("Y85")) && (!Build.MODEL.contains("Y85A"))) || (Build.MODEL.contains("vivo Y53L"))) {
localIntent = new Intent();
localIntent.setClassName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.PurviewTabActivity");
localIntent.putExtra("packagename", context.getPackageName());
localIntent.putExtra("tabId", "1");
context.startActivity(localIntent);
} else {
localIntent = new Intent();
localIntent.setClassName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.SoftPermissionDetailActivity");
localIntent.setAction("secure.intent.action.softPermissionDetail");
localIntent.putExtra("packagename", context.getPackageName());
context.startActivity(localIntent);
}
}catch (Exception e){
// 否则跳转到应用详情
localIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
localIntent.setData(uri);
context.startActivity(localIntent);
}
12345678910111213141516171819202122
  • OPPO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Intent intent = new Intent();
try {
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
ComponentName comp = new ComponentName("com.color.safecenter", "com.color.safecenter.permission.PermissionManagerActivity");
intent.setComponent(comp);
startActivity(intent);
}catch (Exception e){
try {
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("pkg_name", context.getPackageName());
intent.putExtra("app_name", context.getString(R.string.app_name));
intent.putExtra("class_name", "com.welab.notificationdemo.MainActivity");
ComponentName comp = new ComponentName("com.coloros.notificationmanager", "com.coloros" +
".notificationmanager.AppDetailPreferenceActivity");
intent.setComponent(comp);
startActivity(intent);
}catch (Exception e1){
// 否则跳转到应用详情
intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
intent.setData(uri);
context.startActivity(intent);
}
}
12345678910111213141516171819202122232425
  • 小米
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
try {
// MIUI 8
Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
localIntent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity");
localIntent.putExtra("extra_pkgname", context.getPackageName());
context.startActivity(localIntent);
} catch (Exception e) {
try {
// MIUI 5/6/7
Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
localIntent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
localIntent.putExtra("extra_pkgname", context.getPackageName());
context.startActivity(localIntent);
} catch (Exception e1) {
// 否则跳转到应用详情
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
intent.setData(uri);
context.startActivity(intent);
}
}
123456789101112131415161718192021

应用详情页面

1
2
3
4
5
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
intent.setData(uri);
startActivity(intent);
1234

总结

在其他应用上层显示、后台弹出界面、锁屏显示这三个权限会直接影响APP从后台启动活动,详情可以了解另一篇文章–>Android 在后台无法启动Activity。

附加

vivo/oppo/小米手机有一个“后台弹出界面”权限, 华为是没有的, 可以使用以下代码来检测该权限是否开启:

1
2
3
4
5
6
7
8
9
10
11
12
13
private boolean isAllowed() {
AppOpsManager ops = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
try {
int op = 10021;
Method method = ops.getClass().getMethod("checkOpNoThrow", new Class[]{int.class, int.class, String.class});
Integer result = (Integer) method.invoke(ops, op, Process.myUid(), getPackageName());
return result == AppOpsManager.MODE_ALLOWED;

} catch (Exception e) {
Log.e(TAG, "not support");
}
return false;
}

本文转载自:https://www.freesion.com/article/7753459867/

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Android代码跳转至电池优化电池信息界面

发表于 2022-07-21

前言

最近有一款产品有后台保活需求, 无奈甲方太穷, 厂商白名单什么的是别想了, 只能采用原始粗暴的方法, 就是让用户手动开启各种权限, 至于用户体验 这个不存在的 顶多跳转到相关设置页面

其中有一项就是涉及到电池优化的, 禁止电池优化可以延长后台保活时间

以小米手机为例, 给大家列举几个电池相关页面的跳转代码

电池优化页面

页面图示:

1701658389765_.pic

代码如下:

1
2
3
startActivity(Intent().apply {
action = Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
})

电池信息页面

页面图示:

1681658389761_.pic

代码如下:

1
2
3
4
startActivity(Intent("/").apply {
component = ComponentName("com.android.settings", "com.android.settings.BatteryInfo")
action = "android.intent.action.VIEW"
})

耗电统计页面

页面图示:

1691658389763_.pic

代码如下:

1
2
3
4
5
val powerUsageIntent = Intent(Intent.ACTION_POWER_USAGE_SUMMARY)
val resolveInfo: ResolveInfo? = requireActivity().packageManager.resolveActivity(powerUsageIntent, 0)
if (resolveInfo != null) {
startActivity(powerUsageIntent)
}

休眠时始终保持网络连接

华为手机有这个页面

Screenshot_20220721_171601_com.huawei.systemmanager

想要跳转到这个页面, 首先需要获取到该页面的包名和Activity全路径, 可以使用adb获取, 指令如下;

1
adb -s 设备名  shell dumpsys activity activities

运行结果如图:

image-20220721170255859

其中com.huawei.systemmanager表示包名 也就是applicationId, 而.power.ui.PowerSettingActivity表示Activity路径, 但最前面有个点 因此需要把包名加进去, 最后得到全路径是:

1
com.huawei.systemmanager.power.ui.PowerSettingActivity

有了包名和Activity路径, 那么直接上启动代码:

1
2
3
4
5
6
7
8
startActivity(Intent().apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK
putExtra("packageName", requireActivity().packageName)
component = ComponentName(
"com.huawei.systemmanager",
"com.huawei.systemmanager.power.ui.PowerSettingActivity"
)
})

最后运行报错. 提示没有权限:

1
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.huawei.systemmanager/.power.ui.PowerSettingActivity (has extras) } from ProcessRecord{439cab1 15282:com.xxx.xxx/u0a211} (pid=15282, uid=10211) not exported from uid 1000

暂时没有找到解决方法, 以上只是一种思路, 仅供参考

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Hexo博客自定义404页面

发表于 2022-07-21

前言

一个成熟的网站当然要有他独特的404页面,使用GitHub Pages部署的博客虽然有GitHub的默认404页面,但显然不够美观,也与我们的网站整体风格不搭。

要实现自定义404其实很简单,只要在网站的根目录放一个404.html文件即可。而对于我们使用的Hexo,则有更合适的处理方法。

操作步骤

第一步 创建404页面

进入hexo站点的根目录,打开终端,输入:

1
hexo n page "404"

将会在source目录下生成一个404文件夹,其中有一个index.md文件,这个文件其实就相当于是404.html了。

第二步 打开index.md,修改头部信息:
1
2
3
4
layout: false
comments: false
title: 404
permalink: /404

注意不要忘了修改permalink,不然不会在根目录下生成404.html。

第三步 编写404页面内容

由于markdown是支持插入html内容的,因此只需要在这个md文件里写入html代码即可。要注意的是html代码之间千万不能有空行,不然会标签识别错误!

类似这样

那么接下来的就是考验你前端编码的能力和审美了。可惜本人不才,让我凭空写一个美观的网页几乎不可能,那只能靠拿来了!

这里推荐一个404模板网站,有非常多美观的404页面,总能找到属于你的菜。

选模板

找一个你喜欢的模板,点击下载源码,里面一般包含了html+js+css。html刚才说了直接贴markdown文档里即可,而js和css可以放到刚才生成的404目录下。

同时别忘了修改html中的css和js引用地址:

1
2
3
4
5
6
7
<!-- 网站icon -->
<link rel="icon" href="/img/favicon.svg">
<!-- css文件 -->
<link rel="stylesheet" type="text/css" href="/404/404.css">
<!-- js文件 -->

<script type="text/javascript" src="/404/404.js"></script>

这样就基本完成了,hexo s看看效果:

404页面

有兴趣的话可以再微调下页面内容即可。

附加思考

  1. 可以直接在_post目录中添加404.md吗?

    答: 可以 不过_post目录下的文本会当做文章收入进主页中, 如果不想在主页和归档列表中看到404页面, 建议还是使用hexo n page指令, 将其单独放置在一个目录中

  2. 404页面和网站整体融合性

    我们发现 上述的方法生成的404页面和网站融合度很高, 可以保留或者移除主题布局, 如果你想单独制作一个和原网站风格不相关的404页面,那么直接自定义一个404.html文件放置到网站根目录即可

本文转载自:https://blog.luzy.top/posts/456645515/

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

QQ空间相册批量下载原图方法

发表于 2022-07-20

▍1 QQ空间导出助手(浏览器扩展)

这一回的话就要首推这款浏览器扩展了:https://github.com/ShunCai/QZoneExport

如果你访问Github困难,也可以访问项目的Gitee镜像地址:https://gitee.com/mirrors_ShunCai/QZoneExport

建议了解《2022 Github加速访问教程》

作者在2021年11月28日对扩展进行了更新,1.1.4版修复了之前介绍时提到的诸多问题

打开项目地址后,你有以下多种方式可以进行安装这款浏览器扩展

img

如果你不会富强上网,建议就是自己去下载一个Edge或者360浏览器,这样直接就能从扩展商店在线进行安装

img

扩展安装好之后,右键扩展图标,点击扩展选项

img

在「公共」选项卡下设置下载方式为「浏览器」,或者你也可以根据说明设置为 Aria2、迅雷,设置好之后记得点击保存\

img

然后打开浏览器设置,关闭下载设置中的「每次下载都询问我该做些什么」这个选项(不关的话之后下载会一直有弹窗)

img

然后就没什么好说的了,扩展默认下载原图(带EXIF信息)\,这款扩展不仅支持备份相册,同事还支持导出说说、日志、私密日记、视频、留言板、好友、收藏夹、分享、访客内容,可谓非常全能!

img

如果你勾选了下载说说、日志等东西,最后还可以点击一个打包下载,扩展会生成一个网页文件供你方便查看

img

▍2 QQ空间相册下载神器(油猴脚本)

第二款相对方便的工具就是这个油猴脚本了:https://greasyfork.org/zh-CN/scripts/399958

img

油猴脚本的安装方法请复习:这篇文章的第2节

脚本装好之后,在使用之前,务必有俩个地方需要设置

打开浏览器设置,关闭下载设置中的「每次下载都询问我该做些什么」这个选项(不关的话之后下载会一直有弹窗)

并且千万记得创建一个文件夹,并将下载位置改一下(否则可能会下载到遍桌面都是)

img

这时再打开你的QQ空间,你会发现在相册里面多出了一个「下载当页」的按钮

img

点击一下你就会发现其将会在浏览器新窗口疯狂开图片,并调用浏览器进行下载

img

当然,放心,图片下载完之后其会自动关闭新窗口,不必你挨着挨着去关闭

阿虚实测下载到的也都是带EXIF信息的原图\

img

▍3 qq-zone(WIN)

Github地址:https://github.com/qinjintian/qq-zone

如果你访问Github困难,建议了解《2022 Github加速访问教程》

打开网页之后,点击Code,下载整个项目(如果你有学习阿虚上方的Github加速教程,才会有像下图一样的加速下载方式)

img

总之下载成功之后,运行作者已经帮我们编译好的qq-zone.exe,就会弹出下面这样一个窗口

img

根据提示依次通过键盘输入,关于下载并行数,100M的宽带作者建议设置为8-15/200M的宽带建议设置为16-30,这个根据自身的网络来进行设置

然后就是输入你需要下载的相册名了(一定要完全和空间里的对应上)

img

如果是下载自己空间里的相册,会在软件的目录里面生成一个qrcode.png二维码,点开它,用手机QQ扫码进行登录

img

然后很快就能下载完了

img

这款软件下载的.jpg格式的图片,下载后会被保存为.jfif格式,但图片的EXIF信息也是还在的\

▍4 QZAlbumTool (WIN)

Github地址:https://github.com/kahotv/QZAlbumTool

如果你访问Github困难,建议了解《2022 Github加速访问教程》

这款软件最后的更新时间在2019.11.03,但阿虚实测2022年依旧能用的,而且使用也属于是最简单的了

下载软件解压之后,双击目录中的QZAlbumTool.exe运行软件,然后扫码进行的登录

img

耐心等待其读取完相册之后,切换到相册选项卡,像下图一样选中你需要下载的相册,再点击导出选中即可

img

不过这款软件的下载效率有点低了(可能是代码没优化很好),总之就是下载的有点慢!

虽然需要耐心等待,不过下载到图片的都是带EXIF信息的原图\,这个是可以放心的

img

▍5 QQ空间(安卓/iOS)

官方的QQ空间APP其实也能批量下载带EXIF信息的照片原图\,不过被限制了一次性只能下载50张

img

APP可在各大应用商店或者官网直接下载:

http://z.qzone.com/download.htmlz.qzone.com/download.html

▍6 如果你会Python

如果你会用Python,也可以自己搭建相关运行环境,自己跑代码来使用以下项目:

  1. qzone-photo-downloader(需要搭配Chrome浏览器):https://github.com/dslwind/qzone-photo-downloader
  2. QQZone_AutoDownload_Album(需要搭配Firefox浏览器):https://gitee.com/songxf1024/QQZone_AutoDownload_Album
  3. QzoneExporter(需从浏览器获取cookies、tk值):https://github.com/wwwpf/QzoneExporter

但对于多数人,前文介绍的4款工具既方便又好用,这些Python项目就留给各位程序员去折腾吧

避免有些粉丝的确下载不来Github上的软件,本文提到的软件类工具阿虚都已经帮大家打包好了

点击这里即可下载

照片到是可以通过以上方法下载回来了,不过如果你还没有想好今后怎么备份相册的话,阿虚前不久才写了一篇7000字的长文,建议各位是可以去看一看的

为了寻找当下最好的照片备份方式,我写了7000字的长文…mp.weixin.qq.com/s/qiRu-tC_5kysQISgrv5xYwimg

本文转载自:https://zhuanlan.zhihu.com/p/340238253

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

1…121314…48

乱码三千

android程序员一枚,擅长java,kotlin,python,金融投资,欢迎交流~

479 日志
139 标签
RSS
© 2024 乱码三千
本站总访问量次
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4
0%