拓冰建站拓冰建站
首页 / 资讯中心 / 正文

AI漫剧制作全流程:从剧本分镜到人物一致的工业化工作流

AI漫剧是最近两年内容制作领域快速上升的方向它把剧本创作、分镜设计、画面生成、配音和剪辑压缩到一个人可以完成的连续流程中。对零基础创作者来说难点往往不在某个具体工具而在整个生产链路没有建立起来剧本写完了不知道拆成几个镜头画面生成后人物长得不一样配音和镜头时长对不上最后只能用很粗糙的方式剪成视频。这套 AI 漫剧制作教程的核心目标是帮你在尽量短的时间里跑通一条完整生产链路剧本、分镜、角色设定、画面生成、图生视频、配音、剪辑合成并在每个环节设置验收标准。学完后你能独立产出一个三镜头短片并知道如何把同一套流程扩展到多集作品。文章以通用工作流和本地可运行脚本为例不绑定某一款具体软件版本真正落地前要确认依赖版本、模型授权和平台发布规则。1. 先理解 AI 漫剧的完整生产链路再开始选工具1.1 AI漫剧不是黑魔法而是一条工业化内容流水线传统动画短剧需要编剧、分镜师、原画师、动画师、配音演员和剪辑师协作真人短剧则需要演员、场地、摄影和后期团队。AI 漫剧的差别在于画面主体由 AI 生成创作者通过提示词、参考图和参数控制画面质量人的工作重心从“绘制每一帧”转向“设计角色、维护一致性、组织叙事和后期合成”。从技术链路看AI 漫剧可以拆成四个核心阶段文本层剧本、台词、旁白、镜头描述。图像层角色设定图、场景图、分镜图。视频层把静态关键帧变成短时动态视频。后置层配音、音效、字幕、剪辑、封面和发布。每一层都有独立工具但层与层之间通过素材文件连接。很多人学 AI 漫剧时只盯着“生成画面好不好看”忽略了素材命名、参数记录和角色设定结果剪片子时发现镜头之间角色不一致只能返工。真正合规且可复用的生产方式是把 AI 生成当成一条流水线而不是一次性碰运气。三类漫剧内容生产方式对比如下对比维度传统动画短剧真人短剧AI漫剧制作周期长按集制作中等拍摄和剪辑为主单集短但前期试错成本不低主要成本人工绘画、建模、动画演员、场地、设备、后期工具费用、算力、时间画面一致性靠美术设定和原画规范靠同一个真人演员最大难点需要专门控制适合人群专业动画团队有出镜和拍摄条件的人个人创作者、技术型创作者主要瓶颈产能和人力成本拍摄成本和合规风险角色一致性、视频稳定性和原创性1.2 零基础优先跑通最小闭环而不是追求最高端工具AI 漫剧制作教程里最常见的误区是一开始就安装五六个工具做很长的角色训练最后连一条完整短片都没产出来。更稳妥的做法是先用“最小闭环”验证流程写一个三句话的故事。把故事拆成三个镜头。固定一个角色描述词。生成角色的第一张参考图。用参考图和固定描述词生成其他镜头。把每张关键帧变成 3 到 5 秒视频。配上一段台词或旁白。合成并输出一个短视频。每个步骤都要有可检查的结果。故事没拆出镜头就先不生成画面角色第一张参考图五官不清晰就不要急着做后面的镜头视频片段不连贯就先调运动幅度而不是堆滤镜。最小闭环跑通之后再引入 LoRA、ControlNet 或批处理工作流都不迟。1.3 用素材目录和命名规范建立“数字工作台”AI 漫剧会产生大量中间文件参考图、不同种子下的生成图、视频片段、音频、字幕和工程文件。如果没有统一目录两三天后就会开始找不到素材。建议从一开始就建立这样的目录ai_manju/ ├── 00_scripts/ │ ├── 01_story/ │ ├── 02_screenplay/ │ ├── 03_character/ │ ├── 04_scene/ │ ├── 05_video/ │ ├── 06_audio/ │ └── 07_export/ ├── assets/ │ ├── character/ │ │ ├── lead_ref.png │ │ └── lead_lora.safetensors │ ├── scene/ │ │ └── convenience_store.png │ ├── soundtrack/ │ └── fonts/ ├── outputs/ └── worktools/ └── concat.txt文件命名可以参考下面的规则S01E01_SHOT001_CHAR_LEAD_SEED8888.png S01E01_SHOT002_CHAR_LEAD_SEED8888.png S01E01_SHOT001_AUDIO_LINE.mp3命名里包含集数、镜头号、角色、种子或版本信息目的是让每次生成结果都能回溯。比记住“哪个图好看”更重要的是知道“这张图是用什么提示词、什么种子、什么参考图生成的”。生产环境建议把提示词、种子、模型信息一起写入一个 JSON 元数据文件把它当作镜头素材的身份证。2. 环境准备与工具选型以人物一致性为核心2.1 先分清学习环境与批量生产环境AI 漫剧涉及的图像生成和视频生成都比较吃算力。零基础学习阶段可以先在普通电脑上验证流程但批量生产阶段要考虑显卡资源、云服务、存储和备份。两种环境的差异如下环境推荐配置适合任务注意事项学习环境8GB 以上显存或使用在线工具跑通三镜头短片验证提示词和流程本地推理慢就降低分辨率先看效果开发环境本地 GPU 或云 GPU 实例反复调试提示词、模型参数记录每次实验的参数避免乱调生产环境云 GPU、批量队列、对象存储批量化生成镜头素材需要备份、日志、命名规范和版本控制如果是本地 Python 环境可以先用 conda 创建独立环境conda create -n ai-manju python3.10 conda activate ai-manju pip install diffusers transformers accelerate pillow上面的命令只是基础依赖。实际使用开源图像生成项目时还需要安装对应框架的 WebUI 或 ComfyUI 依赖例如“controlnet”相关插件。安装前先确认 Python 版本和 CUDA 版本是否匹配不要直接复制别人的环境配置。2.2 图像生成环节文生图、图生图和参考图工作流图像生成是 AI 漫剧的地基。常用形式有两类一类是在线生成服务优点是上手快适合验证风格另一类是本地开源部署优点是可控性强可以接入 ControlNet、LoRA 等一致性方案。实际项目可以根据自己的机器条件选择工具类型常见形式适合场景一致性能力在线一站式生成网页端或 App快速出图、确定画风依赖平台功能本地 WebUI开源项目单张精修、图生图可接入参考图插件节点式工作流ComfyUI 类批量生成、复杂流程可以保存完整工作流API 调用云服务自动化生产需要自己维护参数在 AI 漫剧项目中不建议只依赖纯文生图。因为文生图每次生成的随机性很大几乎无法保证同一个角色在不同镜头里长相一致。更有效的起点是先生成一张角色参考图再通过“图生图”和“参考图”机制让后续镜头靠近它。2.3 视频生成环节图生视频与首尾帧把静态画面变成动态视频是 AI 漫剧区别于 AI 绘图的关键。主流的做法是“图生视频”也就是输入一张关键帧让模型生成一段两三秒到五六秒的动态片段。核心参数包括时长、帧率、运动幅度、种子和是否使用首尾帧。参数作用建议时长控制视频长度单个镜头先从 3 到 5 秒开始帧率影响流畅度学习阶段 24 帧即可运动幅度控制画面变化强度先低后高避免主体崩坏首尾帧锁定起始和结束画面做转场和循环时效果更稳定种子控制随机噪声记录种子便于复现和对比这里要强调一个常见坑图生视频并不是分辨率越高越好。高分辨率会明显增加等待时间和显存压力最终压缩发布时也不一定能看出差别。学习阶段建议输出 720p 或 1080p 的短片段先保证运动的稳定性和人物一致性再考虑画质。2.4 配音与剪辑环节先定时间轴再做高质量合成配音可以分成两类真人录音和 AI 合成。AI 漫剧通常使用 TTS 工具来生成旁白或角色台词。命令行工具可以很容易接入批处理流程例如edge-tts --voice zh-CN-XiaoxiaoNeural \ --text 这个包裹不是今天的。 \ --write-media shot_002.mp3这个命令会生成一条台词音频。实际使用时要根据角色人设选择合适的音色还要控制语速和情绪。配音不要等到所有视频都合成完再做建议先确定每个镜头的时长再生成对应长度的台词避免后续反复对齐。剪辑环节可以用剪映、CapCut、DaVinci Resolve 等非线性编辑器也可以直接用 FFmpeg 做批量合成。对于追求效率和可控性的作者FFmpeg 脚本非常适合处理“大量镜头片段拼接”的场景。2.5 为什么人物一致性是 AI 漫剧的最难点真人短剧里演员是物理存在的摄像机无论怎么换都能拍同一个人。AI 漫剧没有这个物理约束每个镜头都是独立生成随机性很强。想让角色跨镜头保持统一需要叠加以下几层控制固定角色描述词不随意改动关键词顺序。建立角色参考图作为图生图和参考图模型的输入。使用 ControlNet 约束姿势和构图。训练 LoRA 作为角色底模。固定种子和采样参数减少随机波动。这五层方案可以组合使用而不是只选其中一层。下面章节会围绕这套组合方式展开一个完整的三镜头实践。3. 手把手完成一个三镜头 AI 漫剧片段3.1 第一步写一个只需要三句话的剧本零基础做 AI 漫剧第一版剧本不要写长。三句话意味着三个镜头便于验证流程。以“便利店奇怪包裹”为例{ project: three-shot-demo, character: LEAD, story: 深夜便利店店员收到一个没有寄件人的包裹。, shots: [ { id: 1, scene: 便利店外部, content: 镜头推向便利店门口雨夜路灯亮着。, dialogue: }, { id: 2, scene: 便利店收银台, content: 店员拿起包裹表情疑惑。, dialogue: 这个包裹不是今天的。 }, { id: 3, scene: 便利店门口, content: 店员推开门望向雨夜中的街道。, dialogue: 到底是谁寄来的 } ] }这段 JSON 可以不作为程序输入但它能帮你把“故事”变成可执行的“镜头清单”。写剧本时要注意不要写“一个人心情很复杂”这种无法在单帧画面里表达的内容而要写“他盯着包裹三秒钟手指停在快递单上”这种能被画面捕捉的动作。3.2 第二步把剧本转成分镜表分镜表是连接剧本和 AI 提示词的桥梁。它需要包含镜头号、景别、画面内容、台词、情绪、预估时长和 AI 提示词。镜头号景别画面内容台词情绪预估时长AI 提示词1全景雨夜便利店门口无神秘4 秒convenience store exterior, rainy night, neon sign2特写收银台上的包裹和店员的手这个包裹不是今天的。疑惑5 秒cashier counter, close-up, brown package, hand3中景店员站在门口看向街道到底是谁寄来的紧张5 秒young clerk at door, looking outside, rainy street分镜表写好后每个镜头的画面描述都要尽量具体。不要写“好看的夜店”要写“便利店的蓝色霓虹灯在湿漉漉的地面反射”。AI 生成时提示词越能描述构图、光影和环境细节画面越接近你想要的结果。3.3 第三步生成角色设定图与第一个关键帧角色设定图是人物一致性的起点。提示词可以按这个公式组织主体特征 动作 环境 风格 光影 质量词以“店员”为例1boy, 20 years old, black hair, brown eyes, navy blue convenience store uniform, holding a brown package, cashier counter, night lighting, anime style, masterpiece, best quality负面提示词建议固定为lowres, bad anatomy, bad hands, extra fingers, blurry, watermark, text第一次生成时不要一次生成十几张。先用同一提示词生成 4 到 6 张选一张五官清晰、服装符合设定的图作为参考图。把参考图保存到assets/character/lead_ref.png并记录它对应的参数。后面所有镜头都要围绕这张参考图进行图生图或参考图控制。这里最常见的坑是“每个镜头都重新写提示词关键词顺序和细节随意变化”。例如一个镜头写black hair另一个镜头写dark hair模型就会认为这是两个角色。建议把角色固定描述词复制到每个镜头提示词的固定位置。3.4 第四步让静态画面动起来用第一张关键帧做图生视频输入参数可以这样设置时长4 秒。帧率24。运动幅度低或中。种子固定为生成原图时记录下来的种子。首尾帧如果需要循环或转场可以补充一张结束帧。如果生成出的画面突然变形先降低运动幅度。如果是多个镜头拼接不要让同一个镜头持续太长时间。AI 生成的视频往往在动作复杂时出现扭曲单个镜头保持在 3 到 6 秒以内后期剪辑压力会小很多。生成视频时每段输出都要按镜头号保存例如S01E01_SHOT001_RUN001.mp4 S01E01_SHOT002_RUN001.mp4 S01E01_SHOT003_RUN001.mp4保存格式里包含镜头号和生成批次后面不满意时可以只重新生成对应镜头不需要重跑全部。3.5 第五步配音、音效与对白轨道对白不要直接贴在视频上。先把每个镜头的台词单独生成音频文件并控制音频时长略短于或等于镜头时长。如果台词太长可以先用开源命令行工具生成edge-tts --voice zh-CN-YunxiNeural \ --text 这个包裹不是今天的。 \ --write-media output/shot_002_line.mp3生成后打开音频文件确认语速和情绪是否合适。若不够紧张可以在剪辑软件里调整音量包络或添加环境音。AI 漫剧常见的问题是画面已经很紧张但配音平淡建议在配音阶段就标注情绪关键词例如“低声、迟疑、停顿”。音效方面雨声、脚步、开门声可以显著提升质感但不要喧宾夺主。3.6 第六步用 FFmpeg 合成镜头片段当你已经有一段画面视频和一段音频就可以用 FFmpeg 合成单个镜头成片。下面的命令把一张静态图和一段音频合成一段视频适合还没有生成动态视频时的极简方案ffmpeg -loop 1 -framerate 24 -i assets/character/lead_ref.png \ -i output/shot_002_line.mp3 \ -c:v libx264 -tune stillimage -pix_fmt yuv420p \ -c:a aac -b:a 192k -shortest \ output/shot_002_video.mp4如果已有 AI 生成的动态视频片段则不需要-loop 1直接拼接即可。拼接前要确保所有片段的编码参数一致。假设有一个concat.txtfile output/shot_001_video.mp4 file output/shot_002_video.mp4 file output/shot_003_video.mp4然后执行ffmpeg -f concat -safe 0 -i concat.txt -c copy output/episode_01.mp4这种方法速度快但对编码一致性要求高。如果片段分辨率不同或帧率不同会拼接失败或播放异常。稳妥做法是先统一分辨率、帧率和像素格式再执行拼接。3.7 第七步字幕、封面和输出规范字幕是提升观看体验的重要一环。生成字幕文件后可以用滤镜烧录到视频中ffmpeg -i output/episode_01.mp4 \ -vf subtitlessubtitle/episode_01.srt \ -c:a copy output/episode_01_sub.mp4Windows 下字幕路径里的反斜杠和冒号可能引起解析问题建议先把字幕文件放在命令当前目录下并使用相对路径。最后导出时建议按发布平台要求调整参数输出项建议分辨率1920x1080 或 1080x1920根据平台方向帧率24 或 30视频编码H.264兼容性最好码率单集 2 到 4 Mbps 起步画面复杂可提高字幕字体清晰白字黑边或黑字白边封面避免和视频第一帧完全重复单独生成一张带标题的图封面建议单独生成不要直接截取视频首帧。AI 漫剧的封面通常包含主要角色、剧集标题和氛围背景用一张静态图做封面会比直接截图更有辨识度。4. 人物一致性的四层控制方案从提示词到 LoRA4.1 第一层固定角色描述词与负面提示词角色一致性最便宜、最基础的手段是维护一份“角色设定卡”。下面是一个示例{ name: LEAD, fixed_prompt: 1boy, 20s, black hair, short hair, brown eyes, navy blue uniform, anime style, negative_prompt: lowres, bad anatomy, bad hands, extra fingers, blurry, watermark, text, ref_images: [ assets/character/lead_front.png, assets/character/lead_side.png ], default_seed: 20241117, notes: 所有镜头统一使用该描述词 }使用固定描述词时要尽量保证相同的描述词在同一个位置出现不要一会儿用boy一会儿用male一会儿又用young man。虽然这些词意思相近但对生成模型来说可能产生不同结果。负面提示词也应该固定并且至少包含五官和手部常见问题关键词。4.2 第二层角色参考图与图生图固定描述词只能减少随机漂移不能精确锁定角色。要让人物更像必须使用参考图。常见做法是把参考图作为图生图的输入也可以使用参考图模型把角色特征注入到新画面的生成过程中。实际使用中参考图的权重不是越大越好。权重过低角色长得不像权重过高画面构图和动作会被参考图限制导致镜头死板。建议从 0.6 到 0.8 之间做几组实验观察既能保持五官和服装又能让动作和场景有所变化的结果。4.3 第三层ControlNet 控制姿势与构图ControlNet 解决的不只是“长得像”还包括“动作和构图是否可控”。在 AI 漫剧里角色需要走进门、拿起包裹、看向镜头这些动作可以通过姿势骨架、线稿或深度图来控制。ControlNet 类型控制内容适合场景OpenPose人物骨架跑步、站立、伸手、转头Canny边缘线稿保持画面主体边界稳定Depth深度信息保持场景空间前后关系如果使用本地 ComfyUI 或 WebUI输入一张简单的手绘骨架图或第一帧参考图就可以让后续镜头保持类似姿势。这个方案的优点是不会依赖角色脸部的文字描述缺点是需要额外安装模型和学习节点连接方式。注意ControlNet 不是越多越好。多个模型叠加会增加显存占用和生成时间零基础先从一个模型开始跑通后再试组合。4.4 第四层LoRA 微调角色底模如果项目要制作多集内容且角色反复出现可以考虑训练一个角色 LoRA。LoRA 是一个小体积的模型补丁让底层模型更稳定地生成同一个角色。训练数据集最少需要 20 到 50 张同一角色的图片图片之间要有不同角度、表情和环境。一个简单的 LoRA 数据集结构如下person_lora/ ├── images/ │ ├── lead_001.png │ ├── lead_002.png │ └── lead_003.png └── captions/ ├── lead_001.txt ├── lead_002.txt └── lead_003.txt每个文本文件名和图片名一致内容包含触发词和画面描述例如leadchar, 1boy, black hair, brown eyes, navy blue uniform, looking at camera训练步数可以从 1000 步起观察是否出现过拟合。过拟合的表现是训练集里的角色非常像但生成新动作、新场景时容易崩。LoRA 是成本最高的一层方案零基础不建议第一步就去做模型训练先把前三层稳定下来。4.5 一致性检查A/B 对比和参数记录无论是哪一层控制方案都要用参数记录来验证效果。建议为每个镜头建立一条生成记录至少包含以下字段字段说明shot_id镜头号prompt_key使用的角色设定卡名称seed随机种子ref_image参考图路径controlnet是否启用 ControlNetlora是否启用 LoRAresult通过或未通过notes备注例如五官变化、衣服颜色偏差可以写一个简单的 Python 脚本检查这些记录import csv def check_sheet(path: str): with open(path, encodingutf-8) as f: rows list(csv.DictReader(f)) failed [r[shot_id] for r in rows if r[result].strip().lower() ! pass] print(ftotal{len(rows)} failed{len(failed)}) if failed: print(failed:, , .join(failed)) if __name__ __main__: check_sheet(generation_log.csv)生成记录的价值在于你可以准确回答“为什么这个镜头角色崩了”。常见原因是参考图路径写错、提示词固定字段被删除、种子被改动或者切换了底层模型。这些问题只看画面很难发现看参数记录却一目了然。5. 常见问题与排查链路5.1 人物五官不稳定现象同一个角色在不同镜头里脸型、眼睛颜色、发型不一样。排查顺序检查每个镜头的提示词是否都包含同一段角色固定描述词。检查参考图是否真的被接入路径是否正确。检查种子、采样器、步数、CFG 是否变化。检查是否切换了底层模型。检查是否启用了 ControlNet 或 LoRA并确认权重没有过高。大多数情况下角色不稳定的原因不是单一参数而是提示词随意改写。建议把角色设定卡里的固定字段直接复制减少人工输入。5.2 画面崩坏、结构错误现象手指数量不对、眼睛错位、人物身体扭曲、画面出现不明文字。可能原因负面提示词不完整模型本身无法理解复杂动作或生成分辨率过高导致小模型崩溃。处理建议在负面提示词中增加bad anatomy, bad hands, extra fingers, mutated limbs。把动作描述改简单不要一句提示词里塞过多内容。降低一次生成的复杂度先单独生成背景和角色再合成或使用图生图修补。5.3 视频不连贯或运动幅度失控现象图生视频后人物的衣服突然改变或者镜头里出现多个角色。处理建议降低运动幅度。使用首尾帧控制结束画面。固定原图的种子和提示词。如果某个片段总是崩不要反复用同一张原图尝试可以考虑重新生成原图或换参考图。5.4 配音与画面衔接问题现象台词还没说完画面已经切换或者配音情绪和镜头氛围不匹配。处理建议先生成或预估镜头时长再按镜头时长配台词。在配音工具中调整语速和停顿。剪辑时建立时间轴让台词起始点落在画面关键动作之后。不要在配音阶段把所有音轨合并成一个文件保留单独音轨方便调整。5.5 显存不足、生成速度慢现象本地生成高分辨率图片或长视频时直接报错或者等待时间非常长。处理建议降低分辨率例如先使用 512x768 或 720p 测试。关闭不需要的 ControlNet 模型。减少 LoRA 权重或暂时卸载 LoRA。使用--medvram或低显存优化参数。如果持续卡顿考虑云 GPU 实例按任务付费而不是一直在本地硬撑。5.6 从现象到方案的一张排查链路表实际操作时可以按下面的顺序一层层排查排查层检查内容如果失败怎么办输入层提示词是否包含角色固定字段回到角色设定卡复制固定描述素材层参考图路径是否存在检查 assets 目录和文件名参数层seed、采样器、CFG、步数是否一致比较两次生成记录模型层是否切换了底模或 Lora换回原模型或检查 Lora 权重控制层ControlNet 图和权重是否合适降低权重或换模型后处理层是否做了拉伸、滤镜、放大关闭后处理再做对比排查时不要一次改多个参数。每次只改一个变量记录结果。这比同时调整提示词、种子和模型更能快速定位问题。6. 从个人作品到稳定量产SOP 与发布前检查6.1 建立自己的制作 SOPAI 漫剧从“偶尔跑通”到“稳定产出”核心区别是有没有一套可重复执行的流程。下面是适合个人或小团队的阶段式 SOP阶段交付物验收标准剧本故事文档能拆出至少 5 个以上镜头角色设定角色设定卡和参考图连续 3 个镜头中角色一致分镜分镜表每个镜头有画面描述、台词、时长素材生成图片、视频、音频文件命名规范可回溯参数后期合成成片和字幕声画同步无错别字画面干净发布封面和简介符合平台格式和内容规范每一步完成后都要做验收不要等成片全部完成再检查。角色设定阶段如果一致性不合格后面所有镜头都可能返工。6.2 发布前检查清单每次发布前建议执行一遍下面的检查清单每个镜头是否记录了shot_id、seed、参考图和提示词。角色是否在连续镜头中保持一致包括脸型、发型、服装和瞳色。是否有画面崩坏片段例如手部、文字、异常物体。音频是否有底噪、爆音台词是否和画面动作匹配。字幕是否有错别字、漏字、多余空格。成片的分辨率、码率、字幕格式是否符合平台要求。封面是否清晰标题是否准确。素材和模型是否满足使用授权是否需要在简介中标注 AI 生成。这个清单可以直接做成一个表格在项目文件夹里维护。每次发布前逐项勾选能大幅减少临时发现问题的概率。6.3 版权与素材合规AI 漫剧涉及多类素材基础模型、角色参考图、背景音乐、音效、字体、平台模板。使用前要注意区分两类问题模型授权开源模型有不同的 license训练数据集和商用权限不一定相同。素材授权网络下载的音乐、音效、字体、图像不一定是免费商用授权。如果是要公开连载或商业化建议对使用的每个工具和素材做一次授权确认。AI 生成内容在部分平台有标识要求发布前查看对应平台的内容规范避免因为规则变化影响账号。6.4 下一步扩展方向跑通三镜头短片后可以按以下方向扩展批量生成用脚本批量读取分镜表批量调用图像生成和视频生成 API。工作流复用在节点式工作流中保存完整的提示词、模型和参数结构实现一键生成。多角色管理为每个角色建立独立设定卡和模型文件通过触发词区分。多语言版本把字幕和对白拆分成独立文件便于生成不同语言版本。团队协作使用 Git 或对象存储管理大文件建立统一的素材命名规范。对零基础作者来说下一个里程碑不是马上做出长剧而是把“一个三镜头片段”重复十次直到你能在半天内完成从故事到成片的完整输出。到那时候再考虑扩大内容长度和复杂度效率会高很多。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门