Сохранить видео, воспроизводимое в mpv --ytdl, в файл во время воспроизведения
Я хотел бы иметь возможность воспроизводить и сохранять видео с помощью mpv --ytdl. Как мне это сделать? Что особенно важно, буфер тоже сохраняется.
По сути, я хотел бы воспроизвести видео с YouTube, затем выйти из mpv и по-прежнему иметь возможность смотреть видео до момента его загрузки - поэтому мне также необходимо сохранить буферы в файл.
Я уже пробовал использовать youtube-dl -o - для потоковой передачи видео на стандартный вывод, а затем передать его с помощью mpv, т.е.
youtube-dl -o - | mpv -
(с мыслью, что я мог бы использовать tee, чтобы разделить поток и просто записать его в файл) - однако, это проблема в том, что я не могу использовать mpv для навигации по видео - это просто фиксированный поток, поступающий из stdin после все. У меня была другая идея - использовать опцию -o в mpv для указания выходного файла. Это не сохраняет внутренний буфер, как бы то ни было.
4 ответа
Другой вариант, который все еще очень экспериментален, это использовать собственный mpv --record-file
:
mpv --record-file=video.mkv https://www.youtube.com/watch?v=…
У меня был ограниченный успех с этим. Поскольку исходные файлы для захвата youtube-dl должны совпадать с расширением файла, которое вы указываете для файла записи. Однако это похоже на то, что описано в этом вопросе.
Из (текущего стабильного) руководства:
--record-file=<file>
Запишите текущий поток в указанный целевой файл. Целевой файл всегда будет перезаписан без запроса.
Это смешивает исходный поток без перекодирования, что делает эту функцию очень хрупкой и экспериментальной. Вполне возможно, что при этом записываются файлы, которые не работают, не соответствуют стандартам, не воспроизводятся всеми плеерами (включая mpv) или не полностью.
Формат целевого файла определяется расширением файла целевого имени файла. Рекомендуется использовать тот же целевой контейнер, что и исходный, если это возможно, и предпочитать Matroska в качестве резервного.
Поиск во время потоковой записи или включение / отключение потоковой записи во время воспроизведения может отрезать данные или создавать "дыры" в выходном файле. Это технические ограничения. В частности, видеоданные или субтитры, которые были прочитаны заранее, могут создавать такие дыры, которые могут вызвать проблемы с воспроизведением на различных проигрывателях (включая mpv).
Поведение этого параметра может измениться в будущем, например, изменить его на шаблон (аналогично
--screenshot-template
), переименовывается, удаляется или что-либо еще, пока не будет объявлено полустабильным.
--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>
URL-адрес YouTube- EXE MPP
Это не потоковая передача, а воспроизведение после загрузки, но вы не узнаете разницу, если у вас нет учетной записи удаленного доступа или чего-то еще.