Ich verwende Ubuntu und der Befehl youtube-dl
funktioniert einwandfrei.
Jetzt möchte ich jedoch nur einen Teil eines zu langen Videos herunterladen. Ich möchte also nur einige Minuten dieses Videos herunterladen, z. von Minute 13 bis Minute 17.
Gibt es eine Möglichkeit, dies zu tun?
Antwort
I. Glauben Sie nicht, dass youtube-dl
allein das tut, was Sie wollen. Sie können es jedoch mit einem Befehlszeilenprogramm wie ffmpeg kombinieren.
Ermitteln Sie zuerst die tatsächliche URL über YouTube -dl:
youtube-dl -g "https://www.youtube.com/watch?v=V_f2QkBdbRI"
Kopieren Sie die Ausgabe des Befehls und fügen Sie sie als Teil des Parameters -i
des nächster Befehl:
ffmpeg -ss 00:00:15.00 -i "OUTPUT-OF-FIRST URL" -t 00:00:10.00 -c copy out.mp4
Der Parameter -ss
in dieser Position gibt an, alle Eingaben bis zu 15 Sekunden nach dem zu verwerfen Video. Die Option -t
gibt an, dass 10 Sekunden lang aufgenommen werden soll. Der Rest des Befehls weist an, dass es als mp4 gespeichert werden soll.
ffmpeg ist ein beliebtes Tool und sollte es sein Sie müssen sich in einem der gängigen Betriebssystem-Repositorys / Paketmanager befinden.
Kommentare
- Im Wesentlichen müssen Sie also immer noch das gesamte Video herunterladen und selbst zuschneiden
- Sie können t verwenden Die Option -to anstelle von -t, wenn Sie die Zeit für das Beenden des Video-Slice angeben möchten.
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4
- @Antony
ffmpeg
lädt tatsächlich nur den von Ihnen angegebenen Teil herunter. - @ Antony Solange Sie den Parameter -ss vor den Parameter -i setzen, wird der Download ab dem Zeitpunkt gestartet, den Sie mit -ss angegeben haben. Wenn Sie jedoch -ss nach dem Parameter -i platzieren, lädt ffmpeg vom Anfang des Videos herunter und beginnt mit der Codierung, wobei -ss angibt. Weitere Informationen finden Sie in meiner Antwort von Johnnie ‚.
- Verwenden Sie den Link von
youtube-dl
mit dem-g
gibt immer 403 zurück, was für mich verboten ist. Die alleinige Verwendung von youtube-dl zum Herunterladen des Videos funktioniert immer wie ein Zauber.
Antwort
Hinzufügen zu Johnnies Antwort:
Verwenden Sie youtube-dl --youtube-skip-dash-manifest -g "URL"
, um die Video- und Audiostreams abzurufen.
Verwenden Sie nun:
ffmpeg -ss 12:15 -i "1st-URL" -ss 12:15 -i "2nd-URL" -t 5:15 -map 0:v -map 1:a -c:v libx264 -c:a aac output.mkv
Sie müssen für jeden Stream die Option -ss
verwenden. Ich empfehle außerdem, dies etwa 30 Sekunden früher zu tun und dann ein anderes -ss 30
zu verwenden, um den Verlust von Keyframes zu vermeiden. Hier ist ein echtes Beispiel für eines meiner YouTube-Videos.
youtube-dl --youtube-skip-dash-manifest -g https://www.youtube.com/watch?v=gESHIrvIQQo
Ausgabe:
https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/298/source/youtube/requiressl/yes/mn/sn-mv-cvne/ei/BgifWfmmL4iE8wSlv47oCA/mm/31/pl/23/mv/m/ms/au/initcwndbps/11447500/ratebypass/yes/mime/video%2Fmp4/otfp/1/gir/yes/clen/5231968228/lmt/1502479662079137/dur/18575.164/key/dg_yt0/signature/4FFB9B0B7E1703B31F5D07DAD579B55F17EF7BAA.0CB63905C89DD4D33F90CF3AAD728F1ECDFCB9B3/mt/1503594423/ip/206.34.122.70/ipbits/0/expire/1503616102/sparams/ip,ipbits,expire,id,itag,source,requiressl,mn,ei,mm,pl,mv,ms,initcwndbps,ratebypass,mime,otfp,gir,clen,lmt,dur/ https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/140/source/youtube/requiressl/yes/mn/sn-mv-cvne/ei/BgifWfmmL4iE8wSlv47oCA/mm/31/pl/23/mv/m/ms/au/initcwndbps/11447500/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/295235970/lmt/1502480001536214/dur/18575.243/key/dg_yt0/signature/4CD42047D1D5C714377350905C1CC5CBA37C0009.6EED1FC92D17A096235C32E48F4B15DEF7DD99B0/mt/1503594423/ip/206.34.122.70/ipbits/0/expire/1503616102/sparams/ip,ipbits,expire,id,itag,source,requiressl,mn,ei,mm,pl,mv,ms,initcwndbps,ratebypass,mime,otfp,gir,clen,lmt,dur/
Ich wollte von 43:00 auf 50:10 schneiden, also mache ich -ss 42:30
(ich habe ein paar Sekunden Zeit, um einen guten Keyframe abzufangen) an beiden Eingängen und dann -ss 30
nach den Eingaben, um um 43:00 Uhr zu beginnen.
Ich verwende dann map
, um das Video 0:v
und das Audio 1:a
(0 bedeutet erste Eingabe, bei der es sich um das Video handelt, und 1 bedeutet bei der zweiten Eingabe, bei der es sich um Audio handelt) und wählen Sie dann meine Codierungsoptionen aus.
# The first URL video_url="https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/298/source/youtube/requiressl/yes/pl/23/ei/5wCfWY6dBeOj8gSSxZaACQ/mv/m/initcwndbps/5055000/ms/au/mm/31/mn/sn-mv-cvne/ratebypass/yes/mime/video%2Fmp4/otfp/1/gir/yes/clen/5231968228/lmt/1502479662079137/dur/18575.164/key/dg_yt0/beids/%5B9466591%5D/mt/1503592562/signature/8CCFBF5CAB97341D0CB1F34E85AB6EE20FC7A03E.7679F39A8603CF41A95F10232E2A921EB0774101/ip/206.34.122.70/ipbits/0/expire/1503614279/sparams/ip,ipbits,expire,id,itag,source,requiressl,pl,ei,mv,initcwndbps,ms,mm,mn,ratebypass,mime,otfp,gir,clen,lmt,dur/" # The second URL audio_url="https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/140/source/youtube/requiressl/yes/pl/23/ei/5wCfWY6dBeOj8gSSxZaACQ/mv/m/initcwndbps/5055000/ms/au/mm/31/mn/sn-mv-cvne/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/295235970/lmt/1502480001536214/dur/18575.243/key/dg_yt0/beids/%5B9466591%5D/mt/1503592562/signature/4AACC8E27F9036D36D4D623A771A9F2BAC4674BA.7E4F4FB4DC023E3FE491A991F0F9F2329648DE9D/ip/206.34.122.70/ipbits/0/expire/1503614279/sparams/ip,ipbits,expire,id,itag,source,requiressl,pl,ei,mv,initcwndbps,ms,mm,mn,ratebypass,mime,otfp,gir,clen,lmt,dur/" ffmpeg -ss 42:30 -i "$video_url" -ss 42:30 -i "$audio_url" -map 0:v -map 1:a -ss 30 -t 7:10 -c:v libx264 -c:a aac gog-vs-triv.mkv
Gutschrift an Jakub Vrána für die --youtube-skip-dash-manifest
Lösung.
Kommentare
- Danke. Ich war mir nicht sicher, wie ich Sound für den @ Johnnie-Beitrag bekommen soll. Ihr Beitrag hat darauf geantwortet.
- Wie unterscheidet es sich? Wenn Sie
--postprocessor-args
direkt in youtube-dl verwenden? - @daGo – Ich glaube,
youtube-dl --postprocessor-args
wird das gesamte Video herunterladen und bearbeiten Sie es dann bis zum ausgewählten Bereich, während diese Antwortyoutube-dl
verwendet, um einige spezielle URLs abzurufen.ffmpeg
verwendet diese URLs dann, um nur den erforderlichen Bereich herunterzuladen. Wenn Sie also 2 Minuten aus einem 2-stündigen Vorlesungsvideo extrahieren möchten, sparen Sie mit dieser Antwort viel Download. - Dies funktioniert mit den meisten YT-Videos, aber ich versuche dies mit einem 9-stündigen Video wurde zuvor live gestreamt (und jetzt abgeschlossen) und ich erhalte “ Bei der Verarbeitung der Eingabe “ wurden ungültige Daten gefunden. Der Hauptunterschied besteht darin, dass die Ausgabe von
youtube-dl -g
unterschiedlich ist. Bei den meisten Videos hat es die Struktur."https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/8..."
aber für dieses Video hat es die Struktur."https://manifest.googlevideo.com/api/manifest/dash/expire/15956..."
(aus Platzgründen abgeschnitten). Ideen, wie dies funktioniert? - @LeftoverSalad eine Lösung gefunden .
Antwort
ffmpeg $(youtube-dl -g "https://www.youtube.com/watch?v=oHg5SJYRHA0" | sed "s/.*/-ss 00:05 -i &/") -t 01:00 -c copy out.mkv
Bearbeiten Sie die URL und die -ss
, -t
Mal, um diesen Befehl zu verwenden. Es erstellt die Argumente unter Verwendung von Video- und Audio-URLs, ähnlich dieser -Antwort von @godofgrunts.Für $()
werden keine Anführungszeichen verwendet, da dies zwei getrennte Argumente für ffmpeg
erzeugt.
Kommentare
- Können Sie erklären, was es tut, wie es funktioniert?
- Es ‚ ist nur eine knappere Version von @ godofgrunts antwortet mit sed, um Zeit zu sparen, indem man die URLs manuell abruft und in den Startzeiten kopiert / einfügt (-ss 00:05). @godofgrunts hat einige zusätzliche Flags
-map 0:v -map 1:a -c:v libx264 -c:a aac
, die die Qualität verbessern könnten. Ich möchte auchyoutube-dl -f bestvideo+bestaudio
hinzufügen, um sicherzugehen, dass ich ‚ die Version mit der höchsten Qualität erhalte. - ffmpeg.zeranoe.com/builds für Windows.
- Die “ zusätzlichen Flags “ befassen sich mit den beiden Streams (Video und Audio), von denen ich denke, dass Sie sie falsch handhaben – IIUC, sie haben nichts mit der Verbesserung der Qualität zu tun (nun, Ton zu haben ist wahrscheinlich ein Zeichen für verbesserte Qualität :-)) Antwort von @godofgrunts unten scheint korrekt zu sein.
Antwort
youtube-dl
unterstützt die Übergabe von Argumenten an den zugrunde liegenden Postprozessor (getestet mit Version 2017.08.27.1):
youtube-dl -x --postprocessor-args "-ss 00:13:00.00 -t 00:04:00.00" https://youtu.be/...
Dies entspricht im Wesentlichen der Nachbearbeitung mit ffmpeg
selbst, nachdem Sie die Datei zuerst heruntergeladen haben.
Kommentare
- Dies muss jedoch noch durchgeführt werden Laden Sie das gesamte Video herunter und schneiden Sie dann den gewünschten Teil aus.
- Ich erhalte den Fehler
unable to obtain file audio codec with ffprobe
. Können Sie mir bitte dabei helfen? Ich verwende CentOS 7 - Beachten Sie, dass das Flag
-x
nur das Audio herunterlädt. Lassen Sie es aus dem Befehl weg, wenn Sie sowohl Audio als auch Video möchten. 🙂 - Dies funktioniert nicht zuverlässig, da
—postprocessor-args
in einigen Fällen mehrmals angewendet wird. Siehe github.com/ytdl-org/youtube-dl/issues/26863
Antwort
Diese Funktionsanforderung ist in youtube-dl noch nicht implementiert. Siehe # 622-Problem und viele Duplikate davon auf github.
Antwort
Verwenden Sie den Parameter --postprocessor-args
, um die Audio- / Videoausgabe an ffmpeg
zur Bearbeitung (den Prozessor) zu übergeben. Der Postprozessor muss ffmpeg
installiert sein.
--postprocessor-args
akzeptiert 3 Argumente & -Werte (zum Beispiel gibt es mehr, siehe Handbuchseite von ffmpeg
):
-
-ss HH:MM:SS
: Startzeit -
-to HH:MM:SS
: Endzeit -
-t HH:MM:SS
: Zeit Dauer:
Beispiele:
- Starten Sie die Codierung nach 15 Sekunden und stoppen Sie nach 1 Minute und 20 Sekunden
$ youtube-dl --postprocessor-args "-ss 0:0:15 -to 0:1:20" "[video_URL]"
- Starten Sie die Codierung nach 15 Sekunden und nehmen Sie sich nur die nächsten 3 Minuten und 5 Sekunden Zeit.
$ youtube-dl --postprocessor-args "-ss 0:0:15 -t 0:3:5" "[video_URL]"
PS: youtube-dl
lädt das gesamte Medium vor der Verarbeitung herunter und entfernt es danach.
Kommentare
- Ja! Sehr sauber und leicht zu merken.
- Dies funktioniert nicht zuverlässig, da
—postprocessor-args
in einigen Fällen mehrmals angewendet wird. Siehe github.com/ytdl-org/youtube-dl/issues/26863
Antwort
Dies beantwortet die Frage von OP nicht vollständig, aber es gibt eine Möglichkeit, einen Stream von Anfang bis zu einer bestimmten Dauer herunterzuladen, ohne den gesamten Stream herunterladen zu müssen. Da YouTube Unterstützung für Lebensläufe bietet, können wir mithilfe des Range
-Headers Teilinhalte anfordern.
Wir rufen zuerst die Stream-URLs ab:
$ youtube-dl -g https://www.youtube.com/watch?v=yysk8s2vih8 https://r1---sn-npoeenee.googlevideo.com/videoplayback?source=youtu... https://r1---sn-npoeenee.googlevideo.com/videoplayback?source=youtu...
Dies sollte zwei URLs ausgeben (jeweils für Video- und Audiostreams).
Senden Sie nun eine Kopfanforderung an die erste URL (die mit dem Videostream verknüpft ist) an Rufen Sie die Gesamtinhaltslänge dieses Streams ab:
$ curl "1st-URL" -sI | grep Content-Length Content-Length: 64380504
Nun teilen wir diese Gesamtinhaltslänge im Video durch die Gesamtsekunden (das YouTube-Video hat eine Dauer von 4) min und 7 Sekunden, was 247 Sekunden entspricht.), um ungefähr die Inhaltslänge von 1 Sekunde zu erhalten:
64380504 / 247 ≈ 260650
Wir multiplizieren diesen Wert mit (Anzahl der Sekunden, die von Anfang an abgerufen werden sollen + 1)
(wir fügen eine hinzu, um auch den zusätzlichen Speicherplatz der Metadaten, die am Anfang des Streams platziert werden, grob zu berücksichtigen)
Um beispielsweise ungefähr die ersten 10 Sekunden abzurufen, müssen Sie die erste 260650 * 11 = 2867150
Bytes, daher stellen wir eine Anfrage mit dem Header Range
:
$ curl "1st-URL" -H "Range: bytes=0-2867150" -o ten_secs.mp4
Dies sollte nur den ersten herunterladen 10 Sek.Die heruntergeladene Datei sollte wiedergegeben werden können, aber FFmpeg sollte am besten die falschen Metadaten korrigieren:
$ ffmpeg -i ten_secs.mp4 -c copy corrected_ten_secs.mp4
Wir können auch nur den ersten Teil des Audios herunterladen (2.- URL) auf ähnliche Weise (die Länge des Inhalts würde sich unterscheiden, aber die Gesamtsekunden würden gleich bleiben).
Das Herunterladen eines beliebigen Mittelteils aus dem Video sollte ebenfalls auf diese Weise möglich sein, wird aber aufgrund von YouTube wahrscheinlich viel schwieriger Platziert die Metadaten am Anfang des Streams (in den ersten Bytes) und ohne dass sie auf den heruntergeladenen Medien vorhanden sind, wird der Stream überhaupt nicht abgespielt.
BEARBEITEN: Dies funktioniert nur auf Websites mit Unterstützung für Lebensläufe, z. B. YouTube. Es funktioniert nicht für andere Websites.
Antwort
Sie können von Anfang an bis zu einem Punkt ohne das Ganze herunterladen und bearbeiten. Das ist die Hälfte dessen, was diese Frage verlangt:
Unterbrechen Sie den Download mit
^C
- Ich habe dies nur mit
mp4
- versucht, funktioniert nicht mit separatem Video und Audio benötigen Sie ein Format mit beiden. Standardmäßig erhält ytdl häufig getrenntes Video und Audio und führt sie dann zusammen. Verwenden Sie
-F
, um die verfügbaren Formate anzuzeigen, und wählen Sie einemp4
hat beides. zB-f18
oder-f22
sind normalerweise da. - Sie „Ich muss anhand des heruntergeladenen Prozentsatzes schätzen (der nicht linear ist; die Komprimierungsrate variiert im Laufe der Zeit).
Ja. Es ist ein Hack .
Weitere Frage: Wenn Sie die separaten Video- und Audioformate möchten, können Sie einen Teil davon separat herunterladen (unter Verwendung von ^c
wie hier) und sie dann manuell zusammenführen? Ich glaube nicht, dass es für einige Formate funktioniert.
Antwort
Ich habe ein Skript erstellt, das @godofgrunts answer hier
#!/bin/bash #taken from https://unix.stackexchange.com/a/388148/48971 if [ $# -lt 4 ]; then echo "Usage: $0 <youtube"s URL> <HH:mm:ss from time> <HH:mm:ss to time> <output_file_name>" echo "e.g.:" echo "$0 https://www.youtube.com/watch?v=T1n5gXIPyws 00:00:25 00:00:42 intro.mp4" exit 1 fi echo "processing..." from=$(date "+%s" -d "UTC 01/01/1970 $2") to=$(date "+%s" -d "UTC 01/01/1970 $3") from_pre=$(($from - 30)) if [ $from_pre -lt 0 ] then from_pre=0 fi from_pre_command_print=$(date -u "+%T" -d @$from_pre) from_command_print=$(date -u "+%T" -d @$(($from - $from_pre)))$(grep -o "\..*" <<< $2) to_command_print=$(date -u "+%T" -d @$(($to - $from_pre)))$(grep -o "\..*" <<< $3) command="ffmpeg " for uri in $(youtube-dl -g $1) do command+="-ss $from_pre_command_print -i $uri " done command+="-ss $from_command_print -to $to_command_print $4" echo "downloading with the following command:" echo "$command" $command
Ich habe es auch in die Ausschnitte von Gitlab hochgeladen.
Antwort
Ich habe eine Kolben-App erstellt, die zu dem passt, was Sie wollen. Ich weiß, dass der Beitrag alt ist, aber das Problem besteht weiterhin.
Sie finden ihn hier
Er kann analysiert werden Text auch für YouTube-Links. Sie geben nur Folgendes an:
YouTube.com/blahblah start-1:20
Dadurch wird ein Video von 0-1: 22 heruntergeladen (aufgrund von Keyframes können geringfügige Unterschiede auftreten). Es kann auch ganze Videos herunterladen, in diesem Fall einfach das Zeitintervall weglassen.
Antwort
Für alle faulen Typen, die sich nicht anziehen Wenn Sie nicht mehr als einen Befehl verwenden möchten, gehen Sie wie folgt vor:
youtube-dl.exe https://www.youtube.com/watch?v=MJD39Aja1Is --external-downloader ffmpeg --external-downloader-args "-ss 00:00:10.00 -t 00:01:00.00"
Sie können jetzt die Optionen von youtube-dl.exe
und ffmpeg
wählen das Format aus, entfernen das Video und schneiden die Audiodatei usw. (möglicherweise schneiden Sie die Videodatei und konvertieren dann in eine Audiodatei, was auch immer zuerst passiert)
youtube-dl.exe -f 251 https://www.youtube.com/watch?v=MJD39Aja1Is -x --external-downloader ffmpeg --external-downloader-args "-ss 00:00:10.00 -t 00:01:00.00"
Kommentare
- Ihr Befehl funktioniert nicht unter GNU / Linux: Wir verwenden
youtube-dl
anstelle vonyoutube-dl.exe
. Undffmpeg
sagte mirInvalid duration specification for ss: 00.00.10.00
, Es sollte-ss 00:00:30.00
mit Doppelpunkten anstelle von Punkten sein, mit Ausnahme des letzten. - @ ewin-goisot Es tut mir leid, dies ist passiert, weil ich nicht ‚ t kopiert den gesamten Befehl nach tes ting es. Jetzt sollte es funktionieren. Das Problem war die Zeitdefinition. es muss 00: 00: 00.00 2 mal doppelter Punkt sein, als nur 1 Punkt. wie hh: mm: ss.ms
- mit
00:00:00.0
funktioniert es besser, ich kann einen Teil des Videos herunterladen. Ich habe immer noch ein Problem (mit Ihrem Befehl und den meisten anderen): Es lädt 5 oder 10 Sekunden zu viel herunter. Die Lösung finden Sie in der Antwort von @godofgrunts ‚:-ss 42:30 -i "$video_url" -ss 42:30 -i "$audio_url" -map 0:v -map 1:a -ss 30
beginnend 30 Sekunden vor dem Start des Teils und Hinzufügen einer-ss 30
am Ende. Daher muss ich die Option-ss
für denselben Befehl mehrmals verwenden. Gibt es eine Möglichkeit, dasselbe mit--external-downloader-args
zu tun? - ah sorry, ich bin nicht so vertraut mit dem Mischen verschiedener Streams. Wenn Sie jedoch nur das beste Audio- und Videomaterial desselben Videos aufnehmen möchten, können Sie dies stattdessen mit youtube-dl tun.
Antwort
Um die @ hyperpallium-Antwort zu ergänzen: OP erwähnte nicht, dass das von ihm heruntergeladene Video von YouTube stammen musste.
YouTube ist mit seinen Videos lächerlich restriktiv Audio- und Videostreams in verschiedene Dateien, die Sie verfolgen / Ihre Daten verkaufen; Daher könnte es schwierig sein, es teilweise herunterzuladen und dann Strg + C zu drücken.
Mit youtube-dl
Version 2020.11.17 in Microsoft Windows Version 10.0.17134.1304 habe ich einen Teil eines Videos von archive.org heruntergeladen:
E:\cs>youtube-dl --abort-on-unavailable-fragment https://archive.org/download/beastars-season-1-1080p/%5BHCS%5D%20Beastars%20-%2003%20%5B1080p%5D.mkv [generic] [HCS] Beastars - 03 [1080p]: Requesting header [redirect] Following redirect to https://ia601504.us.archive.org/14/items/beastars-season-1-1080p/%5BHCS%5D%20Beastars%20-%2003%20%5B1080p%5D.mkv [generic] [HCS] Beastars - 03 [1080p]: Requesting header WARNING: Falling back on generic information extractor. [generic] [HCS] Beastars - 03 [1080p]: Downloading webpage WARNING: URL could be a direct video link, returning it as such. [download] Destination: [HCS] Beastars - 03 [1080p]-[HCS] Beastars - 03 [1080p].mkv [download] 2.3% of 513.77MiB at 839.68KiB/s ETA 10:12 ERROR: Interrupted by user E:\cs>ren "[HCS] Beastars - 03 [1080p]-[HCS] Beastars - 03 [1080p].mkv.part" "[HCS] Beastars - 03 [1080p]-[HCS] Beastars - 03 [1080p].mkv" E:\cs>ffmpeg -i "[HCS] Beastars - 03 [1080p]-[HCS] Beastars - 03 [1080p].mkv" "[HCS] Beastars - 03 [1080p].mp4" ffmpeg version N-91990-g49c67e79ca Copyright (c) 2000-2018 the FFmpeg developers built with gcc 8.2.1 (GCC) 20180813 [stdout text] Stream #0:1(jpn): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default) Metadata: encoder : Lavc58.30.100 aac [matroska,webm @ 0000020c8f28a2c0] Read errorme=00:00:33.96 bitrate=2099.5kbits/s speed=0.0185x frame= 823 fps=0.3 q=-1.0 Lsize= 9677kB time=00:00:34.56 bitrate=2293.8kbits/s speed=0.0147x video:9134kB audio:519kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.248960% [libx264 @ 0000020c8f3423c0] frame I:25 Avg QP:14.71 size: 56865 [stdout] E:\cs>youtube-dl -v [debug] System config: [] [debug] User config: [] [debug] Custom config: [] [debug] Command-line args: ["-v"] [debug] Encodings: locale cp1252, fs mbcs, out cp437, pref cp1252 [debug] youtube-dl version 2020.11.17 [debug] Python version 3.4.4 (CPython) - Windows-10-10.0.17134 [debug] exe versions: ffmpeg 3.4, ffprobe N-91990-g49c67e79ca [debug] Proxy map: {} Usage: youtube-dl [OPTIONS] URL [URL...]
Die MKV-Datei, mit der ich endete, war “ 00:22:57 “ in “ Gesamtdauer „, endete jedoch nach 34 Sekunden. Das MP4-Video, mit dem ich endete, hatte eine Gesamtdauer von 00:00:34 Sekunden, endete nach 34 Sekunden und das Video und Audio wurden wie vorgesehen vollständig wiedergegeben.
Vollständig cmd.exe
log ist hier
Führen Sie also zusammenfassend
youtube-dl --abort-on-unavailable-fragment [URL to video file]
(Option --abort-on-unavailable-fragment
kann wichtig sein, da Sie den Download mit Strg + C unterbrechen), Lassen Sie es ein wenig herunterladen und drücken Sie dann Strg + C .
Optional: Benennen Sie die [file].mkv.part
um Datei an [file].mkv
. Das Konvertieren des MKV in MP4 ist wahrscheinlich auch optional.
Antwort
Jemand hat eine Batch-Skript (für Windows), das die Datei herunterlädt und den gewünschten Teil extrahiert:
@ECHO off :Input ECHO. SET url= ECHO Enter Youtube-url: SET /P url= IF "%url%" EQU "" GOTO End IF "%url: =%" NEQ "%url%" GOTO Input ECHO Enter start time (in seconds, or in hh:mm:ss[.xxx] form): SET /P start= ECHO Enter duration (in seconds, or in hh:mm:ss[.xxx] form): SET /P dur= ECHO. FOR /F "delims==" %%A IN ("youtube-dl.exe --no-warnings --get-filename "%url%"") DO SET filename=%%A FOR /F %%B IN ("youtube-dl.exe -g "%url%"") DO ( ffmpeg.exe -hide_banner -ss "%start%" -i "%%B" -c copy -t "%dur%" "%filename%" ) GOTO Input :End