Speichern Sie die Videowiedergabe im Format mpv --ytdl während der Wiedergabe in einer Datei

Speichern Sie die Videowiedergabe im Format mpv --ytdl während der Wiedergabe in einer Datei

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-filewurde 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.

verwandte Informationen