diff --git a/CREDITS b/CREDITS index e4a2257..ead5efd 100644 --- a/CREDITS +++ b/CREDITS @@ -9,7 +9,7 @@ ---------- N: Robert Vokac -E: robertvokac@nanoboot.org +E: mail@robertvokac.com W: https://nanoboot.org P: 4096R/E3329055 322B D109 0AA8 C324 EA9C 72F5 693D 30BE E332 9055 D: Founder diff --git a/README.md b/README.md index d443751..69fe7bd 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,4 @@ ffmpeg -i "$video"mkv -preset slow -crf 18 "$video"webm +ffmpeg -i "$video"mkv -preset slow -crf 18 -vf scale="-1:480" "$video"webm diff --git a/src/main/java/org/nanoboot/youtubedlfrontend/Main.java b/src/main/java/org/nanoboot/youtubedlfrontend/Main.java index 75cf9bc..5001b95 100755 --- a/src/main/java/org/nanoboot/youtubedlfrontend/Main.java +++ b/src/main/java/org/nanoboot/youtubedlfrontend/Main.java @@ -24,13 +24,14 @@ import java.io.IOException; import java.nio.file.Files; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.nanoboot.youtubedlfrontend.Args.TWO_DASHES; /** - * @author Robert Vokac + * @author Robert Vokac * @since 0.0.0 */ public class Main { @@ -45,9 +46,9 @@ public class Main { if (args.length < 1) { //System.err.println("At least one argument is expected, but the count of arguments is: " + args.length + "."); - String argsS = "/rv/blupi/archivebox --video_ 7qKUtn76q30 --always-generate-metadata 1" - + " --always-generate-html-files 1 --videos-per-row 4 --thumbnail-links-to-youtube 0" - + " --thumbnail-as-base64 1" + String argsS = "/rv/blupi/archivebox --video_ 7qKUtn76q30 --always-generate-metadata 0" + + " --always-generate-html-files 0 --videos-per-row 4 --thumbnail-links-to-youtube 0" + + " --thumbnail-as-base64 0" + " --channel_ UCqBpgfXap7cZOYkAC34u8Lg "; args = argsS.split(" "); //System.exit(1); @@ -91,6 +92,22 @@ public class Main { System.out.println("[Warning] Snapshots without videos:"); YoutubeVideo.missingYoutubeVideos.forEach(s -> System.out.println(s)); + System.out.println("Total duration: " + ((int)((((double)YoutubeVideo.totalDurationInMilliseconds) / 1000d / 60d / 60d))) + " hours"); + youtubeVideos.sort(new Comparator() { + @Override + public int compare(YoutubeVideo o1, YoutubeVideo o2) { + return Long.valueOf(o1.getVideoDurationInMilliseconds()).compareTo(o2.getVideoDurationInMilliseconds()); + } + }); + youtubeVideos.forEach(y-> {System.out.println(y.getVideoDurationInMinutes() + " = minutes \t" + "https://youtube.com/watch?v=" + y.getId() + "\t" + y.getTitle());}); + System.out.println("\n\n\n\n"); + youtubeVideos.sort(new Comparator() { + @Override + public int compare(YoutubeVideo o1, YoutubeVideo o2) { + return Long.valueOf(o1.getVideoFileSizeInBytes()).compareTo(o2.getVideoFileSizeInBytes()); + } + }); + youtubeVideos.forEach(y-> {System.out.println(y.getVideoFileSizeInMegaBytes()+ " MB \t" + "https://youtube.com/watch?v=" + y.getId() + "\t" + y.getTitle());}); } private static StringBuilder createChannelHtml(String wantedChannelName, List channels, Args argsInstance, Map channelUrls, List youtubeVideos, File archiveBoxRootDirectory, File videosDirectory, File archiveBoxArchiveDirectory) { @@ -168,7 +185,7 @@ public class Main { throw new YoutubedlFrontendException(ex.getMessage()); } } else { - oneChannelStringBuilder.append(thumbnailPath); + oneChannelStringBuilder.append("../" + thumbnailPath); } oneChannelStringBuilder.append("\" width=\"") .append(THUMBNAIL_WIDTH) diff --git a/src/main/java/org/nanoboot/youtubedlfrontend/YoutubeVideo.java b/src/main/java/org/nanoboot/youtubedlfrontend/YoutubeVideo.java index 0266293..d4f2ac8 100644 --- a/src/main/java/org/nanoboot/youtubedlfrontend/YoutubeVideo.java +++ b/src/main/java/org/nanoboot/youtubedlfrontend/YoutubeVideo.java @@ -326,7 +326,7 @@ public class YoutubeVideo implements Comparable { } } } - + public static long totalDurationInMilliseconds = 0l; public static List loadYoutubeVideos(File archiveBoxArchiveDirectory, Args argsInstance) throws IOException, InterruptedException { int i = 0; List youtubeVideos = new ArrayList<>(); @@ -363,6 +363,8 @@ public class YoutubeVideo implements Comparable { System.out.println("videoFileSizeInBytes = " + youtubeVideo.getVideoFileSizeInBytes()); System.out.println("videoFileSha512HashSum = " + youtubeVideo.getVideoFileSha512HashSum()); System.out.println("videoDuration = " + youtubeVideo.getVideoDuration()); + System.out.println("getVideoDurationInMilliseconds = " + youtubeVideo.getVideoDurationInMilliseconds()); + totalDurationInMilliseconds = totalDurationInMilliseconds + youtubeVideo.getVideoDurationInMilliseconds(); System.out.println("channelName = " + youtubeVideo.getChannelName()); System.out.println("channelUrl = " + youtubeVideo.getChannelUrl()); System.out.println("uploadDate = " + youtubeVideo.getUploadDate()); @@ -391,5 +393,25 @@ public class YoutubeVideo implements Comparable { } return youtubeVideos; } + public long getVideoDurationInMilliseconds() { + String duration = videoDuration; + String[] array = duration.split(":"); + long ms = Long.valueOf(array[0]) * 60l *60l * 1000l; + ms = ms + Long.valueOf(array[1]) * 60l * 1000l; + String[] array2 = array[2].split("\\."); + ms = ms + Long.valueOf(array2[0]) * 1000l; + ms = ms + Long.valueOf(array2[1]); + return ms; + } + + long getVideoDurationInMinutes() { + double s = getVideoDurationInMilliseconds(); + return (long) (s / 1000d / 60d); + } + + long getVideoFileSizeInMegaBytes() { + double b = getVideoFileSizeInBytes(); + return (long) (b / 1024d / 1024d); + } } diff --git a/src/main/java/org/nanoboot/youtubedlfrontend/YoutubedlFrontendException.java b/src/main/java/org/nanoboot/youtubedlfrontend/YoutubedlFrontendException.java index ccc2ce4..f436265 100644 --- a/src/main/java/org/nanoboot/youtubedlfrontend/YoutubedlFrontendException.java +++ b/src/main/java/org/nanoboot/youtubedlfrontend/YoutubedlFrontendException.java @@ -19,7 +19,7 @@ package org.nanoboot.youtubedlfrontend; /** - * @author Robert Vokac + * @author Robert Vokac * @since 0.0.0 */ public class YoutubedlFrontendException extends RuntimeException {