OSDN Git Service

ffmpegオプションファイルからオプションを読みだして設定
authoryukihane <yukihane.feather@gmail.com>
Wed, 31 Aug 2011 01:55:22 +0000 (10:55 +0900)
committeryukihane <yukihane.feather@gmail.com>
Wed, 31 Aug 2011 02:02:38 +0000 (11:02 +0900)
frontend/src/saccubus/FfmpegOption.java [new file with mode: 0644]
frontend/src/yukihane/inqubus/gui/MainFrame.java

diff --git a/frontend/src/saccubus/FfmpegOption.java b/frontend/src/saccubus/FfmpegOption.java
new file mode 100644 (file)
index 0000000..59d4857
--- /dev/null
@@ -0,0 +1,94 @@
+/* $Id$ */
+package saccubus;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ *
+ * @author yuki
+ */
+public class FfmpegOption {
+
+    private final String extOption;
+    private final String mainOption;
+    private final String inOption;
+    private final String outOption;
+    private final String avfilterOption;
+    private final boolean resize;
+    private final int resizeWidth;
+    private final int resizeHeight;
+    private final boolean adjustRatio;
+
+    public static FfmpegOption load(File file) throws IOException {
+        Properties prop = new Properties();
+        prop.loadFromXML(new FileInputStream(file));
+        String ext = prop.getProperty("EXT");
+        String main = prop.getProperty("MAIN", "");
+        String in = prop.getProperty("IN", "");
+        String out = prop.getProperty("OUT", "");
+        String avfilter = prop.getProperty("AVFILTER", "");
+        boolean resize = Boolean.getBoolean(prop.getProperty("RESIZE", "false"));
+        String width = prop.getProperty("WIDTH", "");
+        String height = prop.getProperty("HEIGHT", "");
+        boolean adjust = Boolean.getBoolean(prop.getProperty("ADJST_RATIO", "true"));
+
+        if (StringUtils.isBlank(ext)) {
+            throw new IOException("変換オプションファイル書式誤り ext: "
+                    + ext + ", main: " + main + ", in: " + in + ", out: " + out + ", avfilter: " + avfilter);
+        }
+        return new FfmpegOption(ext, main, in, out, avfilter, resize, width, height, adjust);
+    }
+
+    public FfmpegOption(String extOption, String mainOption, String inOption, String outOption, String avfilterOption,
+            boolean resize, String width, String height, boolean adjust) {
+        this.extOption = (extOption.startsWith(".")) ? extOption : "." + extOption;
+        this.mainOption = mainOption;
+        this.inOption = inOption;
+        this.outOption = outOption;
+        this.avfilterOption = avfilterOption;
+        this.resize = resize;
+        this.resizeWidth = (width.isEmpty()) ? 0 : Integer.parseInt(width);
+        this.resizeHeight = (height.isEmpty()) ? 0 : Integer.parseInt(height);
+        this.adjustRatio = adjust;
+    }
+
+    public String getExtOption() {
+        return extOption;
+    }
+
+    public String getMainOption() {
+        return mainOption;
+    }
+
+    public String getInOption() {
+        return inOption;
+    }
+
+    public String getOutOption() {
+        return outOption;
+    }
+
+    public String getAvfilterOption() {
+        return avfilterOption;
+    }
+
+    public boolean isResize() {
+        return resize;
+    }
+
+    public int getResizeWidth() {
+        return resizeWidth;
+    }
+
+    public int getResizeHeight() {
+        return resizeHeight;
+    }
+
+    public boolean isAdjustRatio() {
+        return adjustRatio;
+    }
+}
index 86cb9cb..0920675 100644 (file)
@@ -39,6 +39,7 @@ import javax.swing.JLabel;
 import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTable;
@@ -50,6 +51,7 @@ import javax.swing.TransferHandler;
 import javax.swing.WindowConstants;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.builder.ToStringBuilder;
+import saccubus.FfmpegOption;
 import saccubus.MainFrame_AboutBox;
 import saccubus.util.WayBackTimeParser;
 import saccubus.worker.impl.convert.ConvertProgress;
@@ -403,15 +405,20 @@ public class MainFrame extends JFrame {
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            final DownloadProfile downProf = new InqubusDownloadProfile();
-            final String id = Util.getVideoId(fldId.getText());
-            final InqubusConvertProfile convProf = new InqubusConvertProfile();
-            logger.log(Level.INFO, downProf.toString());
-            logger.log(Level.INFO, convProf.toString());
-            final RequestProcess rp = new RequestProcess(downProf, id, convProf);
-            taskManager.add(rp);
-            targetModel.addTarget(new Target(rp));
-            initInputPanel();
+            try {
+                final DownloadProfile downProf = new InqubusDownloadProfile();
+                final String id = Util.getVideoId(fldId.getText());
+                final InqubusConvertProfile convProf = new InqubusConvertProfile();
+                logger.log(Level.INFO, downProf.toString());
+                logger.log(Level.INFO, convProf.toString());
+                final RequestProcess rp = new RequestProcess(downProf, id, convProf);
+                taskManager.add(rp);
+                targetModel.addTarget(new Target(rp));
+                initInputPanel();
+            } catch (Throwable th) {
+                logger.log(Level.SEVERE, null, th);
+                JOptionPane.showMessageDialog(MainFrame.this, th.getMessage(), "中断しました", JOptionPane.ERROR_MESSAGE);
+            }
         }
     }
     /** This method is called from within the constructor to
@@ -1021,7 +1028,7 @@ public class MainFrame extends JFrame {
         private final int maxNumOfComment;
         private final HideCondition ngSetting;
 
-        private InqubusConvertProfile() {
+        private InqubusConvertProfile() throws IOException {
             final Config p = Config.INSTANCE;
             this.outputProfile = new InqubusOutputProfile();
             this.generalProfile = new InqubusGeneralProfile();
@@ -1189,9 +1196,24 @@ public class MainFrame extends JFrame {
         private final int resizeHeight;
         private final boolean adjustRatio;
 
-        private InqubusFfmpegProfile() {
+        private InqubusFfmpegProfile() throws IOException {
             // TODO FFMPEGオプションは、後でメイン画面でも設定できるようにするかも
             final Config p = Config.INSTANCE;
+            final String opf = p.getFfmpegOptionFile();
+            if (StringUtils.isNotEmpty(opf)) {
+                final File file = new File(opf);
+                final FfmpegOption ffop = FfmpegOption.load(file);
+                this.extOption = ffop.getExtOption();
+                this.inOption = ffop.getInOption();
+                this.mainOption = ffop.getMainOption();
+                this.outOption = ffop.getMainOption();
+                this.avOption = ffop.getAvfilterOption();
+                this.resize = ffop.isResize();
+                this.resizeWidth = ffop.getResizeWidth();
+                this.resizeHeight = ffop.getResizeHeight();
+                this.adjustRatio = ffop.isAdjustRatio();
+                return;
+            }
             this.extOption = p.getFfmpegExtension();
             this.inOption = p.getFfmpegInOption();
             this.mainOption = p.getFfmpegMainOption();