Ich möchte gerne spielen könnenUndVideo speichern mit mpv --ytdl. Wie gehe ich dabei vor? Wichtig ist, dass auch der Puffer mitgespeichert wird.
Grundsätzlich möchte ich ein Video von YouTube abspielen, dann mpv beenden und das Video trotzdem bis zu der Stelle weiter ansehen können, an der es geladen wurde – daher muss ich die Puffer auch in einer Datei speichern.
Ich habe bereits versucht, mit youtube-dl -o - das Video auf stdout zu streamen und es dann mit mpv weiterzuleiten, d. h.
youtube-dl -o - | mpv -
(mit der Idee, dass ich tee verwenden könnte, um den Stream aufzuteilen und ihn einfach in eine Datei zu schreiben) - das hat allerdings das Problem, dass ich mpv nicht verwenden kann, um durch das Video zu navigieren - es ist schließlich nur ein fester Stream, der von stdin kommt. Eine andere Idee, die ich hatte, war, die Option -o von mpv zu verwenden, um eine Ausgabedatei anzugeben. Dadurch wird jedoch der interne Puffer nicht gespeichert.
Antwort1
Eine weitere Option, die noch sehr experimentell ist, ist die Verwendung von mpvs eigenem --record-file
:
mpv --record-file=video.mkv https://www.youtube.com/watch?v=…
Ich hatte damit nur begrenzten Erfolg. Da die Quelldateien, die youtube-dl abruft, mit der Dateierweiterung übereinstimmen müssen, die Sie für die Aufnahmedatei angeben. Dies scheint jedoch dem am nächsten zu kommen, was in der Frage beschrieben wird.
Ausdas (aktuelle stabile) Handbuch:
--record-file=<file>
Zeichnet den aktuellen Stream in die angegebene Zieldatei auf. Die Zieldatei wird immer ohne Rückfrage überschrieben.
Dadurch wird der Quellstream ohne Neucodierung remuxiert, was diese Funktion sehr fragil und experimentell macht. Es ist durchaus möglich, dass dadurch Dateien geschrieben werden, die beschädigt, nicht standardkonform, nicht mit allen Playern (einschließlich mpv) abspielbar oder unvollständig sind.
Das Zieldateiformat wird durch die Dateierweiterung des Zieldateinamens bestimmt. Es wird empfohlen, wenn möglich denselben Zielcontainer wie den Quellcontainer zu verwenden und Matroska als Fallback zu bevorzugen.
Das Suchen während der Stream-Aufzeichnung oder das Aktivieren/Deaktivieren der Stream-Aufzeichnung während der Wiedergabe kann Daten abschneiden oder „Löcher“ in der Ausgabedatei erzeugen. Dies sind technische Einschränkungen. Insbesondere Videodaten oder Untertitel, die im Voraus gelesen wurden, können solche Löcher erzeugen, die bei verschiedenen Playern (einschließlich mpv) zu Wiedergabeproblemen führen können.
Das Verhalten dieser Option kann sich in Zukunft ändern, z. B. indem sie in eine Vorlage geändert wird (ähnlich wie
--screenshot-template
), umbenannt, entfernt wird oder etwas anderes, bis sie für halbwegs stabil erklärt wird.
Antwort2
--record-file
wurde zugunsten von verworfen --stream-record
. Beide sind keine perfekte Lösung, da ein schneller Vorlauf über den Cache hinaus zu einem Sprung in der Ausgabedatei führt.
von der mpv-Manpage:
--record-file=<file>
Deprecated, use --stream-record, or the dump-cache command.
Record the current stream to the given target file. The target
file will always be overwritten without asking.
This was deprecated because it isn't very nice to use. For one,
seeking while this is enabled will be directly reflected in the
output, which was not useful and annoying.
--stream-record=<file>
Write received/read data from the demuxer to the given output
file. The output file will always be overwritten without asking.
The output format is determined by the extension of the output
file.
Switching streams or seeking during recording might result in
recording being stopped and/or broken files. Use with care.
Seeking outside of the demuxer cache will result in "skips" in
the output file, but seeking within the demuxer cache should
not affect recording. One exception is when you seek back far
enough to exceed the forward buffering size, in which case the
cache stops actively reading. This will return in dropped data
if it's a live stream.
If this is set at runtime, the old file is closed, and the new
file is opened. Note that this will write only data that is
appended at the end of the cache, and the already cached data
cannot be written. You can try the dump-cache command as an
alternative.
External files (--audio-file etc.) are ignored by this, it works
on the "main" file only. Using this with files using ordered
chapters or EDL files will also not work correctly in general.
There are some glitches with this because it uses FFmpeg's
libavformat for writing the output file. For example, it's
typical that it will only work if the output format is the same
as the input format. This is the case even if it works with
the ffmpeg tool. One reason for this is that ffmpeg and its
libraries contain certain hacks and workarounds for these issues,
that are unavailable to outside users.
This replaces --record-file. It is similar to the ancient/removed
--stream-capture/-capture options, and provides better behavior
in most cases (i.e. actually works).
Verwendung:
mpv --stream-record=$HOME/Downloads/path/name.mp4 <URL>
Antwort3
youtube-dl -o - | tee video.mp4 | mpv -
Antwort4
youtube-dl url --exec mpv
Es erfolgt kein Streaming, sondern die Wiedergabe nach dem Download. Sie werden den Unterschied jedoch nicht bemerken, es sei denn, Sie verfügen über ein DFÜ-Konto oder ähnliches.