From 772fbabb62945bd589c37d0d7bf49d18e0631b21 Mon Sep 17 00:00:00 2001 From: RyuJongJin <266630912+RyuJongJin@users.noreply.github.com> Date: Sat, 3 Oct 2026 04:56:31 +0900 Subject: [PATCH] =?UTF-8?q?MKV=20=EB=A7=8C=EB=93=A4=EA=B8=B0=20=C2=B7=20AI?= =?UTF-8?q?=20=EC=9E=90=EB=A7=89:=20=EB=AA=A9=EB=A1=9D=EC=9D=98=20?= =?UTF-8?q?=EB=8F=99=EC=98=81=EC=83=81=20=ED=8C=8C=EC=9D=BC=EC=9D=B4=20?= =?UTF-8?q?=EC=82=AC=EB=9D=BC=EC=A1=8C=EC=9C=BC=EB=A9=B4=20=EC=95=8C?= =?UTF-8?q?=EC=95=84=EB=B3=B4=EA=B8=B0=20=EC=89=AC=EC=9A=B4=20=EC=95=88?= =?UTF-8?q?=EB=82=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "ffmpeg 오류 (코드 1) … No such file or directory" 대신 "동영상 파일이 없습니다 (옮겨졌거나 지워졌습니다)". 여러 개를 할 때는 그 동영상만 실패로 두고 다음으로 넘어간다 (지금과 같음). Co-Authored-By: Claude Opus 5.5 --- lib/app/app_controller.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/app/app_controller.dart b/lib/app/app_controller.dart index 888b4bb..59b4cc4 100644 --- a/lib/app/app_controller.dart +++ b/lib/app/app_controller.dart @@ -694,6 +694,7 @@ class AppController extends ChangeNotifier { final wav = p.join(tmp, 'audio.wav'); _log('AI 자막 시작: ${v.fileName}'); try { + if (!await storage.exists(v.path)) throw MediaToolException(missingFileMessage); // 2. 음성 추출 (전체의 5%) if (v.info?.ofType('audio').isEmpty ?? false) { throw const MediaToolException('음성 트랙이 없습니다.'); @@ -1088,6 +1089,7 @@ class AppController extends ChangeNotifier { final copies = {}; var started = false; // FFmpeg 가 출력 파일을 쓰기 시작했는지 try { + if (!await services.storage.exists(v.path)) throw MediaToolException(missingFileMessage); // Android 의 FFmpeg (ffmpeg-kit) 에는 AV1 디코더가 없어 다시 인코딩할 수 없다 (원본 유지는 된다) final vcodec = v.info?.ofType('video').firstOrNull?.codec; if (Platform.isAndroid && encode.reencode && vcodec == 'av1') { @@ -1140,6 +1142,9 @@ class AppController extends ChangeNotifier { bool _buildCancelled = false; + /// 목록에 넣은 뒤 파일이 옮겨지거나 지워졌을 때 + static const missingFileMessage = '동영상 파일이 없습니다 (옮겨졌거나 지워졌습니다). 목록에서 빼고 다시 추가하세요.'; + /// 지금 작업 중단 + 대기 중인 작업 모두 비우기 void cancel() { if (pendingJobs.isNotEmpty) _log('대기 중인 작업 ${pendingJobs.length}개 취소');