Сохранить видео, воспроизводимое в mpv --ytdl, в файл во время воспроизведения

Сохранить видео, воспроизводимое в mpv --ytdl, в файл во время воспроизведения

Я хотел бы иметь возможность игратьисохранить видео с помощью mpv --ytdl. Как мне это сделать? Что особенно важно, так это то, что буфер тоже сохраняется.

По сути, я хотел бы воспроизвести видео с YouTube, затем выйти из MPV и при этом иметь возможность продолжать смотреть видео до момента его загрузки — вот почему мне также нужно сохранять буферы в файл.

Я уже пробовал использовать youtube-dl -o - для потоковой передачи видео на stdout, а затем передавать его с помощью mpv, т.е.

youtube-dl -o - | mpv -

(с идеей, что я мог бы использовать tee для разделения потока и просто записать его в файл) - однако, это имеет проблему, что я не могу использовать mpv для навигации по видео - это просто фиксированный поток, поступающий из stdin в конце концов. Другая идея, которая у меня была, заключалась в использовании опции mpv -o для указания выходного файла. Однако это не сохраняет внутренний буфер.

решение1

Другой вариант, который пока еще является экспериментальным, — использовать собственный mpv --record-file:

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

У меня был ограниченный успех с этим. Поскольку исходные файлы, которые youtube-dl захватывает, должны соответствовать расширению файла, которое вы указываете для файла записи. Однако это кажется наиболее близким к тому, что описано в вопросе.

От(текущая стабильная) инструкция:

--record-file=<file>

Записать текущий поток в указанный целевой файл. Целевой файл всегда будет перезаписан без запроса.

Это ремикширует исходный поток без перекодирования, что делает эту функцию крайне хрупкой и экспериментальной. Вполне возможно, что это записывает файлы, которые повреждены, не соответствуют стандартам, не воспроизводятся всеми проигрывателями (включая mpv) или неполны.

Формат целевого файла определяется расширением целевого имени файла. Рекомендуется использовать тот же целевой контейнер, что и исходный контейнер, если это возможно, и предпочитать Matroska в качестве запасного варианта.

Поиск во время записи потока или включение/выключение записи потока во время воспроизведения может привести к обрезанию данных или образованию "дыр" в выходном файле. Это технические ограничения. В частности, видеоданные или субтитры, которые были прочитаны заранее, могут создавать такие дыры, что может вызвать проблемы с воспроизведением на различных проигрывателях (включая mpv).

Поведение этой опции может измениться в будущем, например, она может быть изменена на шаблон (похожий на --screenshot-template), переименована, удалена или что-то еще, пока она не будет объявлена ​​полустабильной.

решение2

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

решение3

youtube-dl -o - | tee video.mp4 | mpv -

решение4

youtube-dl URL-адрес --exec mpv

Это не потоковая передача, а воспроизведение после загрузки, но вы не почувствуете разницы, если у вас нет учетной записи dialup или чего-то в этом роде.

Связанный контент