Мой рабочий компьютер - Macbook Air 2020 (Intel), и его вполне хватает для написания кода и прочих задач. Однако, когда потребовалось смонтировать небольшой видеоролик, выяснилось что мощи моего ноута катастрофически не хватает, и я стал искать варианты.
Что я пытался сделать
Я не занимаюсь профессиональным монтажом видео, и впервые уткнулся в эту тему пытаясь сделать вот такой небольшой демонстрационный ролик для Teamplify (с озвучкой помог Мэтт, наш учитель английского):
На первый взгляд, тут ничего сложного - это же просто трехминутный скринкаст с озвучкой и парой незатейливых эффектов. Однако, видимо по неопытности, я встретил на этом пути какое-то неожиданное количество подводных граблей. После нескольких неудачных попыток, я пришел к трем важным выводам:
Обязательно нужен сценарий, и его важно написать заранее, продумав дословно все что будет говориться и делаться в кадре;
Записать это единым куском практически невозможно - то замешкаешься где-то, то ошибешься, то интернет подтупит;
Нельзя просто так взять и записать качественный звук в домашних условиях.
В итоге, конечный результат я собирал в After Effects из множества отдельных коротких видео, скриншотов, и аудио-фрагментов, которые подгонялись по таймингу, и на них накладывались эффекты с переходами:
Фоновую музычку изначально добавлять не планировал, но оказалось что она прекрасно маскирует не совсем качественную запись с микрофона, так что добавил.
Монтаж видео требует ресурсов
Мои попытки работать с видео на Macbook Air были похожи на мучение. Оказалось, что After Effects любит побольше памяти, и моих 16ГБ явно не хватало. Ноутбучный проц и слабая видюха также не улучшали картину. Превью в After Effects работало с сильными лагами. Финальный рендер трехминутного ролика занимал 3 часа (!!).
Если бы у меня был настольный игровой комп с видюхой и кучей памяти, наверное, приключения на этом бы и закончились, но у меня такого не было, а идея вложить в него пару тысяч долларов (да и вообще иметь такую бандуру дома) мне не нравилась.
Что нам может предложить AWS?
Мне он предложил примерно следующее:
Регион eu-north-1 (Стокгольм), пинг до меня ~30мс (я живу в Вильнюсе), до Москвы чуть побольше, но тоже неплохо - около 40мс;
Сервер g4dn.2xlarge - 8 ядер, 32ГБ, Nvidia Tesla T4, 225 GB NVMe SSD;
Образ винды с дровами от Nvidia;
Цену в $1.166 в час. И это кстати еще одна причина выбрать Стокгольм, ибо во Франкфурте на ~12% дороже.
Разумеется, можно взять и побольше, и поменьше. На момент написания статьи цены в Стокгольме такие (инстансы с Nvidia Tesla T4, на винде):
Подготовка к работе
Для коннекта к серверу я использовал Microsoft Remote Desktop. Сначала я думал, что мне потребуются какие-то специальные клиенты, рассчитанные на стриминг видео, но оказалось что и обычный Remote Desktop неплохо справляется, никаких особенных лагов я не замечал.
Остается решить вопрос с диском и доставкой исходников на него. Тут амазона предлагает нам два варианта - EBS и Instance Store. Отличаются они следующим:
EBS - подключаемый сетевой диск, по надежности примерно как RAID 1. Такой диск в вашем сервере обязательно будет как основной, по умолчанию он небольшого размера (достаточного чтобы влезла операционка), но вы можете при желании его расширить. Данные на EBS сохраняются и после выключения сервера. Платите вы за такой диск постоянно, даже если сервер выключен, в размере $0.0836 за ГБ в месяц (в версии gp3, burstable IOPS). У EBS есть разные варианты по производительности. Можно купить гарантированную производительность, но тогда она может влететь в копеечку, или же можно остаться на “стандартном” gp3, который основан на модели burstable IOPS. Когда диск простаивает, у вас накапливаются кредиты на IO, а когда он активно используется - они расходуются. Подробнее можно почитать в доках.
Instance store - так называемый “эфемерный” диск, который может идти в комплекте к некоторым типам инстансов. В частности, к g4dn.2xlarge прилагается 225 GB NVMe SSD. Он быстрый, производительность ничем не ограничена, однако данные на нем полностью пропадают при выключении сервера (при перезагрузке - остаются).
Поскольку монтаж видео активно использует и диск тоже, использование Instance store выглядело для меня более привлекательным. По умолчанию он не монтируется как диск в Windows, поэтому нужно сделать небольшую настройку чтобы он автоматически подключался при запуске.
Когда диск готов, нужно как-то доставить на него исходники. Я использую для этого pCloud (аналог Dropbox), который установлен и на моем ноуте, и на облачном сервере. При старте сервера на нем запускается небольшой батничек, который инициализирует расшаренную папку pCloud (для исходников и результатов) и заодно создает папку для кеша After Effects:
mkdir Z:\"Teamplify Videos"
mkdir Z:\"AE Cache"
После этого стартует pCloud, который синхронизирует папку “Teamplify Videos” с исходниками. Отрендеренный результат я пишу в ту же папку, и таким образом он попадает обратно на мой компьютер.
Как возможную альтернативу Dropbox / pCloud можно еще рассмотреть что-то вроде ownCloud с хранилищем на S3. Если исходники будут выкачиваться из S3 в том же AWS регионе, что и ваш сервер, то это должно быть очень быстро, что может иметь значение при большом размере исходников.
Ну и заключительный штрих в настройке - я добавил CloudWatch alarm, который автоматически выключает сервер после пары часов неактивности, чтобы не забыть его случайно включенным и не тратить деньги.
И как это все работает?
Да вроде неплохо. Превью в After Effects нормальное, без лагов. Поскольку пинг до сервера хороший, работа на нем почти не отличается от работы с настольным компьютером. Рендер того ролика, который у меня на ноуте выполнялся три часа, на g4dn.2xlarge делается за 13-17 минут. День работы на таком сервере обходится в несколько долларов.
Из побочных плюсов - я сохраняю мобильность с ноутом, и могу работать с видео откуда угодно, лишь бы были нормальные интернеты.
P.S. После опубликования этой статьи @Stas911 подкинул идею попробовать NICE DCV вместо Remote Desktop для подключения к серверу (для EC2 - бесплатно), и я попробовал. Работает :) Запускайте сервер на базе NICE DCV AMI (версия для g4), не забудьте добавить роль инстансу чтобы оно перестало ругаться на лицензию, и установите EC2Launch v2 чтобы инстанс видел собственную мета-дату.
EC2Launch вам также понадобится чтобы подключить Instance store как диск в винде. Для этого натыкайте в нем мышкой галочку "Initialize" в разделе Volumes и перезагрузите сервер:
aik
Вы и монтируете в облаке или только рендеринг?
stebunovd Автор
Вся работа с AE в облаке, и рендер тоже там
aik
Тогда это, наверное, только для небольших роликов годится — если каждый раз файлы перезакачивать. Закинул исходные ролики, вставил переходы, отрендерил, скачал, удалил.
Для более серьёзных работ, когда данных много и работаешь несколько дней-недель, хранить данные всё же придётся в облаке. И цена вопроса может быть ощутимо выше.
stebunovd Автор
Если исходников много, я бы попробовал хранить их на S3 и монтировать каким-нибудь ownCloud. Согласно текущим ценам, хранение 100ГБ на S3 обойдется в $2.3 в месяц. Плюс, скачивание с S3 в том же регионе должно быть сильно быстрее
aik
А каким боком тут ownCloud?
Насколько быстрее? Знакомые, которые с 4К работают, с исходниками по сети смогли начать работать только после того, как на 10 гигабит перешли. Гигабита им было очень мало, ощутимо тормозило в сравнении с локальным хранением.
Понятно, что «для дома для семьи» лично мне и гигабита вполне хватило бы, у меня далеко не их требования к отзывчивости. Но будет ли хотя бы такая скорость доступа к хранилищу из виртуальных машин?
vainkop
100Gbps вам хватит? :)
P.S. у Амазона легкогуглящиеся подробные доки
https://aws.amazon.com/ru/premiumsupport/knowledge-center/s3-maximum-transfer-speed-ec2/#:~:text=Traffic%20between%20Amazon%20EC2%20and,IPs%20in%20the%20same%20Region.
aik
Должно хватить, но вопрос в цене вопроса.
В прайсах на s3 отдельно цена хранения, отдельно — цена скачивания.
Sulerad
Цена скачивания складывается из числа запросов и трафика. Но трафик в пределах одного региона бесплатный, так что в целом всё не так уж и страшно: GET идут по 0,4$ за миллион запросов, а PUT по 5$ за миллион.
stebunovd Автор
я не пользовал его, просто нагуглил что он позволяет сделать аналог дропбокса с бекендом в виде S3. Таким образом, файлы будут автоматически синхронизироваться между вашим компом и облачным. Наверняка есть и другие решения кроме ownCloud, просто он был первой ссылкой в гугле.
До 100Gbps. Но здесь скорее всего пропускная будет ограничена сетью на самом инстансе, для того же g4dn.2xlarge заявлено «Up to 25 Gigabit»
vainkop
Рекомендую обратить внимание на https://github.com/peak/s5cmd который конечно не является решением из коробки, но в некоторых случаях значительно быстрее любого другого решения.
aik
То есть s3 не место хранения исходников, а точка для синхронизации?
облачный «комп»<->s3 (owncloud)<->локальный комп?
stebunovd Автор
И место для хранения, и точка синхронизации. Исходники живут сразу в трех местах — на вашем личном компьютере, в S3, и на облачном сервере, когда вы его включите. Изменения, сделанные в любом месте, автоматически подтягиваются во все остальные. Всякие дропбоксы работают именно так, только у них свое проприетарное хранилище. Но я уверен, что можно найти альтернативы дропбоксу, которые будут работать именно с вашим S3.
Stas911
Дропбокс активно использует AWS тч не удивлюсь, если вообще все файлы тоже лежат на S3 (сходу не нашел в релизах, так ли это) aws.amazon.com/solutions/case-studies/dropbox-s3
vp7
Тут вопрос в цене.
Если вам нужно выполнять разовые работы и не хотите ждать сутками, то арендовать на пару дней облачный сервер за $50 будет намного выгоднее, чем покупать быструю машину за $2k.
А если вам на сутки нужно 10 таких машин (и в следующий раз они понадобятся через пол года), то $500 всегда лучше, чем $20k.
Если же машины нужны постоянно, то собственное оборудование окажется дешевле.
p.s. Это как с такси. Ездить по 8 часов в день каждый день всегда дешевле на своей машине, даже если водит её наёмный водитель. А ездить в общей сложности по 8 часов за 3 месяца — дешевле на такси.
stebunovd Автор
Конечно. Если бы я зарабатывал на жизнь монтажом видео, то наверное купил бы свои железки.
aik
Так я не против облака, мне некоторые тонкости использования интересны.
Stas911
Для быстрого доступа к данным, которые нужны многим пользователями или много раз (текстуры, эффекты, что там у вас есть в монтаже) можно использовать FSx for Lustre и туда подгружать для быстрого доступа данные из S3.
stebunovd Автор
Почитал про эту люстру, и чото не пойму пока, ни как ее применить, ни сколько это будет стоить в итоге… Там две версии:
По поводу стоимости не совсем понятно — она указана в МБ/с за терабайт, и при этом есть baseline и burst… бррр. У вас есть опыты пользования всем этим? Как оно работает на практике? К примеру, сколько будет стоить 200ГБ диск с производительностью аналогичной Instance Store SSD?
Stas911
С прибором для WinServer не работал, а вот FSx for Lustre трогал под Ubuntu. Фактически это очень быстрая сетевая FS, которая умеет подкачивать данные из S3 и очень быстро их отдавать машинам, куда она маунтится как сетевой диск. Очень широко используется в HPC для того, чтобы быстро загрузить исходные данные на кластер машин. Цена зависит от размера этой FS, скорости и траффика. Не так давно она был read-only (в смысле что обратно на S3 писать не умела), но там все очень быстро меняется и нужно смотреть.
stebunovd Автор
Так-то у нее минимальный размер — 1.2ТБ, что обойдется в ~$180/мес по минимальному тарифу. Плюс трафик, который походу тоже платный
Stas911
Ну никто не заставляет ее на постоянку держать. Часто ее создают вместе с кластером, считают, что нужно, и потом все грохают до следующего раза.
tmin10
Ещё цену тракфиа в/из облака надо посчитать, он там тоже, увы, не бесплатный
stebunovd Автор
Все верно, трафик тоже нужно учесть. Давайте посчитаем, во сколько обойдется закачивание 100ГБ через S3 на EC2 сервер в том же регионе. Цены берем из амазонского ценника для S3:
Итоговая стоимость — $0.00.
tmin10
Действительно, вы правы. Почему-то думал, что входящий тоже платный. Тогда остаётся только заплатить за исходящий трафик с готовым видео, 8 центов за гигабайт что у S3, что у EC2.