Небольшой ffmpeg скрипт для удобной быстрой конвертации видео

Так как тут один чел запостил гайд на тему пакетной обработки видео ffmpeg'ом, решил тоже всё-таки запостить свой небольшой скрипт и метод для удобной конвертации, который я тоже себе недавно написал.

3434

Другим его будет сложновато под себя адаптировать.

Например, -crf 0 в ffmpeg обычно означает lossless-качество, но в SVT-AV1 этот режим (пока) не сделали*, поэтому по счастливой случайности выбирается авто-качество. А вот в libaom-av1 сделали.

-async 1 мог перекочевать из других советов, потому что это неочевидная опция ресемплера**, заданная неочевидным образом***, нужна ли она на самом деле - можно долго думать.

Есть ошибка в zscale=width=%width%:height=-1, из-за 4:2:0 надо сделать высоту гарантированно кратной двум (height=-2).

hwaccel логично сделать целиком отключаемым, а выбор кодека хардкодить под себя.

Комментарии помогают.

* https://gitlab.com/AOMediaCodec/SVT-AV1/-/issues/1636
** https://ffmpeg.org/ffmpeg-resampler.html#:~:text=async
*** https://ffmpeg.org/ffmpeg-resampler.html#:~:text=may%20be%20set%20by%20specifying%20-option

Ответить

Например, -crf 0 в ffmpeg обычно означает lossless-качество, но в SVT-AV1 этот режим (пока) не сделали*, поэтому по счастливой случайности выбирается авто-качество. А вот в libaom-av1 сделали.

Видимо раньше означало. В двух двугих перекодировщиках в cq значение "0" означает автоматическое определение. Выполни ffmpeg -h encoder=h264_nvenc или ffmpeg -h encoder=hevc_nvenc, посмотри что он тебе выдаст. Подскажу: "-cq E..V....... Set target quality level (0 to 51, 0 means automatic) for constant quality mode in VBR rate control (from 0 to 51) (default 0)"

Есть ошибка в zscale=width=%width%:height=-1, из-за 4:2:0 надо сделать высоту гарантированно кратной двум (height=-2).

Не понял проблему, если честно. У меня всё норм.

hwaccel логично сделать целиком отключаемым, а выбор кодека хардкодить под себя.

Без проблем. Сделай себе если тебе это надо.

Ответить

Ещё если видео кодируется только ради залива на видеохостинг, то можно не думать над настройками и не выбирать медленный AV1. Потому что видеохостинг ещё раз переконвертирует видео со своими настройками. Всё что нужно - дать ему достаточно качественный исходник, об эффективности кодирования можно почти не думать (если интернет не медленный).

Ответить

-async 1 мог перекочевать из других советов, потому что это неочевидная опция ресемплера**, заданная неочевидным образом***, нужна ли она на самом деле - можно долго думать.

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

Ответить

У меня ещё есть способ превращения filtergraph'а из заклинания в читаемый код, но тут он не нужен (эту строку для HDR=>SDR используют как раз как заклинание, в её смысл вникать не обязательно)
https://pastebin.com/j7dTCsDf

Ответить