Skip to content
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

[Bug] 重新整理EMBY数据库以后,还是会生成多个同样的演员,导致无法合并 #393

Open
3 tasks done
ddddalex opened this issue Sep 20, 2024 · 23 comments

Comments

@ddddalex
Copy link

Verify steps

  • Is this something you can debug and fix? Send a pull request! Bug fixes and documentation fixes are welcome.
  • I have read the Wiki, especially the FAQ page.
  • I have searched on the issue tracker for a related issue.

MetaTube Plugin Version

2024.612.210.0

MetaTube Server Version

2024.612.210.0

What OS are you seeing the problem on?

Linux, Other

Description

我把整个媒体库做了全部重新更新,但是还是偶尔会生成同样的演员,导致同名演员在EMBY内有十几个,影片就分散的分布在这十几个演员的二级菜单内,请问有没有办法对演员数据进行整理或者合并操作
屏幕截图 2024-09-20 114403

MetaTube Server

No response

Jellyfin/Emby Logs

No response

MetaTube Server Logs

No response

How to Reproduce

No response

@xjasonlyu
Copy link
Contributor

你的后端版本是多少?不知道你的重新更新指的是啥

@ddddalex
Copy link
Author

后端是dockerhub的最新版,重新更新就是在EMBY里面把所有媒体库移除了重新再加入了一遍,也就是重新刮削了一遍。因为文件太多,所以分了十来个媒体库

@xjasonlyu
Copy link
Contributor

我不确定十来个媒体库会不会是导致有多个演员重复的原因… 这个问题我之前修复过了,至少现在一个媒体库的话是没问题的。

@jpsn123
Copy link

jpsn123 commented Sep 21, 2024

@xjasonlyu 一个媒体库任然会出现,感觉是在插入新媒体时搜索演员那一步导致的,爬取的演员名字代空格然后没有搜索到后新建了一个演员

@ddddalex
Copy link
Author

ddddalex commented Oct 8, 2024

更新到新后端和插件最新版本了,依旧是这样的情况,能否增加一个演员数据库的重新整理功能?

@huanggs
Copy link

huanggs commented Oct 9, 2024

同样的问题,这个太影响使用了,束手无策。

@cyanbees
Copy link

同样问题,一个演员重复生成,还无法整合或删除

@ddddalex
Copy link
Author

各种尝试还是不行,这个数据库问题,还有办法解决吗?或者能否增加一个数据库整理功能,我估计是演员名字空格的问题,导致反复生成相同演员,试过调整metaID也没法合并在一起 @xjasonlyu

@xjasonlyu
Copy link
Contributor

感觉是新版emby的问题,暂时好像也没有特别好的解决方案,我用4.8似乎没有这个问题。

@huanggs
Copy link

huanggs commented Oct 16, 2024

感觉是新版emby的问题,暂时好像也没有特别好的解决方案,我用4.8似乎没有这个问题。

我新建了一个docker,版本是4.8.0.80,用3个视频测试(同一个演员),还是有这个问题。
演员的信息不一致,其中一个有详细的身高等。
因此判断可能是从不同的数据源网站重复采集导致了这个问题。
希望作者能关注下。

@xjasonlyu
Copy link
Contributor

感觉是新版emby的问题,暂时好像也没有特别好的解决方案,我用4.8似乎没有这个问题。

我新建了一个docker,版本是4.8.0.80,用3个视频测试(同一个演员),还是有这个问题。 演员的信息不一致,其中一个有详细的身高等。 因此判断可能是从不同的数据源网站重复采集导致了这个问题。 希望作者能关注下。

你后端版本是啥,这个问题一直有人提,但我修了两次我自己的没问题了,不知道咋回事。

@huanggs
Copy link

huanggs commented Oct 16, 2024

感觉是新版emby的问题,暂时好像也没有特别好的解决方案,我用4.8似乎没有这个问题。

我新建了一个docker,版本是4.8.0.80,用3个视频测试(同一个演员),还是有这个问题。 演员的信息不一致,其中一个有详细的身高等。 因此判断可能是从不同的数据源网站重复采集导致了这个问题。 希望作者能关注下。

你后端版本是啥,这个问题一直有人提,但我修了两次我自己的没问题了,不知道咋回事。

