Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

希望大佬添加一下对alist播放视频的自动识别 #33

Closed
truewhile opened this issue Sep 12, 2024 · 18 comments
Closed

希望大佬添加一下对alist播放视频的自动识别 #33

truewhile opened this issue Sep 12, 2024 · 18 comments
Assignees
Labels
enhancement New feature or request

Comments

@truewhile
Copy link

alist播放视频格式比较固定,应该可以拿到播放视频的名称,希望大佬添加一下对alist视频播放的自动识别

@Mr-Quin Mr-Quin self-assigned this Sep 12, 2024
@Mr-Quin Mr-Quin added the enhancement New feature or request label Sep 12, 2024
@Mr-Quin
Copy link
Owner

Mr-Quin commented Sep 15, 2024

自动适配这块打算重做成基于自定义策略的,用户可用选择器编写策略来适配自己的网站

@truewhile
Copy link
Author

我看了一下这个class名称应该是固定的吧,让用户填写class名称去匹配播放文件名称是不是会比较好
image
image

@truewhile
Copy link
Author

我不是前端,我不知道,前端打包后某一代码块的class名称是不是一直保持不变,如果class是保持不变并且唯一的,那class名称去匹配是不是比较好

@Mr-Quin
Copy link
Owner

Mr-Quin commented Sep 15, 2024

class不一定是固定的,只用class的话不够普适
现在尝试的是XPath,可以覆盖class,id,tag

以AList举例
image
从这里可以提取XPath //*[@id="hope-select-cl-40-trigger"]/div获得文件名

然后再用regex从文件名提取标题,集数等信息。这个可能性太多了,得根据自己的文件命名规则来填
image

@Mr-Quin
Copy link
Owner

Mr-Quin commented Sep 18, 2024

v0.15.0中添加自定义适配,可以尝试以下

@Mr-Quin Mr-Quin closed this as completed Sep 18, 2024
@truewhile
Copy link
Author

v0.15.0中添加自定义适配,可以尝试以下
0.15.0好像构建失败了,这个标题识别是根据正则表达式吗?昨天晚上刚跟弹弹paly作者请教弹弹play是怎么识别的,到最后得出结论因为各翻译组命名格式都不一样,基本没办法用一个正则表达式去识别,只能针对某一个翻译组去做识别,或者是使用ai去做识别也行,弹弹play作者建议我直接调用他的开放接口根据文件名称去获取番剧信息,我感觉这块识别是不是直接调用弹弹play作者的接口比较好,用户会不会写正则表达式是一说,关键正则的匹配率也不高,不如直接调用弹弹play的开放接口识别率高,https://api.dandanplay.net/swagger/ui/index
,这个是弹弹play作者给我的接口文档里面的/api/v2/match接口感觉很适合这个场景,如果能获取播放视频元素的前16MB MD5数据识别率会高很多

@truewhile
Copy link
Author

<video id="myVideo" controls>
  <source src="your-video-file.mp4" type="video/mp4">
</video>

<script src="https://cdn.jsdelivr.net/npm/[email protected]/crypto-js.js"></script>

<script>
  async function getVideoMD5() {
    const video = document.getElementById('myVideo');
    const videoSrc = video.querySelector('source').src;

    // 获取视频文件的前16MB数据
    const response = await fetch(videoSrc);
    const reader = response.body.getReader();
    
    let receivedLength = 0; // 当前接收到的字节数
    let chunks = []; // 保存流的字节块
    let chunkSize = 16 * 1024 * 1024; // 16MB
    
    while (receivedLength < chunkSize) {
      const { done, value } = await reader.read();
      if (done) break;
      chunks.push(value);
      receivedLength += value.length;
    }

    // 组合所有片段
    const blob = new Blob(chunks);
    
    // 读取 Blob 内容为 ArrayBuffer
    const arrayBuffer = await blob.arrayBuffer();
    
    // 使用 CryptoJS 生成 MD5 哈希
    const wordArray = CryptoJS.lib.WordArray.create(arrayBuffer);
    const md5Hash = CryptoJS.MD5(wordArray).toString();
    
    console.log('MD5 Hash:', md5Hash);
  }

  // 监听页面加载完后调用
  document.addEventListener('DOMContentLoaded', getVideoMD5);
</script>

这个是chatgpt生成的获取video元素前16MB内容生成MD5的代码,大佬可以参考一下,我感觉还是使用获取哈希+标题去请求弹弹play的接口为主,手写正则表达式为辅比较好,用户手写正则表达式难度太大了

@Mr-Quin
Copy link
Owner

Mr-Quin commented Sep 19, 2024

构建显示失败是因为添加了新的权限所以商店要再审核

让用户写regex是有点难,但是我现在也想不到有什么更通用的办法。用一堆regex来提取标题什么的也不是没有,像这样https://github.com/Sonarr/Sonarr/blob/e6bd58453a532c137879c2b1a6a267dc4bf03828/src/NzbDrone.Core/Parser/Parser.cs#L20

