Вот уже почти год мы записываем подкаст, и если сначала сведение и выкладывание эпизода занимали больше часа, то сейчас затраты времени сократились больше чем в два раза. Автоматизировано все, что можно. В облаках. Почти бесплатно!
Подробный разбор безумных шагов подготовки, дикого количества задействованных сервисов, стремных костылей и открытых исходников под катом.
Пишемся мы онлайн из разных стран. Потом я собираю наши дорожки воедино, добавляю теги, разделы, текст, ссылки и публикую (про инструменты я писал отдельную статью). Хотелось сделать весь процесс максимально рутинным, чтобы уменьшить ошибки, и автоматизировать эту рутину, чтобы можно было сфокусировать на интересном — подготовке новостей и записи. Еще хотелось сделать бесплатно и по-максимуму обойтись без кода, или хотя бы без серверов. Сразу скажу, без кода не вышло, а вот без инфраструктуры — вполне. Итак по пунктам.
1. Локальные скрипты и VS Code
Начиналось все без них, но быстро выяснилось, что скрипт на Python удобнее и проще пачки других инструментов. Перед началом записи скрипт проверяет номер последнего эпизода, и создает папку под новый, куда кладет шаблон шаблон будущего текста и тут же открывает его в VS Code. Сам скрипт можно тоже запускать по хоткею из того же Code. Очень удобно!
2. Airtable
Дальше идет сбор информации. Поначалу я все собирал в текстовые файлы, и они были главным хранилищем данных, но потом перенес в Airtable. Теперь у нас есть таблица всех эпизодов, всех новостей, о которых мы говорили, всех ссылок на источники.
Можно даже посмотреть, кто из хостов в каком эпизоде участвовал. Airtable — очень простая база данных, но с дружелюбными функциями, например можно делать динамические столбцы: так я сделал столбцы "Заголовок" и "Полный текст", которые автоматически собираются из названий и текста отдельных новостей (мы в подкасте обычно рассказываем 2-3 научно-технических новости). Еще можно представить любую таблицу в виде канбан-доски, это позволяет мне перемещать эпизод по разным стадиям продакшена, чтобы не забыть ни одной.
На создание и изменение данных в Airtable можно вешать простые действия. Например, они сами заполняют мне номер нового эпизода и отфильтровывают предыдущие. Автоматизации Airtable довольно убогие, отработки даже очевидных ошибок нет, но с экспериментами и такой-то матерью все в целом работает. Мы даже получаем уведомление через бота в телеграм-чат ведущих, что эпизод создан и можно делать свои новости.
3. Google Drive и Google Apps Script
Да, у гугла есть бесплатный облачный сервис запуска скриптов отдельный от App Engine, и в нем можно например повесить действия на события почты или Гугл-Драйва, куда Zencastr (в нем мы пишемся) складывает дорожки. Скрипт замечает новые файлы, перекладывает их туда, откуда их может забрать Auphonic (в нем мы сводим) и дергает веб-хуки Airtable, чтобы обновить статус эпизода.
4. Integromat
За всеми этими изменениями следит Integromat, с которого все автоматизации и начинались. Integromat — реально лучший продукт в нише простой человечной автоматизации. Поддерживает огромное количество сервисов из коробки и снабжен замечательно подробными инструкциями. Но... сейчас он остался только для того, чтобы слать апдейты через бота во внутренний Телеграм-канал и делать репосты из Facebook. Причина — в бесплатной версии можно запускать 1000 автоматизаций в месяц, вроде достаточно для еженедельного подкаста, но веб-хуки поддерживаются для очень малого числа сервисов (нельзя узнать, что обновился пост в ВК или файл в Драйве), а каждая попытка активного поллинга, считается за операцию. Так что 1000 исчезает за неделю. Частично решить проблему можно на тех сервисах, которые сами могут дергать внешний хук или слать емейл (Интегромат умеет их принимать и парсить), но далеко не все это позволяют. Так и появился Google Script.
5. Auphonic
На удивление хорошо сделанный сервис для автоматического умного сведения, умеет разделять музыкальные и голосовые дорожки, приглушать их в нужных местах, выравнивать уровни и много чего еще. При этом все можно делать "с помощью мощного API", который и вызывает упомянутый выше скрипт на питоне, остается только дождаться, когда все срендерится и ляжет обратно на Google Drive, откуда можно запустить еще один скрипт.
6. ffmpeg
Оказалось, что один раз прочитать большую и тяжелую инструкцию к ffmpeg проще, чем каждый раз руками дергать ручки в Garage Band, который в качестве бонуса создаст гигабайты промежуточных данных и перетрет все субтитры. ffmpeg в две простых команды (на github) определяет длительность эпизода, подрезает фон под эту длительность, накладывает его на голос с эффектом затухания в конце, и еще и сохраняет субтитры. Магия!
7. Markdown
Наш хостинг не поддерживает заливку через API (единственный их недостаток) поэтому приходится копировать в него текст руками. Чтобы не вставать два раза, я пишу его сразу в Markdown, а превью в VS Code позволяет скопировать уже отформатированный текст напрямую. Его же берет последний скрипт и перекладывает в Гитхаб с статическим сайтом, который сделан на Hugo, и принимает маркдаун напрямую.
Итоги
Как это все работает? Как-то работает. Я бы сказал, местами нормально, местами отвратительно.
Хуже всего автоматизации в Airtable: там периодически происходят флуктуации силы, и тригер может сработать на "отсутствие данных", а потом счастливо отвалиться по причине того, что записи не найдены. Вообще обработка пустых случаев на сегодня там отсутствует, но удобство платформы в остальном, и наличие хоть каких-то бесплатных автоматизаций перевешивают недостатки.
Дальше идет Integromat при всем своем удобстве он быстро стал бутылочным горлышком. Кроме того, обработка ошибок там хоть и есть, но ее нужно создавать отдельно ("вилка" на фото выше), если что-то не предусмотреть (а предусмотреть не получится) скрипт тут же падает, и полностью деактивируется сервисом, пока не "починишь". От Интегромата я однозначно планирую избавляться и оставлять только локальные скрипты, тригеры из Эйртейбл и чат-бота.
Немного неудобно переносить данные между текстовыми файлами и Эйртеблом, но это я планирую побороть прямым доступом к их API.
Не получается также напрямую делать репост между разными социалками, у них разный формат, разные ограничения на длину, на то как вставляется картинка и т.п. Все инструменты для автоматизации этой части обычно заточены под SMM-щиков, и не сильно подходят, скорее всего тут придется добавить еще один питон-скрипт.
Возможно читатель задается вопросом, а нафига так сложно то? Во-первых потому, что половина критичных в этой цепочке сервисов (хостинг, запись) или не имеют API, или предлагают базовую интеграцию только с Дропбоксом и Гугл Драйвом, так что работать приходится с одним из этих двух вариантов. Во-вторых потому, что хотелось проверить можно ли сегодня на популярных публичных сервисах полностью автоматизировать подкастинг без кода и платы за AWS/Azure/DO... Ответ — пока нельзя, но с помощью нехитрых скриптов можно сильно сократить время продакшена. За неполный год время потраченное на написание всех этих костылей уже окупилось, и теперь можно привести их в порядок, и сделать Подкаст-Пайплайн V.2 проще, но мощнее.
P.S. С радостью выслушаю примеры решения похожих автоматизационных задач, или советы по упрощению (весь код доступен в Гитхабе).