# Описание

Настройки [mpv](https://github.com/mpv-player/mpv)

## Навигация

- [TODO](#todo)
- [Функционал](#функционал)
- [Обрезка локальных видео](#simple-cutlua)
- [Установка yt-dlp](#yt-dlp)
- [Скачивать и клипать онлайн видео и стримы](#streamsavelua)
- [Включение нескольких звуковых дорожек](#включение-нескольких-звуковых-дорожек)
- [Скопировать данные о видео](#copystufflua)
- [Установка ff2mpv](#установка-ff2mpv)
- [Бинды стандартного mpv](#бинды-стандартного-mpv)
- [Остальные бинды](#остальные-бинды-в-одном-месте-для-удобства)
- [Известные баги](#известные-баги)

## TODO

- Функционал плейлиста, очереди и "смотреть позже"
- Смотреть торренты без скачивания
- Возможность копировать ссылку ютуба с таймкодом
- Мб сделать поддержку онлайн видео в simple-cut.lua, если будет желание и если это возможно
- Мб сделать отображение миниатюр онлайн видео, при наведении на таймлайн, из локального кеша, а не подгружая по 30 секунд каждый кадр из инета. Не знаю возможно ли это

## Функционал
- Я использую тему [uosc](https://github.com/tomasklaen/uosc) со своим дополнением, которое позволяет включать несколько звуковых дорожек разом
- Я написал свой скрипт обрезки локальных видео [simple-cut.lua](https://github.com/Buliway/dots/blob/arch/configs/.config/mpv/scripts/simple-cut.lua)
- Настроен yt-dlp для просмотра онлайн видео с любого сайта, который [поддерживается](https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md) yt-dlp, используя куки браузера firefox. Так же позволяет ставить на паузу стримы, продолжая просмотр со старого места и перематывая стримы даже там, где это делать нельзя
- Используется скрипт `clipshot.lua` для создания скринов в буфер обмена при нажатии `c`
- Вместе с темой uosc используется `thumfast.lua` для миниатюр видео при наведении на таймлайн
- Вместе с темой uosc используется `quality-menu.lua` для правильного выбора качества аудио и видео при просмотре онлайл видео
- Если хочется открывать онлайн видео из браузера через mpv, то есть [такое](https://github.com/woodruffw/ff2mpv) решение
- Есть возможность сохранять и перематывать лайв стримы и делать клипы онлайн видео
- Копировать в буфер обмена имя файла, путь, таймкод, текст субтитров, продолжительность видео, метаданные. Делается через `copyStuff.lua`

### simple-cut.lua

Скрипт для создания клипов. Чтоб можно было обрезать видео во время просмотра. Ниже бинды:

- `g` - установить начальный таймкод клипа
- `h` - установить конечный таймкод клипа
- `G` - установить начало видео в качестве начального таймкода
- `H` - установить конец видео в качестве конечного таймкода
- `Ctrl+r` - создать клип в .mp4 формате
- `Alt+r` - создать клип с расширением и качеством исходного файла

### yt-dlp

Из коробки он работать не будет. Чтоб работал, его надо установить следующим образом:

```sh
sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp
```

### streamsave.lua

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

Изначально в mpv весь кеш сохраняется в оперативной памяти, что приводит к большой нагрузке на пк. Я включил настройку, которая выгружает весь кеш на диск. Не знаю будут ли с этим проблемы на HDD, но на SSD всё работает отлично и сам плеер потребляет очень мало ресурсов. Чтоб сохранить видео, скрипту надо указать начальную и конечную точки, таймкоды, что именно надо сохранить. Я выбрал минимальную версию скрипта `streamsave.lua`, у которого есть три вида указания таймкодов:

1) `continuous` - Устанавливает начальную точку в ноль (начало видео), но конечная точка не ставится. Он будет бесконечно записывать в файл, пока видео не закончится или пока не будет закрыт плеер, или пока не будет нажат бинд остановки записи кеша на диск. Что это значит? Если хочется сохранить всё видео/стрим целиком, то надо использовать этот вариант, ведь он записывает видео от начала и до тех пор, пока есть что прогружать. Например, если смотреть стрим, он будет его записывать до тех пор, пока плеер грузит этот стрим (можно даже ставить на паузу, кешировать новые данные он всёравно продолжит)
2) `current` - Устанавливает начальную точку в ноль, а конечную точку на текущую позицию воспроизведения. Если хочется сохранить видео от начала и до просмотренного момента, то надо использовать этот вариант
3) `ab` - Это обычное обрезание видео. При нажатии на кнопку `l` ставится начальная точка. При втором нажатии на кнопку `l` ставится конечная точка. Обе эти точки будет видно на таймлайне и при просмотре видео, скорее всего, будет воспроизводиться только этот кусок на репите, чтоб можно было увидеть именно этот отрывок. Если нажать `l` третий раз, то все таймкоды сбросятся и надо будет клипать по новой

Среди этих трёх вариантов, в стоке используется первый. Все три варианта, описанные выше, ничего не записывают на диск. Они лишь указывает начальную и конечную точки для записи видео в будущем. А чтоб именно начать запись на диск, надо использовать бинды, которые я опишу ниже:
- `Ctrl+z` - Начать запись на диск. Если выбран режим `ab`, то он сделает клип и закончит на этом. Если выбран режим `continuous`, то записы будет идти "бесконечно", как было сказано в описании работы этого режима
- `Alt+z` - Переключать режим записи на диск. Речь про те три режима, которые описаны над биндами
- `Ctrl+x` - Останавливает запись кеша на диск для режима `continuous`. Например, если я вижу, что онлайн видео, которое я смотрю, целиком закешировалось (это видно по цвету таймлайна), и я хочу скачать это видео, то я жму `Ctrl+z`, чтоб начать запись, а потом, через несколько секунд, жму `Ctrl+x`, чтоб запись закончить и у меня был готовый локальный файл до того, как я закрою плеер или закончу смотреть видео
- `l` - Ставит начальные и конечные точки для режима `ab`
- `Alt+x` - Понятия не имею что оно делает, по описанию не понял. Вот оригинальное описание того, что делает этот бинд - aligns loop points to keyframes (pressing again will restore the initial loop points)

### Включение нескольких звуковых дорожек

Я немного изменил `menus.lua` в визуальной теме `uosc`. Теперь там появилась возможность включать несколько звуковых дорожек разом. Израдка это может вызывать визуальные артефакты видеоряда в течении 1-2 секунд. Не знаю от чего это зависит. Вот как это работает:

- Если просто нажимать на звуковую дорожку в меню выбора аудио, то она будет переключаться. Если была активна - выключится, если была не активна - включится
- Если хочется не переключать, а активировать одну конкретную звуковую дорожку, то на неё надо нажать с зажатым `Ctrl`
- Если хочется выделить несколько звуковых дорожек, или быстро их переключать, но бесит, что меню выбора вечно закрывается, то просто выбирай дорожки с зажатым `Shift`. Тогда меню выбора звуковой дорожки не будет закрываться при выборе нового элемента

### copyStuff.lua

Бинды для копирования данных о видео:
- `Ctrl + f` - Имя файла или ссылка на видео
- `Ctrl + p` - Полный путь до файла
- `Ctrl + t` - Текущий таймкод видео, который ты смотришь (HH:MM:SS.MS)
- `Ctrl + s` - Текущий текст субтитров
- `Ctrl + d` - Продолжительность видео
- `Ctrl + m` - Метаданные видео


### Установка ff2mpv

Сначала [это](https://addons.mozilla.org/en-US/firefox/addon/ff2mpv/) расширение в браузер ставишь. Потом надо гит клон в любой каталог:
```sh
git clone https://github.com/woodruffw/ff2mpv
cd ff2mpv
```
После этого надо активировать их установочный скрипт с нужными параметрами запуска.
```sh
./install.sh chromium
./install.sh chrome
./install.sh brave
./install.sh edge
./install.sh firefox
```
Если в списке нет нужного браузера, то надо ставить для кастом браузера, с указанием того, на чём он основан и с путём:
```sh
./install.sh custom-chromium $HOME/.config/chromium
./install.sh custom-firefox $HOME/.mozilla
```

В моём случае надо было указать команду так:
```sh
./install.sh custom-firefox $HOME/.librewolf
```

### Бинды стандартного mpv

Тут будут бинды для стандартного mpv плеера, которые я чаще всего использую. Полный список биндов можно увидеть [тут](https://mpv.io/manual/master/#interactive-control)

| Бинд                       | Действие                                     |
| -------------------------- | -------------------------------------------- |
| `[` and `]`                | Плюс минус 10% скорости видео                |
| `{` and `}`                | В два раза ускорить/замедлить видео          |
| `Backspace`                | Сбросить скорость видео                      |
| `q`                        | Закрыть плеер                                |
| `Лево` и `Право`           | Перемотка на 5 секунд. С шифтом на 1 секунду |
| `Низ` и `Верх`             | Перемотка на минуту. С шифтом на 5 секунд    |
| `p` или `Пробел` или `ПКМ` | Пауза                                        |
| `.`                        | Один кадр вперёд                             |
| `,`                        | Один кадр назад                              |
| `Скрол вертикальный`       | Редачить громкость                           |
| `Скрол горизонтальный`     | Перемотка видео                              |
| `f`                        | Фулскрин                                     |
| `Esc`                      | Выйти из фулскрина                           |
| `s`                        | Сделать скрин в `~/Pictures/mpv`             |
| `L`                        | Зациклить видео                              |
| `r` and `R`                | Двигать субтитры вверх и вниз                |


### Остальные бинды, в одном месте для удобства

Если надо скачать видос, то `ctrl + z`, когда весь видос закешировался, то `ctrl+x`. Если надо клип онлайн видоса, то `alt+z` для смены режима на a-b loop, потом `l` ставит начальную точку, повторное нажатие вторую точку, третье нажатие отменяет выделение. Чтоб выделение заклипать, тоже `ctrl+x`. Если после этого захотелось скачать весь видос, то надо два раза нажать на `alt+z` для включения нужного режима

Если клипать локальные видосы, то там `g` начало, `h` конец. Если нажать `G`, то начальный таймкод будет ноль, а для `H` конечный таймкод в конце видео. Рендерить в сильно ужатом mp4 можно через `ctrl+r`, чтоб в дс удобно кидать без подписки. Рендерить в исходном качестве можно через `alt+r`

На `F6` включена нормализация громкости голосов

### Известные баги

Из-за моего скрипта, на выбор нескольких звуковых дорожек, нельзя менять качество аудио при стриминге. Чтоб это исправить, закомментируй строки `170-215` и расскоментируй строку `216` в файле `scripts/uosc/lib/menus.lua`. Тогда всё должно снова заработать

Если хочешь всегда видеть интерфейс, а не только при наведении на нужную часть экрана, то в файле `script-opts/uosc.conf` надо заменить `proximity_in` на 174 строке на `9999`

Если у тебя видеокарта нвидия, то в `mpv.conf` надо убрать `vaapi` в значении `hwdec`

Если хочешь сделать паузу на лкм, а не пкм, то в файле `inputs.conf` я вставил и закомментировал стандартные бинды для кнопок мыши. Можешь их изменить, сделав игнор на пкм и паузу на лкм.
