OSDN Git Service

プロファイルインタフェース変更
[coroid/inqubus.git] / frontend / src / saccubus / worker / Convert.java
index a89090b..0a1c27e 100644 (file)
@@ -37,8 +37,6 @@ public class Convert extends SwingWorker<ConvertResult, ConvertProgress> {
     private final ConvertProfile profile;
     private final File videoFile;
     private final File commentFile;
-    private final File outputFile;
-    private File transformedComment;
 
     /**
      * 変換ワーカコンストラクタ.
@@ -52,6 +50,13 @@ public class Convert extends SwingWorker<ConvertResult, ConvertProgress> {
         this.profile = profile;
         this.videoFile = video;
         this.commentFile = comment;
+    }
+
+    @Override
+    protected ConvertResult doInBackground() throws Exception {
+        if (!profile.isConvert()) {
+            return new ConvertResult(true, "");
+        }
 
         final GeneralProfile gene = profile.getGeneralProfile();
         final OutputProfile outprof = profile.getOutputProfile();
@@ -60,35 +65,28 @@ public class Convert extends SwingWorker<ConvertResult, ConvertProgress> {
         pattern.setId(isNotEmpty(id) ? id : "");
         final String title = outprof.getTitile();
         pattern.setTitle(isNotEmpty(title) ? title : "");
-        final String fileName = getBaseName(video.getPath());
+        final String fileName = getBaseName(videoFile.getPath());
         pattern.setFileName(fileName);
         pattern.setReplaceFrom(gene.getReplaceFrom());
         pattern.setReplaceFrom(gene.getReplaceTo());
-        this.outputFile = new File(outprof.getDir(), pattern.createFileName());
-    }
+        final File outputFile = new File(outprof.getDir(), pattern.createFileName());
 
-    @Override
-    protected ConvertResult doInBackground() throws Exception {
+        File transformedComment = null;
         try {
 
-            if (profile.getOutputProfile().isCommentOverlay()) {
+            if (profile.isCommentOverlay()) {
                 transformedComment = File.createTempFile("vhk", ".tmp", profile.getTempDir());
                 final HideCondition hide = profile.getNgSetting();
                 publish(new ConvertProgress("コメントの中間ファイルへの変換中"));
-                ConvertToVideoHook.convert(commentFile, transformedComment, hide.getId(), hide.
-                        getWord());
-                if (!conv) {
-                    throw new IOException("コメント変換に失敗。ファイル名に使用できない文字が含まれているか正規表現の間違い?");
-                }
+                ConvertToVideoHook.convert(commentFile, transformedComment, hide.getId(), hide.getWord());
             }
 
             checkStop();
             publish(new ConvertProgress("動画の変換を開始"));
 
-            final int code = convert();
+            final int code = convert(transformedComment, outputFile);
             if (code != 0) {
-                publish(new ConvertProgress("変換エラー:" + outputFile.getPath()));
-                return new ConvertResult(false, null);
+                throw new IOException("ffmpeg実行失敗: " + outputFile.getPath());
             }
             publish(new ConvertProgress("変換が正常に終了しました。"));
             return new ConvertResult(true, outputFile.getName());
@@ -99,32 +97,30 @@ public class Convert extends SwingWorker<ConvertResult, ConvertProgress> {
         }
     }
 
-    private int convert() throws InterruptedException, IOException {
-        File tmpCws = null;
+    private int convert(File transformedComment, File outputFile) throws InterruptedException, IOException {
         File fwsFile = null;
         try {
-            tmpCws = File.createTempFile("cws", ".swf", profile.getTempDir());
+            final File tmpCws = File.createTempFile("cws", ".swf", profile.getTempDir());
             fwsFile = Cws2Fws.createFws(videoFile, tmpCws);
+            tmpCws.delete();
             final File target = (fwsFile != null) ? fwsFile : videoFile;
 
-            final List<String> arguments = createArguments(profile.getFfmpegOption(), target);
+            final List<String> arguments = createArguments(target, transformedComment, outputFile);
             return executeFfmpeg(arguments);
         } finally {
-            if (tmpCws != null && tmpCws.exists()) {
-                tmpCws.delete();
-            }
             if (fwsFile != null && fwsFile.exists()) {
                 fwsFile.delete();
             }
         }
     }
 
-    // TODO static にできた方が良い
-    private List<String> createArguments(final FfmpegProfile ffop, final File targetVideoFile)
-            throws IOException,
-            UnsupportedEncodingException {
+    private List<String> createArguments(final File targetVideoFile, File transformedComment, File output)
+            throws IOException, UnsupportedEncodingException {
+        final ConvertProfile prof = profile;
+        final FfmpegProfile ffop = prof.getFfmpegOption();
+
         final List<String> cmdList = new ArrayList<String>();
-        cmdList.add(profile.getFfmpeg().getPath());
+        cmdList.add(prof.getFfmpeg().getPath());
         cmdList.add("-y");
         final String[] mainOptions = ffop.getMainOption().split(" +");
         for (String opt : mainOptions) {
@@ -146,7 +142,7 @@ public class Convert extends SwingWorker<ConvertResult, ConvertProgress> {
                 cmdList.add(opt);
             }
         }
-        final Info info = MediaInfo.getInfo(new File("bin", "MediaInfo"), videoFile);
+        final Info info = MediaInfo.getInfo(new File("bin", "MediaInfo"), targetVideoFile);
         // 4:3 なら1.33, 16:9 なら1.76
         final boolean isHD = ((double) info.getWidth() / (double) info.getHeight() > 1.5);
         if (ffop.isResize()) {
@@ -156,9 +152,9 @@ public class Convert extends SwingWorker<ConvertResult, ConvertProgress> {
             cmdList.add(scaled.getWidth() + "x" + scaled.getHeight());
         }
         final List<String> avfilterArgs = createAvfilterOptions(ffop.getAvfilterOption());
-        if (!profile.isVhookDisabled()) {
-            final boolean addComment = (commentFile != null);
-            final String vhookArg = getVhookArg(profile, addComment, transformedComment.getPath(), isHD);
+        if (!prof.isVhookDisabled()) {
+            // TODO 引数冗長
+            final String vhookArg = getVhookArg(prof, prof.isCommentOverlay(), transformedComment.getPath(), isHD);
             if (isNotBlank(vhookArg)) {
                 avfilterArgs.add(vhookArg);
             }
@@ -168,7 +164,7 @@ public class Convert extends SwingWorker<ConvertResult, ConvertProgress> {
             final String args = "\"" + join(avfilterArgs, ", ") + "\"";
             cmdList.add(args);
         }
-        cmdList.add(outputFile.getPath());
+        cmdList.add(output.getPath());
         final StringBuilder argMsg = new StringBuilder();
         argMsg.append("arg:");
         for (String s : cmdList) {