1 package saccubus.prompt;
4 import java.io.IOException;
5 import java.util.concurrent.Callable;
6 import java.util.concurrent.ExecutorService;
7 import java.util.concurrent.Executors;
8 import java.util.concurrent.Future;
9 import org.apache.commons.cli.BasicParser;
10 import org.apache.commons.cli.CommandLine;
11 import org.apache.commons.cli.CommandLineParser;
12 import org.apache.commons.cli.HelpFormatter;
13 import org.apache.commons.cli.Option;
14 import org.apache.commons.cli.OptionBuilder;
15 import org.apache.commons.cli.Options;
16 import saccubus.ConvertStopFlag;
17 import saccubus.ConvertStopFlag.State;
18 import saccubus.converter.Converter;
19 import saccubus.converter.classic.profile.LoginInfo;
20 import saccubus.converter.classic.profile.CommentGetInfo;
21 import saccubus.converter.classic.profile.Ffmpeg;
22 import saccubus.converter.classic.profile.FfmpegOption;
23 import saccubus.converter.classic.profile.GeneralSetting;
24 import saccubus.converter.classic.profile.InputFileSetting;
25 import saccubus.converter.classic.profile.OutputFileSetting;
26 import saccubus.converter.classic.profile.Profile;
27 import saccubus.converter.classic.profile.SFile;
28 import saccubus.properties.SProperties;
29 import saccubus.net.TextProgressListener;
37 * 説明: ニコニコ動画の動画をコメントつきで保存
41 * 著作権: Copyright (c) 2007 PSI
53 public static void main(String[] args) throws IOException {
54 // 第1引数がメールアドレスと思しき時は昔の引数であるとみなしてパース、実行する.
55 if (args.length > 0 && args[0].contains("@")) {
56 doWithOldArguments(args);
60 new Prompt().execute(args);
63 public void execute(String[] args) throws IOException {
64 execute(args, TextProgressListener.EMPTY_LISTENER, ConvertStopFlag.StateChangeListener.EMPTY_LISTENER);
67 public void execute(String[] args, TextProgressListener tpl, ConvertStopFlag.StateChangeListener scl) throws
69 Options options = createOptions(args);
72 CommandLineParser parser = new BasicParser();
73 CommandLine cmd = parser.parse(options, args);
74 profile = createExecuteOption(cmd);
75 } catch (Exception e) {
76 HelpFormatter hf = new HelpFormatter();
77 hf.printHelp("java -jar Saccubus.jar [opts]", options);
79 throw new IOException(e);
82 Converter conv = new Converter("dummy", "", profile, tpl, new ConvertStopFlag(scl));
83 ExecutorService es = Executors.newSingleThreadExecutor();
84 Future<Boolean> future = es.submit((Callable<Boolean>) conv);
86 boolean res = future.get().booleanValue();
88 throw new IOException("ffmpeg変換処理が正常に終了しませんでした。");
90 } catch (Exception ex) {
91 throw new IOException("取得失敗", ex);
93 System.out.println("Finished.");
96 private Options createOptions(String[] args) {
97 Options options = new Options();
98 // Option id = OptionBuilder.withArgName("mail").hasArg().withDescription("ニコニコ動画ログインID(メールアドレス)").create("id");
99 // Option password = OptionBuilder.withArgName("password").hasArg().withDescription("ニコニコ動画ログインパスワード").
100 // create("password");
101 // Option video = OptionBuilder.withArgName("id").hasArg().withDescription("ニコニコ動画ビデオID").create("video");
102 Option videoFile = OptionBuilder.withArgName("file").hasArg().withDescription("動画ファイル").create("file_video");
103 Option commentFile = OptionBuilder.withArgName("file").hasArg().withDescription("コメントファイル").
104 create("file_comment");
105 Option tcommentFile = OptionBuilder.withArgName("file").hasArg().withDescription("投稿者コメントファイル").
106 create("file_tcomment");
107 Option outputFile = OptionBuilder.withArgName("file").hasArg().withDescription("出力ファイル").create("file_output");
108 Option ffmpeg = OptionBuilder.withArgName("option").hasArg().withDescription("ffmpeg変換オプション").create("ffmpeg");
109 // options.addOption(id);
110 // options.addOption(password);
111 // options.addOption(video);
112 options.addOption(videoFile);
113 options.addOption(commentFile);
114 options.addOption(tcommentFile);
115 options.addOption(outputFile);
116 options.addOption(ffmpeg);
120 private Profile createExecuteOption(CommandLine cmd) throws IOException {
121 final String mail = "dmy";
122 final String pass = "dmy";
123 final String video = cmd.getOptionValue("file_video");
124 final String comm = cmd.getOptionValue("file_comment");
125 final String tcomm = cmd.getOptionValue("file_tcomment");
126 final String output = cmd.getOptionValue("file_output");
127 final String ff = cmd.getOptionValue("ffmpeg");
129 SProperties setting = SProperties.loadSetting(mail, pass);
130 Profile p = setting.toProfile();
131 GeneralSetting general = p.getGeneralSetting();
132 LoginInfo loginInfo = p.getLoginInfo();
133 // InputFileSetting videoSetting = p.getVideoSetting();
134 // InputFileSetting commentSetting = p.getCommentSetting();
135 CommentGetInfo commentGetInfo = p.getCommentGetInfo();
136 // InputFileSetting tcommentSetting = p.getTcommentSetting();
137 // OutputFileSetting outputFileSetting = p.getOutputFileSetting();
138 Ffmpeg ffmpeg = p.getFfmpeg();
140 FfmpegOption newFfmpegOption = new FfmpegOption(ffmpeg.getFfmpegOption().getExtOption(), "", "", ff, "", false,
142 InputFileSetting newVideoSetting = new InputFileSetting(new SFile(true, new File(video)), false, false);
143 InputFileSetting newCommentSetting = new InputFileSetting(new SFile(true, new File(comm)), false, false);
144 InputFileSetting newTcommentSetting = new InputFileSetting(new SFile(true, new File(tcomm)), false, false);
145 OutputFileSetting newOutputFileSetting = new OutputFileSetting(new SFile(true, new File(output)), true, false,
147 Ffmpeg newFfmpeg = new Ffmpeg(ffmpeg.getFfmpeg(), ffmpeg.getVhook(), newFfmpegOption, ffmpeg.isVhookDisabled(), ffmpeg.
148 getMaxNumOfComment(), ffmpeg.getFont(), ffmpeg.getFontIndex(), ffmpeg.getShadowIndex(), ffmpeg.
149 isShowConverting(), ffmpeg.isSelfAdjustFontSize(), ffmpeg.isCommentOpaque(), ffmpeg.getNgSetting());
151 p = new Profile(general, loginInfo, newVideoSetting, newCommentSetting, commentGetInfo, newTcommentSetting,
152 newOutputFileSetting, newFfmpeg);
160 private static void doWithOldArguments(String[] args) throws IOException {
161 String mail = args[0];
162 String pass = args[1];
163 String tag = args[2];
164 String time = args.length < 4 ? "" : args[3];
165 SProperties setting = SProperties.loadSetting(mail, pass);
166 Converter conv = new Converter(tag, time, setting.toProfile(), TextProgressListener.EMPTY_LISTENER, new ConvertStopFlag(
167 ConvertStopFlag.StateChangeListener.EMPTY_LISTENER));
168 System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
169 System.out.println("Saccubus on CUI");
170 System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
171 System.out.println("Mailaddr: " + mail);
172 System.out.println("Password: hidden");
173 System.out.println("VideoID: " + tag);
174 System.out.println("WaybackTime: " + time);
175 System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
177 System.out.println("Finished.");