Делаем видеодиск для PlayStation без VideoCD-аддона (видео + статья) (Old-Hard № 89)
Хотите сделать видеодиск для PS1, записав туда любимое видео? Нет? Поздно, я под это дело уже написал скрипт и теперь хочу поделиться им с вами :)
Начнём с главного: скрипт создания образа диска с видео лежит на гитхабе в разделе релизов, там же находится пошаговая инструкция на русском языке. С картинками! Написан скрипт под виндовый CMD, так что для его использования никаких дополнительных библиотек или утилит качать не надо, всё есть в архиве. Перетаскиваем видяшку на скрипт, ждём, нажимаем кнопку, ждём, нажимаем вторую кнопку, ещё немного ждём, профит! Ну или нет, но об этом — ниже.
Предпосылки
В конце девяностых (начале двухтысячных?) отечественные пираты начали продавать диски с фильмами, которые можно смотреть на PS1 «без использования дополнительных модулей». И спустя почти 20 лет мне захотелось научиться делать подобные диски. Никакой практической пользы, просто just for fun. В результате получился скрипт и видео на эту тему, причём само видео тоже можно посмотреть на PS1 :) Ссылка на образ и запасная ссылка ждут самых любопытных!
Суть решения
Содержимое подобных пиратских дисков довольно банальное: файл видеоплеера, файл с фильмом и PS1-аналог autorun-файла.
И в интернете относительно просто найти старенькую утилиту Movie Converter от компании Sony, которая умеет конвертировать несжатое видео в формат STR, адаптированный для проигрывания на PS1. Причём эта утилита умеет загружать собственные скрипты с параметрами обработки, чтобы не нужно было каждый раз всё прописывать вручную.
Так что может показаться, что процесс создания своего диска очень просто автоматизировать:
Профит? Ну… не совсем. У пиратского плеера есть ряд недостатков, но главную свинью подложил Movie Converter: как я понял, он умеет работать только с устаревшим стандартом AVI-файлов, и не понимает файлы больше 1 ГБ. При использовании разрешения 320x240 с 15 кадрами в секунду и моно-звуком с дискретизацией 37.8 кГц в этот объём укладывается примерно 10 минут видео (точнее что-то в районе 9 минут 50 секунд). Если подсунуть ему видео длиннее — он выдаст ошибку, остановив конвертирование, а мы получим в выходном файле первые ~10 минут видео.
И никаких альтернатив этому конвертеру я не нашёл. Точнее нашёл, но они тоже не умели правильно читать файлы больше 1 ГБ. В интернете при поиске утилит в основном находятся конвертеры ИЗ формата STR, а не В него.
Конечно можно было бы использовать ещё более низкое разрешение и качество звука, чтобы уместиться в 1 ГБ, но вот беда — выдранный с пиратского диска плеер на других настройках ничего путного не показывает. Да и терять ещё сильнее в качестве картинки не хочется…
Тем не менее, решение было найдено, пускай и несколько костыльное. На просторах сети я отыскал другой плеер для PS1, способный показывать симпатичное меню для выбора одного из нескольких клипов.
Но что ещё круче — он играет эти клипы последовательно! Так что можно разбить видеофайл на куски короче 10 минут, после чего — собрать образ диска уже с этим плеером. Я выбрал вариант «4 файла по 8 минут», на выходе это даёт что-то в районе каноничных 650 мегабайт данных. Сейчас конечно в ходу болванки по 700 мегабайт, но олдскульщики то помнят!
С разбиванием файлов на куски опять таки прекрасно справляется FFmpeg, а Movie Converter умеет конвертировать файлы в пакетном режиме, так что проблема казалось бы решена. Но у решения есть проблемы, связанные с попыткой сделать всё одновременно автоматизировано и лениво:
- на переходах между файлами может спотыкаться как изображение, так и звук
- если длина меньше 32 минут и помещается не в 4, а в 3 файла — в меню выбора файла всё равно будет 4 главы
- перемотка работает кривовато, причём «назад» можно перемотать только до того клипа, с которого вы начали. Выбрали первым 3 файл из 4? Перемотать до 1 и 2 вы уже не сможете, только через выход в меню
- сделанный мною «дизайн» меню выглядит вот так вот страшненько. Цифры в меню — минуты, с которой начнётся воспроизведение. Меню никак не меняется даже если видео существенно короче 32 минут. Цифра внизу не просто так обрезана - здешнее меню скроллится, стрелка же стоит на месте.
При этом в открытый доступ я выложил оба варианат скрипта, и для ~10-минутных видео, и для 32-минутных, так что можете использовать в то, что вам сейчас лучше подходит.
Другие нюансы
- PS1 выдаёт на экран картинку в формате 4:3, если скрипту дать видео с другим соотношением сторон — на этапе конвертирование в видео будут автоматически добавлены чёрные полосы. FFmpeg — мощная штука!
- Использованные плееры не умеют ставить воспроизведение на паузу, только перематывать видео вперёд и назад крестовиной геймпада. Для паузы можно использовать воркэраунд: если открыть крышку консоли — воспроизведение поставится на паузу, а после закрытия — продолжится с момента остановки.
- По окончанию воспроизведения плеер зависает, остаётся только перезагружать консоль
- Для временных файлов может понадобиться до 4 ГБ на диске со скриптом
- Видео конвертируется в разрешение 320x240 с 15 кадрами в секунду и моно-звуком с дискретизацией 37.8 кГц. В принципе консоль поддерживает в этом разрешении до 30 кадров в секунду и стерео-звук, но в такой ситуации снижается общий битрейт видео (скорость привода то ограничена), как следствие — повышается число артефактов сжатия
- Образ создаётся для стандарта PAL. Второй плеер имеет версию для NTSC, но скрипт готовился в первую очередь для себя, а у нас в стране в ходу были чипованные консоли, работающие с любым регионом.
Напоследок ещё раз повторюсь, что делалось всё это чисто развлечения ради. Но если вы захотите написать свой плеер для PS1, свой конвертер в видео-формат STR или придумаете как улучшить скрипт, используя текущие утилиты — милости прошу на гитхаб :)