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.

Video

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 Antwort youtube-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 auch youtube-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

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 eine mp4 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 von youtube-dl.exe. Und ffmpeg sagte mir Invalid 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 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.