possibility to change video framerate
[meviz.git] / src / main / java / eu / svjatoslav / meviz / encoder / CommandlineHandler.java
1 /*
2  * Meviz - Various tools collection to work with multimedia.
3  * Copyright (C) 2012, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of version 2 of the GNU General Public License
7  * as published by the Free Software Foundation.
8  */
9
10 package eu.svjatoslav.meviz.encoder;
11
12 import eu.svjatoslav.commons.commandline.parameterparser.Parser;
13 import eu.svjatoslav.commons.commandline.parameterparser.parameter.DirectoryParameter;
14 import eu.svjatoslav.commons.commandline.parameterparser.parameter.IntegerParameter;
15 import eu.svjatoslav.commons.commandline.parameterparser.parameter.NullParameter;
16 import eu.svjatoslav.commons.commandline.parameterparser.parameter.StringParameters;
17
18 public class CommandlineHandler {
19
20         Parser parser = new Parser();
21
22         StringParameters outputFormatParameter = parser
23                         .add(new StringParameters("Encoding output format."))
24                         .addAliases("-o", "--output-format").setMandatory();
25
26         IntegerParameter targetFramerate = parser.add(new IntegerParameter(
27                         "Target framerate.").addAliases("-f", "--target-frame"));
28
29         NullParameter deinterlaceParameter = parser.add(
30                         new NullParameter("Deinterlace video.")).addAliases("-d",
31                         "--deinterlace");
32
33         NullParameter testParameter = parser.add(
34                         new NullParameter("Simulate file encoding.")).addAliases("-t",
35                         "--test");
36
37         NullParameter recursiveParameter = parser.add(
38                         new NullParameter("Enable recursive mode.")).addAliases("-r",
39                         "--recursive");
40
41         NullParameter forPortableParameter = parser.add(
42                         new NullParameter("Encode for portable player.")).addAliases("-p",
43                         "--portable");
44
45         StringParameters inputPatternParameter = parser
46                         .add(new StringParameters("File input pattern."))
47                         .addAliases("-i", "--input-pattern").setMandatory();
48
49         DirectoryParameter workingDirectoryParameter = parser
50                         .add(new DirectoryParameter("Working directory."))
51                         .addAliases("-w", "--working-directory").mustExist();
52
53         BitrateParameter videoBitrateParameter = parser.add(
54                         new BitrateParameter("Video bitrate")).addAliases("-v",
55                         "--video-bitrate");
56
57         BitrateParameter audioBitrateParameter = parser.add(
58                         new BitrateParameter("Audio bitrate")).addAliases("-a",
59                         "--audio-bitrate");
60
61         /**
62          * @return {@link EncodingOptions} if commandline arguments were
63          *         successfully parsed, or <code>null</code> if parsing error
64          *         occurred.
65          */
66         public EncodingOptions parseCommandlineArguments(final String[] args) {
67
68                 final EncodingOptions options = new EncodingOptions();
69
70                 parser.parse(args);
71
72                 options.setRecursive(recursiveParameter.isParameterSpecified());
73
74                 options.setDeinterlace(deinterlaceParameter.isParameterSpecified());
75
76                 options.setTestOnly(testParameter.isParameterSpecified());
77
78                 if (outputFormatParameter.isParameterSpecified())
79                         options.getOutputFormats().addAll(outputFormatParameter.getValue());
80
81                 if (targetFramerate.isParameterSpecified())
82                         options.setTargetFps(targetFramerate.getValue());
83
84                 if (workingDirectoryParameter.isParameterSpecified())
85                         options.setWorkingDirectory(workingDirectoryParameter.getValue());
86
87                 if (inputPatternParameter.isParameterSpecified())
88                         options.getInputPatterns().addAll(inputPatternParameter.getValue());
89
90                 options.setForPortablePlayer(forPortableParameter
91                                 .isParameterSpecified());
92
93                 if (videoBitrateParameter.isParameterSpecified())
94                         options.setVideoBitrate(videoBitrateParameter.getValue());
95
96                 if (audioBitrateParameter.isParameterSpecified())
97                         options.setAudioBitrate(audioBitrateParameter.getValue());
98
99                 return options;
100         }
101 }