diff --git a/contrib/src/main/java/org/archive/modules/extractor/ExtractorYoutubeDL.java b/contrib/src/main/java/org/archive/modules/extractor/ExtractorYoutubeDL.java index a08acec9..7187ee44 100644 --- a/contrib/src/main/java/org/archive/modules/extractor/ExtractorYoutubeDL.java +++ b/contrib/src/main/java/org/archive/modules/extractor/ExtractorYoutubeDL.java @@ -34,6 +34,7 @@ import java.io.UnsupportedEncodingException; import java.net.URI; import java.nio.channels.Channels; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; @@ -67,7 +68,7 @@ import com.google.gson.stream.JsonToken; * Extracts links to media by running yt-dlp in a subprocess. Runs only on html. * *
- * Also implements {@link WARCRecordBuilder} to write youtube-dl json to the + * Also implements {@link WARCRecordBuilder} to write yt-dlp json to the * warc. * *
@@ -81,7 +82,7 @@ import com.google.gson.stream.JsonToken; * fetch chain, and to the end of the warc writer chain. * *
- * Keeps a log of containing pages and media captured as a result of youtube-dl + * Keeps a log of containing pages and media captured as a result of yt-dlp * extraction. The format of the log is as follows: * *
@@ -140,7 +141,7 @@ public class ExtractorYoutubeDL extends Extractor
localTemp = openNewTempFile();
tempfile.set(localTemp);
}
- logger.info("Getting youtube-dl temp file ");
+ logger.info("Getting yt-dlp temp file ");
return localTemp;
}
protected boolean isOpen(RandomAccessFile f) {
@@ -149,12 +150,12 @@ public class ExtractorYoutubeDL extends Extractor
return true;
}
catch (IOException e) {
- logger.info("youtube-dl temp file is not open");
+ logger.info("yt-dlp temp file is not open");
return false ;
}
}
protected RandomAccessFile openNewTempFile() {
- logger.info("Opening New youtube-dl temp file ");
+ logger.info("Opening New yt-dlp temp file ");
File t;
try {
t = File.createTempFile("ydl", ".json");
@@ -194,6 +195,18 @@ public class ExtractorYoutubeDL extends Extractor
kp.put("logMetadataRecord",logMetadataRecord);
}
+ {
+ setProcessArguments(Arrays.asList("yt-dlp", "--ignore-config",
+ "--simulate", "--dump-single-json", "-S vcodec:h264,res:720,acodec:aac",
+ "--no-cache-dir", "--no-playlist", "--playlist-end=" + MAX_VIDEOS_PER_PAGE ));
+ }
+ public List getProcessArguments() {
+ return (List) kp.get("processArguments");
+ }
+ public void setProcessArguments(List processArguments) {
+ kp.put("processArguments", processArguments);
+ }
+
@Override
public void start() {
if (!isRunning) {
@@ -229,7 +242,7 @@ public class ExtractorYoutubeDL extends Extractor
* - If {@code uri} is annotated "youtube-dl" and is an actual video
* download, log a line to ExtractorYoutubeDL.log
*
- * - If {@link #shouldExtract(CrawlURI)}, do youtube-dl extraction.
+ * - If {@link #shouldExtract(CrawlURI)}, do yt-dlp extraction.
*/
@Override
protected void extract(CrawlURI uri) {
@@ -400,7 +413,7 @@ public class ExtractorYoutubeDL extends Extractor
}
/**
- * Streams through youtube-dl json output. Sticks video urls in
+ * Streams through yt-dlp json output. Sticks video urls in
* results.videoUrls, web page urls in
* results.pageUrls, and saves the json in anonymous temp file
* results.jsonFile.
@@ -468,17 +481,16 @@ public class ExtractorYoutubeDL extends Extractor
* the best audio with best acodec no better than aac and
* with the smallest dimension no larger than 720.
*/
- ProcessBuilder pb = new ProcessBuilder("yt-dlp", "--ignore-config",
- "--simulate", "--dump-single-json", "-S vcodec:h264,res:720,acodec:aac",
- "--no-cache-dir", "--no-playlist",
- "--playlist-end=" + MAX_VIDEOS_PER_PAGE, uri.toString());
+ ArrayList processArguments = new ArrayList(getProcessArguments());
+ processArguments.add(uri.toString());
+ ProcessBuilder pb = new ProcessBuilder(processArguments);
logger.info("running: " + String.join(" ", pb.command()));
Process proc = null;
try {
proc = pb.start();
} catch (IOException e) {
- logger.log(Level.WARNING, "youtube-dl failed " + pb.command(), e);
+ logger.log(Level.WARNING, "yt-dlp failed " + pb.command(), e);
return null;
}
@@ -506,7 +518,7 @@ public class ExtractorYoutubeDL extends Extractor
try {
// this happens when there was no json output, which means no videos
// were found, totally normal
- logger.log(Level.FINE, "problem parsing json from youtube-dl " + pb.command() + " " + future.get());
+ logger.log(Level.FINE, "problem parsing json from yt-dlp " + pb.command() + " " + future.get());
} catch (InterruptedException e1) {
throw new IOException(e1);
} catch (ExecutionException e1) {
@@ -515,7 +527,7 @@ public class ExtractorYoutubeDL extends Extractor
}
} catch (IOException e) {
logger.log(Level.WARNING,
- "problem reading output from youtube-dl " + pb.command(),
+ "problem reading output from yt-dlp " + pb.command(),
e);
return null;
} finally {
@@ -523,7 +535,7 @@ public class ExtractorYoutubeDL extends Extractor
// the process should already have completed
proc.waitFor(1, TimeUnit.SECONDS);
} catch (InterruptedException e) {
- logger.warning("youtube-dl still running? killing it");
+ logger.warning("yt-dlp still running? killing it");
proc.destroyForcibly();
}
threadPool.shutdown();
@@ -540,13 +552,13 @@ public class ExtractorYoutubeDL extends Extractor
return true;
}
- // Otherwise, check if we want to run youtube-dl on the url.
+ // Otherwise, check if we want to run yt-dlp on the url.
return shouldExtract(uri);
}
/**
- * Returns {@code true} if we should run youtube-dl on this url. We run
- * youtube-dl on html 200s that are not too huge.
+ * Returns {@code true} if we should run yt-dlp on this url. We run
+ * yt-dlp on html 200s that are not too huge.
*/
protected boolean shouldExtract(CrawlURI uri) {
if (uri.getFetchStatus() != 200) {