弹弹Play有md5接口我是刚知道,这个可以研究下。但是毕竟这个插件不止支持弹弹play,其他源还是要靠关键词

我不清楚用这个插件的都是什么使用场景,我自己是Plex,Plex会对视频再次压制,而且视频标题也不会沿用文件名,而是根据tvdb等数据库重命名的。这种场景,还有比如Youtube之类的没有可用的文件名和哈希值的情况用弹弹Play的匹配也不一定效果很好。

Regex的匹配成功率的话,我自己这几天测试使用regex还没有出过问题,但是这个比较依赖标题的准确性。

现在的这个方案是最大化通用性,之后再对各个源单独做优化,比如md5。

单开了一个issue #35 追踪一下。可能可以做个开关让用户选择,我的理解能够使用md5的场景主要还是能够直接播放视频文件的情况,个人网盘之类的

@truewhile
Copy link
Author

构建显示失败是因为添加了新的权限所以商店要再审核

弹弹Play有md5接口我是刚知道,这个可以研究下。但是毕竟这个插件不止支持弹弹play,其他源还是要靠关键词

我不清楚用这个插件的都是什么使用场景,我自己是Plex,Plex会对视频再次压制所以md5应该是匹配不到的,而且视频标题什么也不会沿用文件名,而是的是根据tvdb等数据库重命名的,有时候和bangumi什么的也对应不上。

现在的这个方案是最大化通用性,之后再对各个源单独做优化,比如md5。

让用户写regex是有点难,但是我现在也想不到有什么更通用的办法。用一堆regex来提取标题什么的也不是没有,像这样 https://github.com/Sonarr/Sonarr/blob/e6bd58453a532c137879c2b1a6a267dc4bf03828/src/NzbDrone.Core/Parser/Parser.cs#L20

这正则表达式也太地狱了
image
我也是自己在写个小工具才去研究这个,我在写订阅ssr推送到115网盘离线下载的时候,想做个根据下载文件名称自动分类的功能,才研究这个东西,网上有人写了根据标题获取番剧名称的python库,但是识别率不是很高,昨天才去请教弹弹play的作者的,然后我那个是推送到115进行离线下载,md5的方案行不通,只能根据文件名去识别一下
image
正则表达式让chatgpt帮我写了写,发现效果最差就没深入研究了
image

@Mr-Quin
Copy link
Owner

Mr-Quin commented Sep 19, 2024

这个Sonarr我也在用,他就是用这些regex来识别番剧名然后再和数据库匹配,识别率还是不错的,很少碰到问题。其实如果视频来源比较固定,命名比较规则,regex应该还是可以的。我因为工作关系经常写,所以还好。网上有很多regex生成器也可以试试。

@truewhile
Copy link
Author

plex,emby这些都没办法挂载网盘资源或者webdav资源,不然我也用了,我现在已经不想下载到本地看了,我弄监听rss推送115就是准备后面不下载到本地看了,组nas的用 plex,emby的比较多,我感觉还是网盘比较好用,一些旧的种子什么的本地根本下不动,除非玩pt有人保种,不用emby或者plex这种工具就会导致文件名全是字幕组定义好的,一家一个命名规则,难顶

@Mr-Quin
Copy link
Owner

Mr-Quin commented Sep 19, 2024

我看了一下,弹弹play的match api好像只提供文件名也可以匹配
从网页上计算哈希值和获取文件大小还是太复杂了,先从文件名开始吧
#35 追踪

@truewhile
Copy link
Author

我看了一下,弹弹play的match api好像只提供文件名也可以匹配 从网页上计算哈希值和获取文件大小还是太复杂了,先从文件名开始吧 #35 追踪

对,但是哈希值是必填的,可以去md5网站随便生成一个哈希值就行,用文件名称匹配准确率还行
image

@truewhile
Copy link
Author

image
没有保存按钮,无法固定住,出去查个东西写的东西就没了然后所有东西都要充头开始配

@Mr-Quin
Copy link
Owner

Mr-Quin commented Sep 19, 2024

啊这
PoFacepalmGIF

保存在右上角
image
我一直用的深色模式没发现这个问题

@Mr-Quin
Copy link
Owner

Mr-Quin commented Sep 19, 2024

开了 #36

@truewhile
Copy link
Author

笑死我了,不过正则表达式真的写不来,我把你写的那个事例给chatgpt让它帮我写,它写出来的基本就没法用,[SZW] Strike the Blood TV13 [BDRpi][1080P][x.264 AAC][CHS-IN].mp4,这个我折腾半天,都没弄好,有个弄好了识别的是英文,也没出来结果

@Mr-Quin
Copy link
Owner

Mr-Quin commented Sep 19, 2024

这个可以用
^\[(?<subgroup>[^\]]+)\](?<title>[^\]]+?) TV(?<episode>\d+) \[.*
不过regex可能确实有点难度

Repository owner locked and limited conversation to collaborators Sep 19, 2024
@Mr-Quin Mr-Quin converted this issue into discussion #38 Sep 19, 2024

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants