diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java
index bbf6168ad..7deb2a0ae 100644
--- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java
+++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java
@@ -219,10 +219,34 @@ public final class YoutubeParsingHelper {
throw new ParsingException("Error duration string with unknown format: " + input);
}
- return ((Integer.parseInt(Utils.removeNonDigitCharacters(days)) * 24
- + Integer.parseInt(Utils.removeNonDigitCharacters(hours))) * 60
- + Integer.parseInt(Utils.removeNonDigitCharacters(minutes))) * 60
- + Integer.parseInt(Utils.removeNonDigitCharacters(seconds));
+ return ((convertDurationToInt(days) * 24
+ + convertDurationToInt(hours)) * 60
+ + convertDurationToInt(minutes)) * 60
+ + convertDurationToInt(seconds);
+ }
+
+ /**
+ * Tries to convert a duration string to an integer without throwing an exception.
+ *
+ * Helper method for {@link #parseDurationString(String)}.
+ *
+ * Note: This method is also used as a workaround for NewPipe#8034 (YT shorts no longer
+ * display any duration in channels).
+ *
+ * @param input The string to process
+ * @return The converted integer or 0 if the conversion failed.
+ */
+ private static int convertDurationToInt(final String input) {
+ if (input == null || input.isEmpty()) {
+ return 0;
+ }
+
+ final String clearedInput = Utils.removeNonDigitCharacters(input);
+ try {
+ return Integer.parseInt(clearedInput);
+ } catch (final NumberFormatException ex) {
+ return 0;
+ }
}
@Nonnull
diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java
index 67be244d0..08b769975 100644
--- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java
+++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java
@@ -138,6 +138,11 @@ public class YoutubeStreamInfoItemExtractor implements StreamInfoItemExtractor {
}
}
+ // NewPipe#8034 - YT returns not a correct duration for "YT shorts" videos
+ if ("SHORTS".equals(duration)) {
+ return 0;
+ }
+
return YoutubeParsingHelper.parseDurationString(duration);
}