FFMpeg, Oculus Quest 2 и 360-градусные видео с YouTube
14.07.2023
Категория : IT-шная

Как с помощью консольной утилиты перегонять видео с YouTube-а в H265 для автономного просмотра на шлеме (рецепт для различных проекций исходных видео)

#1 - начали

Оставим лирику типа "зачем такие извращения, есть же премьер\давинчи?" за кадром.

Все манипуляции производились на Windows 10. На убунтах и прочих никсах все точно так же, за исключением установки отсутствующего софта.

Для перегона потребуются самые свежие версии:

YT-DLP (скачивание роликов с видеохостингов) (win/linux/mac)

FFMpeg (конвертация видео) (win)

Распаковываем все скачанное в одну папку. В пути желательно избежать кириллицы и пробелов... да и вообще всего, что не латиница и цифры. Главное для нас, чтобы в корне папки лежало 2 файла - yt-dlp.exe и ffmpeg.exe, все остальное можно удалить.

#2 - качаем с YouTube

YT-DLP поддерживает передачу аргументов командной строки в ffmpeg, если тот (как в нашем случае) лежит рядом. Но нам этого не нужно, так как 360-градусные видео на YouTube могут быть в 2-х проекциях (на момент написания статьи):

Эквидистантная проекция. Она нам подходит как есть.
Эквидистантная проекция. Она нам подходит как есть.
Равноугольная кубическая карта. Вот ее нужно преобразовывать в эквидистантную проекцию.
Равноугольная кубическая карта. Вот ее нужно преобразовывать в эквидистантную проекцию.

Так что сначала скачиваем видео, потом смотрим в какой оно проекции и в зависимости от этого запускаем ffmpeg.

Для скачивания видео в максимально возможном качестве пишем:

yt-dlp.exe -f bestvideo+bestaudio --continue --windows-filenames --merge-output-format mkv %youtube_video_url%

В команду добавлены некоторые полезные ключи: докачка при обрыве связи, windows-friendly имена файлов и сохранение результата в формате MKV (тут как раз автоматом используется рядом лежащий ffmpeg). Вкусовщина одним словом, т.к. основное тут -f bestvideo+bestaudio.

#3 - конвертируем

Для конвертации используем одну из двух команд:

(эквидистантная проекция)

ffmpeg.exe -y -i "%input_video_filename_with_extension%" -hide_banner -c:v libx265 -vtag hvc1 -maxrate 50M -bufsize 200M -c:a copy "%output_video_filename%_h265.mkv"

(равноугольная кубическая карта с конвертацией в эквидистантную проекцию)

ffmpeg.exe -y -i "%input_video_filename_with_extension%" -hide_banner -vf "v360=eac:equirect,scale=iw:-2" -c:v libx265 -vtag hvc1 -maxrate 50M -bufsize 200M -c:a copy "%output_video_filename%_h265.mkv"

Прошу обратить внимание на то, что в именах результирующих файлов в строке команды дописаны суффиксы _h265 и расширение mkv. Первое сделано для того, чтобы случайно не начать перезаписывать исходный файл при старте конвертации, а второе - чтобы ffmpeg "знал", что выходной формат должен быть Matroshka, который Oculus Quest 2 потребляет с удовольствием и в котором отлично хранятся 8K-видео, в отличии от MP4, в который такой размер не лезет (если я за MP4 верно помню), any way!

#4 - заключение

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

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

Еще никто не оставил комментария
    Добавить комментарий