96 lines
2.3 KiB
Markdown
96 lines
2.3 KiB
Markdown
---
|
|
name: "jellyfin-nfo-builder"
|
|
description: "为剧集整理统一文件名、生成缺失的 Jellyfin .nfo 剧集元数据"
|
|
status: proposal
|
|
version: "v1"
|
|
date: "2026-07-01T23:52:24.406Z"
|
|
---
|
|
|
|
# Jellyfin NFO 剧集元数据补齐技能
|
|
|
|
为剧集目录整理统一文件名,并为缺失的集数生成标准的 Jellyfin `.nfo` 元数据文件。
|
|
|
|
## 适用场景
|
|
|
|
- 手动清理/重命名剧集文件后,部分集数的 `.nfo` 元数据缺失
|
|
- 从不同来源合并剧集(高质量版 + 补全集),需要统一格式
|
|
- 批量标准化剧集视频文件和元数据
|
|
|
|
## 前置条件
|
|
|
|
- 视频文件已整理到一个目录
|
|
- 有一条完整的剧集(有 `.nfo` 示例可参照格式)
|
|
- 了解剧集的总集数
|
|
- shell 工作目录为剧集所在目录
|
|
|
|
## 步骤
|
|
|
|
### 1. 检查现有状态
|
|
|
|
列出目录下所有视频文件和 `.nfo` 文件:
|
|
|
|
```bash
|
|
ls -lh *.mp4 *.nfo 2>/dev/null
|
|
```
|
|
|
|
确定:
|
|
- 总集数
|
|
- 已有哪些集的 `.nfo`
|
|
- 哪些集缺失 `.nfo`
|
|
- 文件名是否统一
|
|
|
|
### 2. 读取一个已有 `.nfo` 作为模板
|
|
|
|
```bash
|
|
cat "剧集名 第xx集.nfo"
|
|
```
|
|
|
|
标准 Jellyfin 剧集 nfo 格式:
|
|
|
|
```xml
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<episodedetails>
|
|
<title>第N集</title>
|
|
<season>1</season>
|
|
<episode>N</episode>
|
|
<plot>剧集名 第N集</plot>
|
|
<runtime>233</runtime>
|
|
<aired>2026-01-01</aired>
|
|
</episodedetails>
|
|
```
|
|
|
|
### 3. 生成缺失的 `.nfo`
|
|
|
|
```bash
|
|
cd /path/to/剧集目录
|
|
for i in 4 5 8 9 10 11; do
|
|
cat > "剧集名 第${i}集.nfo" << EOF
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<episodedetails>
|
|
<title>第${i}集</title>
|
|
<season>1</season>
|
|
<episode>${i}</episode>
|
|
<plot>剧集名 第${i}集</plot>
|
|
<runtime>233</runtime>
|
|
<aired>2026-01-01</aired>
|
|
</episodedetails>
|
|
EOF
|
|
done
|
|
```
|
|
|
|
> `runtime`(时长秒数)和 `aired`(首播日期)可以参照已有文件填写,或设为默认值。
|
|
|
|
### 4. 检查结果
|
|
|
|
```bash
|
|
ls -lh *.mp4 *.nfo 2>/dev/null
|
|
```
|
|
|
|
确认每一集都有对应的视频文件和 `.nfo` 文件。
|
|
|
|
## 注意事项
|
|
|
|
- Jellyfin 依赖文件名排序,统一格式为 `剧集名 第XX集.mp4`(两位数字,按字母排序正确)
|
|
- `.nfo` 中的 `<episode>` 标签必须与集数一致
|
|
- 如果整个剧集目录还没有 `tvshow.nfo` 和 `season.nfo`,也需要一并创建
|
|
- 视频文件命名应与 `.nfo` 文件名完全一致(仅扩展名不同) |