Ich glaube nicht, dass youtube-dl
allein das machen wird, was du willst. Sie können es jedoch mit einem Befehlszeilenprogramm wie ffmpeg kombinieren.
Erwerben Sie zuerst die aktuelle URL mit 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 -i
Parameters des nächsten Befehls ein:
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:00:15.00 -t 00:00:10.00 -c copy out.mp4
Der -ss
Parameter in dieser Position gibt an, dass alle Eingaben bis zu 15 Sekunden im Video verworfen werden sollen. Die -t
Option gibt an, für 10 Sekunden zu erfassen. Der Rest des Befehls teilt ihm mit, dass es als mp4 gespeichert werden soll.
ffmpeg ist ein beliebtes Tool und sollte sich in einem der gängigen Betriebssystem-Repositorys / Paketmanager befinden.
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4
ffmpeg
lädt nur den von Ihnen angegebenen Teil herunter.quelle
-map 0:v -map 1:a -c:v libx264 -c:a aac
, die die Qualität verbessern könnten. Ich möchte auch hinzufügenyoutube-dl -f bestvideo+bestaudio
, um sicherzustellen, dass ich die hochwertigste Version erhalte.Hinzufügen zu Johnnies Antwort:
Verwenden Sie
youtube-dl -g "URL"
diese Option , um Video- und Audiostreams abzurufen.Jetzt benutzen:
Sie müssen die
-ss
Option für jeden Stream verwenden. Ich empfehle es auch etwa 30 Sekunden früher zu machen und dann eine andere-ss 30
zu verwenden, um den Verlust von Schlüsselbildern zu vermeiden. Hier ist ein echtes Beispiel mit einem meiner YouTube-Videos.Video
Ausgabe:
Ich wollte von 43:00 auf 50:10 schneiden, also werde ich
-ss 42:30
beide Eingaben bearbeiten (mir ein paar Sekunden geben, um einen guten Keyframe zu erhalten) und dann-ss 30
nach den Eingaben um 43:00 beginnen.Ich werde dann verwenden
map
, um das Video0:v
und Audio zuzuordnen1:a
(0 bedeutet den ersten Eingang, der das Video ist, und 1 bedeutet den zweiten Eingang, der das Audio ist) und dann meine Kodierungsoptionen auswählen.quelle
-i
Flagge von ffmpeg URLs aufnehmen kann. ordentlichDiese Feature-Anfrage ist in youtube-dl noch nicht implementiert. Siehe Ausgabe 622 und viele Duplikate davon auf Github.
quelle
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 ist im Grunde dasselbe wie die Nachbearbeitung mit Ihnen
ffmpeg
selbst, nachdem Sie die Datei zuerst heruntergeladen haben.quelle
unable to obtain file audio codec with ffprobe
Fehler. Können Sie mir bitte dabei helfen? Ich benutze CentOS 7-x
Flag nur das Audio herunterlädt. Lassen Sie den Befehl aus, wenn Sie sowohl Audio als auch Video möchten. :)Sie können vom Start bis zu einem Punkt herunterladen, ohne das Ganze herunterzuladen und zu bearbeiten. Das ist die Hälfte dessen, was diese Frage stellt:
mp4
-F
diese Option , um die verfügbaren Formate anzuzeigen und wählen Sie ein Formatmp4
mit beiden Formaten aus . zB-f18
oder-f22
sind normalerweise da.Ja. Es ist ein Hack .
Weitere Frage: Wenn Sie die getrennten Video- und Audioformate möchten, können Sie einen Teil von jedem separat herunterladen (
^c
wie hier) und sie dann manuell zusammenführen? Ich denke nicht, dass es für einige Formate funktionieren wird.quelle
Dies beantwortet die Frage von OP nicht vollständig, aber es gibt eine Möglichkeit, einen Stream von Anfang an 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 holen uns zuerst die Stream-URLs:
Dies sollte zwei URLs ausgeben (jeweils für Video- und Audiostreams).
Senden Sie nun eine Head-Anfrage an die erste URL (die auf den Videostream verweist), um die Gesamtlänge des Inhalts dieses Streams abzurufen:
Nun teilen wir diese Gesamtlänge des Inhalts durch die Gesamtsekunden des Videos (das YouTube-Video hat eine Dauer von 4 Minuten 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 wir von Anfang an + 1 abrufen möchten)
(Wir fügen eine hinzu, um auch den zusätzlichen Speicherplatz zu berücksichtigen, den Metadaten am Anfang des Streams belegen.)
Um beispielsweise ungefähr die ersten 10 Sekunden abzurufen, müssen Sie die ersten
260650 * 11 = 2867150
Bytes abrufen, sodass wir eine Anfrage mit demRange
Header stellen:Dies sollte nur die ersten 10 Sekunden herunterladen. Die heruntergeladene Datei sollte wiedergegeben werden können. Am besten lassen Sie FFmpeg die falschen Metadaten korrigieren:
Wir können auch nur den ersten Teil des Audios (2nd-URL) auf ähnliche Weise herunterladen (die Länge des Inhalts würde sich unterscheiden, die Gesamtsekunden würden jedoch gleich bleiben).
Das Herunterladen eines mittleren Teils des Videos sollte ebenfalls auf diese Weise möglich sein, ist jedoch wahrscheinlich sehr viel kniffliger, da YouTube die Metadaten am Anfang des Streams (in den ersten Bytes) platziert, ohne dass sie in den heruntergeladenen Medien vorhanden sind Stream wird überhaupt nicht abgespielt.
BEARBEITEN: Dies funktioniert nur auf Websites mit Resume-Unterstützung, z. B. YouTube. Für andere Websites funktioniert es nicht.
quelle
Verwenden Sie den Parameter --postprocessor-args , um die Audio- / Videoausgabe an das zu bearbeitende ffmpeg (den Prozessor) zu übergeben. Daher muss ffmpeg installiert sein.
--postprocessor-args akzeptiert 3 Argumente & Werte (zum Beispiel gibt es mehr, siehe Handbuchseite von ffmpeg):
Beispiele:
PS: youtube-dl lädt das gesamte Medium vor der Verarbeitung herunter und entfernt es anschließend.
quelle