Metatube:2024.612.210.0
Metatube-Server:v1.2.7-43f17e0

@huanggs
Copy link

huanggs commented Oct 16, 2024

演员左下角的链接不一样:
影视数据库链接:http://10.0.0.102:8080/?redirect=AV-LEAGUE:7113
影视数据库链接:http://10.0.0.102:8080/?redirect=GFriends:%E7%9E%B3%E3%83%AA%E3%83%A7%E3%82%A6

@jpsn123
Copy link

jpsn123 commented Oct 18, 2024

提供一个脚本,可以自动清理无效的数据和metadata,清理时服务emby需要停止

set -e

## change me
EMBY_DATA_PATH='/mnt/fast/k8s/pvc-emby-emby-config'

## delete unused actors
sqlite3 $EMBY_DATA_PATH/data/library.db " \
    delete from fts_search9_content where id in (select id from mediaitems where type=23 except select personid from itempeople2); \
    delete from fts_search9_docsize where id in (select id from mediaitems where type=23 except select personid from itempeople2); \
    delete from itemlinks2 where linkedid in (select id from mediaitems where type=23 except select personid from itempeople2); \
    delete from itemlinks2 where itemid in (select id from mediaitems where type=23 except select personid from itempeople2); \
    delete from mediastreams2 where itemid in (select id from mediaitems where type=23 except select personid from itempeople2); \
    delete from userdatas where userdatakeyid in (select userdatakeyid from mediaitems where id in (select id from mediaitems where type=23 except select personid from itempeople2)); \
    delete from mediaitems where id in (select id from mediaitems where type=23 except select personid from itempeople2); \
    "
    
## cleanup database
sqlite3 $EMBY_DATA_PATH/data/library.db " \
    delete from userdatas where userdatakeyid in (select id from userdatakeys2 except select userdatakeyid from mediaitems); \
    delete from userdatakeys2 where id in (select id from userdatakeys2 except select userdatakeyid from mediaitems); \
    "

## delete unsed actors metadata
rm /tmp/A -rf
rm /tmp/B -rf
rm /tmp/C -rf
sqlite3 $EMBY_DATA_PATH/data/library.db \
    "select images from mediaitems where type=23 and images is not null;" | grep %MetadataPath%/people/ | sed "s#%MetadataPath%/people/##g" | sed "s#/folder.*##g" > /tmp/A
ls -A1 $EMBY_DATA_PATH/metadata/people/ > /tmp/B
cat /tmp/A /tmp/B | sort | uniq -u > /tmp/C
while IFS= read -r line; do
    echo -e "\033[33m   delete actor metadata files: $line  \033[0m"
    rm -rf -- "$EMBY_DATA_PATH/metadata/people/$line"
done < /tmp/C

## delete unsed tags metadata
rm /tmp/A -rf
rm /tmp/B -rf
rm /tmp/C -rf
sqlite3 $EMBY_DATA_PATH/data/library.db \
    "select images from mediaitems where type=34;" | grep tags | sed "s#%MetadataPath%/tags/##g" | sed "s#/auto_poster_.*##g" > /tmp/A
ls -A1 $EMBY_DATA_PATH/metadata/tags/ > /tmp/B
cat /tmp/A /tmp/B | sort | uniq -u > /tmp/C
while IFS= read -r line; do
    echo -e "\033[33m   delete tags metadata files: $line  \033[0m"
    rm -rf -- "$EMBY_DATA_PATH/metadata/tags/$line"
done < /tmp/C

## delete unsed genres metadata
rm /tmp/A -rf
rm /tmp/B -rf
rm /tmp/C -rf
sqlite3 $EMBY_DATA_PATH/data/library.db \
    "select images from mediaitems where type=21;" | grep genres | sed "s#%MetadataPath%/genres/##g" | sed "s#/auto_poster_.*##g" > /tmp/A
ls -A1 $EMBY_DATA_PATH/metadata/genres/ > /tmp/B
cat /tmp/A /tmp/B | sort | uniq -u > /tmp/C
while IFS= read -r line; do
    echo -e "\033[33m   delete genres metadata files: $line  \033[0m"
    rm -rf -- "$EMBY_DATA_PATH/metadata/genres/$line"
