diff --git a/music-lab/app/pipeline/orchestrator.py b/music-lab/app/pipeline/orchestrator.py index cebe7e2..a842f2c 100644 --- a/music-lab/app/pipeline/orchestrator.py +++ b/music-lab/app/pipeline/orchestrator.py @@ -104,7 +104,7 @@ async def _run_cover(p, track, feedback): async def _run_video(p, track): setup = db.get_youtube_setup() vd = setup["visual_defaults"] - audio_path = _local_path(track.get("audio_url", "")) + audio_path = track.get("file_path") or _local_path(track.get("audio_url", "")) cover_path = _local_path(p["cover_url"]) out = video.generate( pipeline_id=p["id"], audio_path=audio_path, cover_path=cover_path, @@ -162,14 +162,17 @@ async def _run_publish(p, track): def _local_path(media_url: str) -> str: - """ /media/videos/123/cover.jpg → /app/data/videos/123/cover.jpg """ + """ /media/videos/123/cover.jpg → /app/data/videos/123/cover.jpg + /media/music/abc.mp3 → /app/data/abc.mp3 (music mount at /app/data, no subdir) + """ if not media_url: return "" base_media = os.getenv("VIDEO_MEDIA_BASE", "/media/videos") base_data = os.getenv("VIDEO_DATA_DIR", "/app/data/videos") if media_url.startswith(base_media): return media_url.replace(base_media, base_data, 1) - # /media/music/abc.mp3 → /app/data/music/abc.mp3 + if media_url.startswith("/media/music/"): + return media_url.replace("/media/music/", "/app/data/", 1) return media_url.replace("/media/", "/app/data/", 1) diff --git a/music-lab/app/pipeline/thumb.py b/music-lab/app/pipeline/thumb.py index ab99146..19865e0 100644 --- a/music-lab/app/pipeline/thumb.py +++ b/music-lab/app/pipeline/thumb.py @@ -21,7 +21,7 @@ def generate(*, pipeline_id: int, video_path: str, "-ss", "00:00:05", "-vframes", "1", "-q:v", "2", out_path] result = subprocess.run(cmd, capture_output=True, text=True, timeout=THUMB_TIMEOUT_S) if result.returncode != 0: - raise ThumbGenerationError(f"ffmpeg 썸네일 실패: {result.stderr[:300]}") + raise ThumbGenerationError(f"ffmpeg 썸네일 실패: {result.stderr[-500:]}") if overlay_text and track_title: _overlay_title(out_path, track_title) diff --git a/music-lab/app/pipeline/video.py b/music-lab/app/pipeline/video.py index b62baf9..2e66dff 100644 --- a/music-lab/app/pipeline/video.py +++ b/music-lab/app/pipeline/video.py @@ -30,7 +30,7 @@ def generate(*, pipeline_id: int, audio_path: str, cover_path: str, logger.info("ffmpeg 실행: %s", " ".join(cmd)) result = subprocess.run(cmd, capture_output=True, text=True, timeout=VIDEO_TIMEOUT_S) if result.returncode != 0: - raise VideoGenerationError(f"ffmpeg 실패: {result.stderr[:500]}") + raise VideoGenerationError(f"ffmpeg 실패: {result.stderr[-800:]}") return { "url": storage.media_url(pipeline_id, "video.mp4"),