Автоматическая генерация историй через GPT-4
Мультимодальный telegram-бот, который я недавно сделал, получил оглушительный успех 😊 Я был удивлен, сколько людей воспользовались им и форкнули/лайкнули на гитхабе. Но захотелось чего-то большего.
Я решил создать сервис, где люди могут создавать свои собственные комиксы, сказки, да и вообще любые истории. Желательно одним нажатием кнопки.
Моя идея заключалась в том, чтобы создать программу, которая бы могла генерировать истории на основе небольшого числа параметров. Это был язык, затравка для генерации текста, визуальный сеттинг, и т.д. Я знал, что для этого мне нужно использовать GPT-4, какое то API для картинок, переводчик, и синтезатор речи. После быстрой проверки, оказалось что все это доступно и не так уж дорого!
В голове родилась следующая картинка:
Некоторые технические моменты опишу ниже.
Картинки
Решил использовать старый добрый Stable Diffusion, ведь он дешевый (даже опенсорсный, но я использую API) и довольно неплохо рисует, а MidJourney все равно закрыт.
Генерирую изображение, соответствующее описанию каждого шага сцены. Кроме того, я добавил различные визуальные стили и сеттинг, чтобы сделать изображения более привлекательными и соответствующими контексту сцены. Например, я использовал стилизацию изображений в стиле Star Wars, Disney, Marvel и т.д. Все это на выбор пользователя.
В результате я получаю набор изображений в едином стиле, которые готовы для генерации видео.
Недавно в одном сообществе подбросили почти гениальную идею – не создавать картинки, а гуглить их на Google Pictures. Это бесплатно, быстро, и в некоторых случаях даже лучше работает, например для новостей. Определенно реализую.
Звук
Когда я только начал работать над проектом, я столкнулся с проблемой – как сделать так, чтобы пользователи могли не только читать, но и слушать созданные истории?
И тут мне пришла в голову идея озвучивать кусочки текста через Google Text-to-Speech. Он позволяет создавать реалистичное голосовое сопровождение на разных языках и с различными голосами.
Нужно лишь разбить текст, сгенерированный GPT-4 на абзацы, и отправить каждый абзац на озвучивание. Таким образом, пользователи могут читать историю и одновременно слушать ее озвученную версию. Это делает процесс чтения более интересным и увлекательным, а также помогает людям, которые предпочитают слушать текст, а не читать его.
Видео
Самым сложным оказалась сборка истории через videoshow.js.
Для создания видео я создал объекты, которые будут содержать информацию о каждом кадре видео. Для этого я использовал примерно такой код:
const videoOptions = {
fps: 25,
loop: 5,
transition: true,
transitionDuration: 1,
videoBitrate: 1024,
videoCodec: "libx264",
size: "640x?",
audioBitrate: "128k",
audioChannels: 2,
format: "mp4",
pixelFormat: "yuv420p",
};
const imageDescriptions = [
{ path: "path/to/image1.jpg", caption: "Caption 1" },
{ path: "path/to/image2.jpg", caption: "Caption 2" },
{ path: "path/to/image3.jpg", caption: "Caption 3" },
];
const audio = "path/to/combined/audio.mp3";
В этом коде я определил параметры видео, такие как частота кадров, длительность цикла, битрейт видео и аудио, а также размер видео и формат файла. Также создается массив объектов, каждый из которых содержит путь к картинке и ее описание, а также путь к одному большому аудио файлу.
Далее я создал массив объектов, каждый из которых будет представлять собой кадр видео:
const frames = [];
for (let i = 0; i < imageDescriptions.length; i++) {
const image = imageDescriptions[i];
const frame = {
path: image.path,
caption: image.caption,
loop: 5,
};
frames.push(frame);
}
В этом коде я прохожу по каждой картинке и создаю объект кадра, который содержит путь к картинке, ее описание и длительность кадра.
Наконец, собирается видео, используя созданные ранее объекты:
videoshow(frames, videoOptions)
.audio(audio)
.save("path/to/output.mp4")
.on("start", function (command) {
console.log("ffmpeg process started:", command);
})
.on("error", function (err, stdout, stderr) {
console.error("Error:", err);
})
.on("end", function (output) {
console.log("Video created in:", output);
});
Довольно много времени ушло на отладку всего этого. И вот, для примера, одна из получившихся историй:
Глобализация
Генератор историй не привязан к языку, является полностью глобальным. На самом деле, на любом языке из списка Google Text-2-Speech.
Так что в моих планах запуск в том числе и на американский рынок, ProductHunt, Y Combinator и все такое 😏 Буду рад любой поддержке в этом направлении.
Философские вопросы
Наконец, использование контента, созданного искусственным интеллектом, вызывает несколько философских вопросов. Например, какова роль человека в создании и использовании такого контента? Каковы этические вопросы, связанные с использованием искусственного интеллекта для создания контента, который может имитировать человеческий разум и поведение? Каково будущее создания и использования контента, созданного искусственным интеллектом, и как это повлияет на нашу культуру и общество в целом? Эти вопросы требуют серьезного обсуждения и размышления, чтобы мы могли максимально эффективно использовать потенциал искусственного интеллекта в нашем мире.
Но я решил сначала сделать, а потом уже думать об этом 😊
Будет ли автоматический контент достаточно высокого качества?
Сегодня существуют алгоритмы, которые способны создавать достаточно качественный тексты, звук, изображения. Однако, пока что они не могут заменить творческий потенциал человека и создать нечто совершенно новое и оригинальное.
Функция редактирования истории может помочь в том чтобы сделать контент более качественным и интересным. Редактирование позволяет улучшить и доработать отдельные слайды, исправить ошибки, добавить новые элементы, расставить ударения наконец. Кроме того, редактор всегда может внести свой творческий вклад.
А что думаете вы? Интересный ли проект? Стали бы пользоваться? Какие способы монетизации посоветуете?
UPD: ознакомиться с проектом можно по этой ссылке