OSDN Git Service

プロファイルインタフェース変更
authoryukihane <yukihane.feather@gmail.com>
Tue, 23 Aug 2011 02:39:42 +0000 (11:39 +0900)
committeryukihane <yukihane.feather@gmail.com>
Tue, 23 Aug 2011 02:39:42 +0000 (11:39 +0900)
frontend/src/saccubus/worker/Convert.java
frontend/src/saccubus/worker/TestFrame.java
frontend/src/saccubus/worker/classic/profile/Ffmpeg.java
frontend/src/saccubus/worker/classic/profile/FfmpegOption.java
frontend/src/saccubus/worker/classic/profile/OutputFileSetting.java
frontend/src/saccubus/worker/profile/ConvertProfile.java
frontend/src/saccubus/worker/profile/FfmpegProfile.java
frontend/src/saccubus/worker/profile/OutputProfile.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) {
index eb1322e..8e80277 100644 (file)
@@ -369,11 +369,6 @@ public class TestFrame extends JFrame {
                 public boolean isAdjustRatio() {
                     throw new UnsupportedOperationException("Not supported yet.");
                 }
-
-                @Override
-                public GeneralProfile getGeneralSetting() {
-                    throw new UnsupportedOperationException("Not supported yet.");
-                }
             };
         }
 
@@ -442,16 +437,6 @@ public class TestFrame extends JFrame {
             return new OutputProfile() {
 
                 @Override
-                public boolean isConvert() {
-                    return true;
-                }
-
-                @Override
-                public boolean isCommentOverlay() {
-                    return false;
-                }
-
-                @Override
                 public File getDir() {
                     return new File("out");
                 }
@@ -488,5 +473,15 @@ public class TestFrame extends JFrame {
                 }
             };
         }
+
+        @Override
+        public boolean isConvert() {
+            return true;
+        }
+
+        @Override
+        public boolean isCommentOverlay() {
+            return false;
+        }
     }
 }
index 122b41e..ac4c90f 100644 (file)
@@ -105,4 +105,14 @@ public class Ffmpeg implements saccubus.worker.profile.ConvertProfile {
     public GeneralProfile getGeneralProfile() {
         throw new UnsupportedOperationException("Not supported yet.");
     }
+
+    @Override
+    public boolean isConvert() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public boolean isCommentOverlay() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
 }
index 8634e7c..a95dae5 100644 (file)
@@ -102,9 +102,4 @@ public class FfmpegOption implements saccubus.worker.profile.FfmpegProfile {
     public boolean isAdjustRatio() {
         return adjustRatio;
     }
-
-    @Override
-    public GeneralProfile getGeneralSetting() {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
 }
index 48d6756..28f8845 100644 (file)
@@ -21,7 +21,6 @@ public class OutputFileSetting implements saccubus.worker.profile.OutputProfile
         this.addTcomment = addTcomment;
     }
 
-    @Override
     public boolean isConvert() {
         return convert;
     }
@@ -30,7 +29,6 @@ public class OutputFileSetting implements saccubus.worker.profile.OutputProfile
         return appendPrefixVideoId;
     }
 
-    @Override
     public boolean isCommentOverlay() {
         return addComment;
     }
index a1187f2..6d16e4d 100644 (file)
@@ -14,13 +14,35 @@ public interface ConvertProfile {
 
     FfmpegProfile getFfmpegOption();
 
-    /** @return ffmpeg実行ファイル. */
+    /** @return 動画変換処理を行う必要があればtrue. */
+    boolean isConvert();
+
+    /**
+     * @return {@link #isConvert()}がtrueの場合に
+     * 使用するffmpeg実行ファイル.
+     * {@link #isConvert()}がfalseの場合未定義.
+     */
     File getFfmpeg();
 
-    /** @return 拡張ライブラリを無効にするのであればtrue. */
+    /**
+     * @return {@link #isConvert()}がtrueの場合に
+     * 拡張ライブラリを使用せずに変換を行うのであればtrue.
+     * {@link #isConvert()}がfalseの場合未定義.
+     */
     boolean isVhookDisabled();
 
-    /** @return 拡張ライブラリファイル. */
+    /**
+     * @return {@link #isConvert()}がtrueかつ{@link #isVhookDisabled()}がfalseの場合に
+     * コメントを付与して変換を行うのであればtrue.
+     * それ以外の場合は未定義.
+     */
+    boolean isCommentOverlay();
+
+    /**
+     * @return {@link #isConvert()}がtrueかつ{@link #isVhookDisabled()}がfalseの場合に
+     * 使用する拡張ライブラリファイル.
+     * それ以外の場合は未定義.
+     */
     File getVhook();
 
     /** @return 一時作業ディレクトリ. */
index b100e7c..96e730d 100644 (file)
@@ -23,6 +23,4 @@ public interface FfmpegProfile {
     int getResizeHeight();
 
     boolean isAdjustRatio();
-
-    GeneralProfile getGeneralSetting();
 }
index 4dc0da0..671d6d5 100644 (file)
@@ -8,16 +8,6 @@ import java.io.File;
  */
 public interface OutputProfile {
 
-    /** @return 動画変換処理を行う必要があればtrue. */
-    boolean isConvert();
-
-    /**
-     * @return {@link #isConvert()}がtrueの場合に
-     * コメントを付与して変換を行うのであればtrue.
-     * {@link #isConvert()}がfalseの場合未定義.
-     */
-    boolean isCommentOverlay();
-
     /**
      * @return {@link #isConvert()}がtrueの場合に
      * 変換した動画を保存するディレクトリ.