copy video/audio stream when grabbing memory card
[meviz.git] / src / main / java / eu / svjatoslav / meviz / grabmemcard / Main.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.grabmemcard;
11
12 import java.io.File;
13 import java.io.IOException;
14 import java.util.Date;
15 import java.util.GregorianCalendar;
16
17 import eu.svjatoslav.commons.file.CommonPathResolver;
18 import eu.svjatoslav.commons.file.FilePathParser;
19 import eu.svjatoslav.meviz.Module;
20 import eu.svjatoslav.meviz.encoder.BitrateParameter;
21 import eu.svjatoslav.meviz.encoder.EncodingOptions;
22 import eu.svjatoslav.meviz.encoder.EncodingPlan;
23 import eu.svjatoslav.meviz.encoder.EncodingTask;
24 import eu.svjatoslav.meviz.encoder.converters.Converter;
25 import eu.svjatoslav.meviz.encoder.converters.Mts2Mp4;
26
27 public class Main implements Module {
28
29         @Override
30         public String getDescription() {
31                 return "Convenience helper to retrieve contents of inserted memory card.";
32         }
33
34         public File[] getDiskVideos(final File file) {
35                 final String videosPath = file.getAbsolutePath()
36                                 + "/AVCHD/BDMV/STREAM/";
37                 final File videosDirectory = new File(videosPath);
38
39                 if (!videosDirectory.exists()) {
40                         return new File[0];
41                 }
42
43                 return videosDirectory.listFiles();
44         }
45
46         public String getDoubleDigit(final int value) {
47                 String valueString = Integer.toString(value);
48                 if (valueString.length() == 1) {
49                         valueString = "0" + valueString;
50                 }
51                 return valueString;
52         };
53
54         @Override
55         public String getModuleCommand() {
56                 return "grabmemcard";
57         }
58
59         @SuppressWarnings("deprecation")
60         public File getTargetDirectory() {
61                 final Date now = new Date();
62                 final GregorianCalendar calendar = new GregorianCalendar();
63
64                 final StringBuffer directoryName = new StringBuffer();
65                 directoryName.append(calendar.get(GregorianCalendar.YEAR) + "."
66                                 + getDoubleDigit(calendar.get(GregorianCalendar.MONTH) + 1)
67                                 + "."
68                                 + getDoubleDigit(calendar.get(GregorianCalendar.DAY_OF_MONTH))
69                                 + " ");
70
71                 directoryName.append(getDoubleDigit(now.getHours()) + ":"
72                                 + getDoubleDigit(now.getMinutes()) + ":"
73                                 + getDoubleDigit(now.getSeconds()));
74
75                 final String targetDirectoryPath = CommonPathResolver
76                                 .getDesktopDirectory().getAbsolutePath()
77                                 + "/"
78                                 + directoryName.toString() + "/";
79
80                 System.out.println("Target directory path: " + targetDirectoryPath);
81
82                 return new File(targetDirectoryPath);
83         }
84
85         @Override
86         public void run(final String[] args) throws IOException {
87
88                 final File targetDirectory = getTargetDirectory();
89                 targetDirectory.mkdirs();
90
91                 final Converter converter = new Mts2Mp4();
92                 final EncodingPlan encodingPlan = new EncodingPlan();
93
94                 final String userName = System.getProperty("user.name");
95
96                 // final File file = new File("/media/" + userName + "/");
97
98                 final File file = new File("/media/");
99
100                 for (final File insertedDisk : file.listFiles()) {
101                         final File[] diskVideos = getDiskVideos(insertedDisk);
102
103                         for (final File sourceFile : diskVideos) {
104
105                                 // compute target file path
106                                 final StringBuffer targetFilePath = new StringBuffer();
107                                 targetFilePath.append(targetDirectory.getAbsolutePath());
108                                 targetFilePath.append("/");
109                                 targetFilePath.append(FilePathParser
110                                                 .getFileNameWithoutExtension(sourceFile));
111                                 targetFilePath.append(".mp4");
112                                 final File targetFile = new File(targetFilePath.toString());
113
114                                 final EncodingTask encodingTask = new EncodingTask(sourceFile,
115                                                 targetFile, converter);
116                                 encodingPlan.scheduleTask(encodingTask);
117                         }
118                 }
119
120                 final EncodingOptions options = new EncodingOptions();
121                 options.videoBitrate = BitrateParameter.bitrate.COPY;
122
123                 encodingPlan.execute(options);
124         }
125
126         @Override
127         public void showCommandlineHelp() {
128                 System.out.println("memory card grabber has no commandline options");
129         }
130
131 }