Как с помощью консольной утилиты перегонять видео с YouTube-а в H265 для автономного просмотра на шлеме (рецепт для различных проекций исходных видео)
#1 - начали
Оставим лирику типа "зачем такие извращения, есть же премьер\давинчи?" за кадром.
Все манипуляции производились на Windows 10. На убунтах и прочих никсах все точно так же, за исключением установки отсутствующего софта.
Для перегона потребуются самые свежие версии:
YT-DLP (скачивание роликов с видеохостингов) (
FFMpeg (конвертация видео) (
Распаковываем все скачанное в одну папку. В пути желательно избежать кириллицы и пробелов... да и вообще всего, что не латиница и цифры. Главное для нас, чтобы в корне папки лежало 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 мегабайт на скачивание пары консольных утилит и две команды для их работы в консоли.