story(vol04): 完成69至88章与第四卷阅读包
This commit is contained in:
@@ -18,6 +18,8 @@ python tools/build-reading-editions.py --date 2026-10-30
|
||||
|
||||
从逐章稿生成前三卷68章合订本、第三卷20章完整阅读本,保留前30章节选、前48章合订本和第二卷24章阅读本的原范围;从现行12集阅读稿生成动画合订本。同步EP02—12逐集与总录制表,并核对Fountain和阅读稿的台词顺序与内容。保留已有录制状态、配音身份、选定take、实测时长和旧台词ID;新ID从源稿读取。修订应先改源稿,合订本可重建。
|
||||
|
||||
第四卷已有69—88章时,默认流程也汇集前四卷88章与第四卷独立阅读本。只续写小说时运行`python tools/build-reading-editions.py --date 2026-10-31 --novel-only`,仅生成这两份新范围阅读本,保留旧范围版本,并跳过所有影像剧本、录制表与声音资料的写入。
|
||||
|
||||
## 图片素材站导出
|
||||
|
||||
```powershell
|
||||
|
||||
@@ -222,16 +222,45 @@ def build_novel_edition(chapters, destination, title, scope, edition_date):
|
||||
parts.append('# 第二卷 黑腹热')
|
||||
elif path.name.startswith('49_'):
|
||||
parts.append('# 第三卷 无神罚的异端')
|
||||
elif path.name.startswith('69_'):
|
||||
parts.append('# 第四卷 无证人的长路')
|
||||
parts.append(re.sub(r'^(#+) ', r'\1# ', source, flags=re.M).rstrip())
|
||||
write(destination, '\n\n'.join(parts) + '\n')
|
||||
return count
|
||||
|
||||
|
||||
def build_four_volume_editions(edition_date):
|
||||
"""只汇集小说,不改动漫源稿、配音表或此前范围固定的阅读本。"""
|
||||
chapters = []
|
||||
for volume in ('第一卷', '第二卷', '第三卷', '第四卷'):
|
||||
chapters.extend(sorted((NOVEL / '03_正文' / volume).glob('[0-9][0-9]_*.md')))
|
||||
if [int(p.name[:2]) for p in chapters] != list(range(89)):
|
||||
raise ValueError('四卷应为序章00和正文01—88,无缺号或重复')
|
||||
fourth = [p for p in chapters if 69 <= int(p.name[:2]) <= 88]
|
||||
combined = NOVEL / '前88章_阅读合订本.md'
|
||||
fourth_out = NOVEL / '第四卷_无证人的长路_阅读合订本.md'
|
||||
full_count = build_novel_edition(chapters, combined,
|
||||
'《寂静诸神:炉火》前四卷阅读合订本',
|
||||
'独立序章+正文1—88章;前两卷各24章,第三、四卷各20章完整初稿', edition_date)
|
||||
fourth_count = build_novel_edition(fourth, fourth_out,
|
||||
'第四卷《无证人的长路》阅读合订本',
|
||||
'总第69—88章,共20章;873春末—874初秋,埃利安18→19岁', edition_date)
|
||||
print(f'小说88章+序章;约{full_count:,}汉字;第四卷20章约{fourth_count:,}汉字(含标题)')
|
||||
print(combined)
|
||||
print(fourth_out)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--date', required=True)
|
||||
parser.add_argument('--refresh-reading', help='由Fountain重建指定分集阅读稿,如S01E04;同时更新该集前置动作提示')
|
||||
parser.add_argument('--novel-only', action='store_true', help='只汇集当前前四卷阅读本,不更新影像剧本与录制资料')
|
||||
args = parser.parse_args()
|
||||
if args.novel_only:
|
||||
if args.refresh_reading:
|
||||
parser.error('--novel-only不能与--refresh-reading同时使用')
|
||||
build_four_volume_editions(args.date)
|
||||
return
|
||||
global_path = EPISODES / '全季_台词与录制总表.tsv'
|
||||
global_fields, global_rows = read_table(global_path)
|
||||
previous_global = {row['台词ID']: row for row in global_rows}
|
||||
@@ -316,7 +345,9 @@ def main():
|
||||
source = rebase_markdown(read(path), path, script_out)
|
||||
parts.extend(['\n---\n', re.sub(r'^(#+) ', r'\1# ', source, flags=re.M).rstrip()])
|
||||
write(script_out, '\n\n'.join(parts) + '\n')
|
||||
print(f'正文:68章+序章;汉字约{novel_cjk:,};第三卷20章约{volume_cjk:,}汉字(含标题及原有稿次说明)')
|
||||
print(f'前三卷固定范围:68章+序章;汉字约{novel_cjk:,};第三卷20章约{volume_cjk:,}汉字(含标题及原有稿次说明)')
|
||||
if (NOVEL / '03_正文/第四卷/88_只到中立站.md').is_file():
|
||||
build_four_volume_editions(args.date)
|
||||
print(f'EP02—12录制台词:{len(all_rows)};各集:{episode_counts}')
|
||||
print('已核对11集Fountain与阅读稿台词逐条一致。')
|
||||
print(full_out)
|
||||
|
||||
@@ -309,6 +309,17 @@ $thirdOutlineIds = @([regex]::Matches($thirdOutline, '(?m)^\| (\d+) \|') | ForEa
|
||||
if (($thirdOutlineIds -join ',') -ne ($thirdVolumeIds -join ',')) {
|
||||
$failures.Add('Volume three chapter outline and prose IDs differ')
|
||||
}
|
||||
$fourthVolumeIds = @($novelFiles | Where-Object { $_.Directory.Name -eq '第四卷' } | ForEach-Object { [int]$_.Name.Substring(0, 2) } | Sort-Object)
|
||||
if ($fourthVolumeIds.Count -gt 0) {
|
||||
if (($fourthVolumeIds -join ',') -ne ((69..88) -join ',')) {
|
||||
$failures.Add('Completed volume four must contain chapters 69-88')
|
||||
}
|
||||
$fourthOutline = Read-ProjectText '05_小说创作/02_章节大纲/第四卷_章节大纲.md'
|
||||
$fourthOutlineIds = @([regex]::Matches($fourthOutline, '(?m)^\| (\d+) \|') | ForEach-Object { [int]$_.Groups[1].Value })
|
||||
if (($fourthOutlineIds -join ',') -ne ($fourthVolumeIds -join ',')) {
|
||||
$failures.Add('Volume four chapter outline and prose IDs differ')
|
||||
}
|
||||
}
|
||||
foreach ($legacy in @(
|
||||
'06_AI动漫制作/03_分镜与镜头/01_镜头表/S01E01_SC12_75秒试片镜头表.md',
|
||||
'06_AI动漫制作/04_生成方案/01_图像提示词/S01E01_SC12_关键帧提示词.md',
|
||||
|
||||
Reference in New Issue
Block a user