web-dev-qa-db-ja.com

再生中にmpv--ytdlで再生中のビデオをファイルに保存します

and mpv--ytdlでビデオを保存できるようにしたいと思います。どうすればそれを行うことができますか?特に重要なのは、バッファも保存されることです。

基本的に、私はyoutubeからビデオを再生してから、mpvを終了し、ロードされるまでビデオを視聴し続けることができるようにしたいので、バッファもファイルに保存する必要があります。

私はすでにyoutube-dl-o-を使用してビデオをstdoutにストリーミングし、それをmpvでパイピングしようとしました。

youtube-dl -o - | mpv -

(teeを使用してストリームを分割し、ファイルに書き込むことができるという考えで)-ただし、これには、mpvを使用してビデオをナビゲートできないという問題があります-これは、後のstdinからの固定ストリームですすべて。もう1つのアイデアは、mpvの-oオプションを使用して出力ファイルを指定することでした。ただし、内部バッファは保存されません。

4
PawkyPenguin

まだ非常に実験的な別のオプションは、mpv独自の--record-fileを使用することです。

mpv --record-file=video.mkv https://www.youtube.com/watch?v=…

私はそれで限られた成功しかありませんでした。ソースファイルyoutube-dlが取得しているため、録音ファイルに指定したファイル拡張子と一致する必要があります。ただし、これは質問の説明に最も近いようです。

the(current stable)manual

--record-file=<file>

現在のストリームを指定されたターゲットファイルに記録します。ターゲットファイルは、要求せずに常に上書きされます。

これにより、再エンコードせずにソースストリームが再多重化されるため、非常に脆弱で実験的な機能になります。これにより、壊れているファイル、標準に準拠していないファイル、すべてのプレーヤー(mpvを含む)で再生できないファイル、または不完全なファイルが書き込まれる可能性があります。

ターゲットファイルの形式は、ターゲットファイル名のファイル拡張子によって決まります。可能であれば、ソースコンテナーと同じターゲットコンテナーを使用し、フォールバックとしてMatroskaを使用することをお勧めします。

ストリームの記録中にシークしたり、再生中にストリームの記録を有効/無効にしたりすると、データがカットされたり、出力ファイルに「穴」ができたりすることがあります。これらは技術的な制限です。特に、先に読んだビデオデータや字幕はそのような穴を作る可能性があり、さまざまなプレーヤー(mpvを含む)で再生の問題を引き起こす可能性があります。

このオプションの動作は、半安定であると宣言されるまで、テンプレートへの変更(--screenshot-templateと同様)、名前の変更、削除など、将来変更される可能性があります。

6
Martijn
youtube-dl -o - | tee video.mp4 | mpv -
4
Ipor Sircer

--record-fileは廃止され、--stream-record。キャッシュを超えて早送りすると出力ファイルがスキップされるため、どちらも完全なソリューションではありません。

mpvのマニュアルページから:

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

使用法: mpv --stream-record=$HOME/Downloads/path/name.mp4 <URL>

0
Wis

youtube-dl url --exec mpv

これはストリーミングではなくダウンロード後に再生されますが、ダイヤルアップアカウントなどを持っていない限り、違いはわかりません。

0
laceration