done < /tmp/C

## only reserve latest poster
for i in $EMBY_DATA_PATH/metadata/library/*/*; do
    ls -A1t -- "$i" | grep auto_poster |tail +2 > /tmp/D
    while IFS= read -r line; do
        echo -e "\033[33m   delete auto post: $i/$line  \033[0m"
        rm -rf -- "$i/$line"
    done < /tmp/D
done

for i in $EMBY_DATA_PATH/metadata/tags/*; do
    ls -A1t -- "$i" | tail +2 > /tmp/D
    while IFS= read -r line; do
        echo -e "\033[33m   delete auto post: $i/$line  \033[0m"
        rm -rf -- "$i/$line"
    done < /tmp/D
done

for i in $EMBY_DATA_PATH/metadata/genres/*; do
    ls -A1t -- "$i" | tail +2 > /tmp/D
    while IFS= read -r line; do
        echo -e "\033[33m   delete auto post: $i/$line  \033[0m"
        rm -rf -- "$i/$line"
    done < /tmp/D
done

## show duplicate actor 
echo -e "\033[31m   Show duplicate actor  \033[0m"
sqlite3 $EMBY_DATA_PATH/data/library.db "select name from mediaitems where type=23;" | sort | uniq -d
echo -e "\033[31m   --------------------  \033[0m"

## show no actor  video
echo -e "\033[31m   Show video no actor  \033[0m"
sqlite3 $EMBY_DATA_PATH/data/library.db "select name from mediaitems where id in (select id from mediaitems where type=5 except select itemid from itempeople2);" | sort
echo -e "\033[31m   --------------------  \033[0m"

@cyanbees
Copy link

上面的脚本无效呢,还会导致原有的演员图片全部裂开

@cyanbees
Copy link

image
emby版本是4.8.8,一直有这个问题,不知道是后端原因,还是插件原因

@jpsn123
Copy link

jpsn123 commented Oct 21, 2024

上面的脚本无效呢,还会导致原有的演员图片全部裂开

因为你每个演员下面都有媒体条目,只能删除没有被任何媒体引用的冗余演员,你需要刷新元数据,把媒体归类到一个演员ID下

@huanggs
Copy link

huanggs commented Oct 23, 2024

受不了了,感觉整个库都废了。

@jpsn123
Copy link

jpsn123 commented Oct 25, 2024

@huanggs 别慌,这个问题发生概率毕竟不大,出现这个问题就手动处理一下。流程:
开始前前最好备份你的库

  1. 正常关闭EMBY,数据目录提取出library.db数据库,确保没有library.db-wal文件
  2. 用你喜欢的方式操作数据库,删除以fts_search9开头的所有表,在把library.db覆盖回去,开启emby,测试搜索是否正常
  3. 再把重复演员的媒体全部重新刷新元数据,确保相同演员的媒体只在一个演员的二级菜单下,其他相同演员的二级菜单都是空
  4. 正常关闭emby,运行上面脚本,运行前修改你的库目录,尽量看一下脚本的意思,其实很简单,就是提示你哪些重复演员,哪些没有演员,然后删除无用元数据(数据库信息和图片)
  5. 开启emby,检查重复是否消失,如果上一步脚本还提示有更多重复演员,继续3步骤

补充一下:我的版本是4.9.0.28,没有测试其他版本

@cyanbees
Copy link

万分感谢,楼上说的办法可用

@ddddalex
Copy link
Author

难度有点高,还是放弃了,看看作者会不会把这个问题解决了,我再重新更新整个数据库吧。可能有数千部影片,担心整个爆炸了

@ddddalex
Copy link
Author

或许找到解决方式了,docker部署后端的时候添加一条环境变量,export MT_ACTOR_PROVIDER_PRIORITY_AV-LEAGUE=1000 让刮削演员的源调整为AV-LEAGUE优先,目前整理了100部左右,会将所有的演员信息优先从AV-LEAGUE刮削,这样就不会产生多个源的演员了,不过还在测试中,大家稍等我消息

@ddddalex
Copy link
Author

@xjasonlyu 按以上方法基本解决,希望能在插件设置页面上也设置演员元信息刮削源优先级的设置选项,方便使用。谢谢作者

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants