ゲーミングPCが買えないのでAWSで動画編集してみる

# TL;DR
* 自宅のPCのグラボ性能が貧弱過ぎて、動画編集の度にフラストレーションが溜まっていた。
* そこで、AWSで高性能GPUのEC2インスタンスを使用して、リモートデスクトップ接続での動画編集とエンコードに挑戦してみた。本記事はその過程や所感を記録したものである。
* 動画編集中はサクサクでストレスフリー！！しかしエンコードが思ったより遅かった。
* 予算は、作業時間20hで約2500円程度。利用時間が予定よりやや延びた為請求額も増えたが、計画段階でのコスト試算は妥当なラインだったと思う。
* NVIDIAの高性能なGPUリソースをクラウド経由で誰でも手軽に使えるのは便利！

# ターゲットの読者層
**本記事はクラウド初心者向けを想定している。**
「EC2インスタンス起動などもあまり慣れてないし・・・」とか「セキュリティ設定わからん」「設定間違えて高額課金になったら怖い・・・」というような初心者の方でも、私と同じように趣味などのきっかけを通してクラウドを気軽に使ってみて欲しいという意図の記事になる。故に仕事で日常的にAWSを触っているような方には説明不要な余計な内容が多いかもしれないので、その点はご承知おき頂きたい。

# 背景
私は、よく趣味で旅行に行く際の鉄道の車窓やドライブの車窓の動画を録り、それをYouTubeで公開している。
しかし、私の所有しているノートPCはグラボもごく普通のCPU内蔵式であり動画編集ソフトの動作は激重である。そもそも、30分～最大5時間程度の4K動画というのは素材の動画データの全容量からしてもう重く、さらにキャプションやらエフェクトやらモザイクやらつけてエンコードすると**出力完了まで1日～1週間程度かかってしまうという有様であった**。
これでは裏で処理が重い作業はできないし、夏場なんかはエアコンをつけていても暑くなるような地獄の電気式ヒーター状態である。どうにかならないものか？？？

<details><summary>（クリックするとクラウドを使わず泥臭くやろうとした過程が長々書いてあるが、しょーもないので読み飛ばしても特に問題なし）</summary>

***
#### 解決策1：高性能GPUを積んだハイスペックなゲーミングPCを買う
当然ではあるが、エヌビディアの最新のハイスペックなグラボを積んだタワーPCを買えば、動画編集もきっとサクサクだしローカルで機械学習するにも便利だろう。と思いネットで探してみると・・・**なんと30万近くするではないか**。今のノートPCも別に壊れているわけでもないしまだ使えるのに、30万ポンと出せるほどの財力は私にはない・・・

#### 解決策2：ネカフェに行き、ゲーミングPCを使って動画編集
快〇クラブなど最近のネカフェでは高性能ゲーミングPCが数台用意されているので、ポータブルSSDに動画素材をぶち込んでおき、ネカフェに持って行って動画編集&エンコードすればよいのでは？という案。これについては過去に実際に検証したことがある。
・**メリット**：短時間であればクラウドサービスの計算リソースを使用するより安い場合も(2K～4K程度)。暇な時間で漫画を読める。
・**デメリット**：動画データを持ち運べる携帯ストレージが必須。数時間～1日ネカフェ内で拘束される。エンコードが24時間を超える長時間の場合不可(※)

※私の行ったネカフェでは、長期不法滞在者対策で24時間ごとに会計を求められる。しかし会計すると<font color="Blue">そのタイミングで利用終了とみなされてPCが自動シャットダウンしリセットされ、進行途中のエンコードデータは全て消えてしまった</font>。よほどの漫画好きならともかく、**わざわざネカフェに出向いて何時間も籠り続けるなど面倒くさいことこの上ない**。
***
</details>


ということで、パブリッククラウドでインスタンスを立てて動画編集&エンコードした方が明らかに賢明なので、やってみようと思う。WEB上で先人が既に複数の手順メモ書きを残してくれているのでそれを参考にやってみた。
（参考にさせて頂いたサイトの一覧は最後に記す）

# 所要時間
構築完了まで
AWS操作に慣れてる人→1, 2時間程度
不慣れな人→半日～2日程度
取り組まれる際は、ご自身のレベルに合わせてある程度時間を確保しておくとよいかもしれない。私は丸1日ぐらいかかった。

# 環境・構成
**AWS**
![AWS_tree_20240910.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/dd09460e-899e-5f28-b829-8bba00060780.jpeg)
パブリックサブネットにEC2インスタンス(Windows Server)を立ててEBSをアタッチし、そこにWindowsのローカルPCからリモート接続して、見慣れたWindowsベースのGUI画面上で動画編集する、というシンプルな構成。コスト重視で冗長は取らずシングルAZ構成。

:::note info
あくまで「一人作業かつ1日程度でバックアップなしでもサクっと終わる量の、趣味の動画を編集する」というユースケースを想定した構成。
仕事での利用でセキュリティ要件がより厳しい場合、長期間作業が見込まれDC障害など想定外アクシデントによる編集中ファイル滅失を避けたい場合、複数人で編集したい場合、などのケースについてはこの限りではない。
:::

| 設定項目 | 値 |
|:-:|:-:|
| リージョン・冗長 | us-east-1（シングルAZ） |
| AMI  | NICE DCV for Windows<br>(g4 and g5 with NVIDIA gaming driver) *1 <br>ベースはWindows server2019 |
| EC2インスタンスタイプ | g4dn.xlarge または g4dn.2xlarge *2 |
| EBSボリュームタイプ | 汎用SSD（gp2）または（gp3）*3 |
| EBSボリュームサイズ | （OSイメージ+動画素材+出力動画のサイズの合計）<br>今回はWinServer26GB+動画素材25GB+生成動画10GB < 75GiB |
| セキュリティルール(Inbound) | マイIPのみ許可　Port:3389, 8443 *4 |
| セキュリティルール(Outbound) | any（すべて許可） |

*1：NICE DCV対応でNVIDIAドライバ入りのAMIを選択すると、リモートデスクトップ接続の環境導入やNVIDIAのドライバインストールの手間が省けて楽。ライセンス料は不要であり、通常のWindows serverと同額。
*2：環境構築だけならxlarge（4vCPU, メモリ16GiB）で問題ないが、動画編集ソフトで編集中にCPU使用率が100％に張り付いてしまったため2xlarge（8vCPU, メモリ32GiB）に途中で変更し、編集が終わってエンコードの際にxlargeに戻した。まずは最小のxlargeで試してみて足りなければより高性能なインスタンスタイプを選び直す、で良いと思う。
*3：本手順ではgp2で解説するが、gp2はボリュームサイズがショボイとIOPSも小さい値にされてしまいボトルネックになりがちなので、予算に余裕ある方はgp3がオススメ。実際に動かしてみてからClowdWatchのEBSのメトリクスを見てみて、IOPSが足りなくて書き込みが遅くなっている場合にボリュームタイプ変更、というスタイルでも良いと思う。
*4：リモートデスクトップ接続（RDP）はポート3389が一般的だが、NICE DCVはポート8443を利用するらしい。8443だけだと接続失敗したので両方許可している。

**動画編集ソフト**
今回は[Shotcut](https://www.shotcut.org/)を使用。ソフト自体はPremiere ProでもDaVinci Resolveでもなんでもよいので、普段使っているソフトを入れれば良いと思う。が、AMIで選んだOSと互換性のあるソフトを選ぶこと。
インスタンス起動後にブラウザ起動し、上記のダウンロードページに飛んでインスタンス内で直接インストールした。

**編集する動画のサイズ**
動画素材サイズ（インスタンスにアップロードするもの）：25GB
出力サイズ予想（インスタンスからダウンロードするもの）：10GB

# 料金見積もり
上記の条件で、編集～エンコード完了まで20時間作業したと仮定して、まずはChatGPT先生に軽く見積もってもらった。動画ファイルの転送量は、作業失敗した場合を想定し多めに見積もっている。
![cost_chatGPT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/4c1cfb0d-3569-300e-d56c-a7510d7b1a51.png)
20時間で**約17ドル≒2380円**。（1ドル140円で計算）
ネカフェ行って20時間籠ってゲーミングPC使うよりは安そうだ。ちなみにEBSの汎用gp2の本当の値段はus-east-1リージョンで月額0.08USD/GBなので、上記の見積もりは実際の額よりやや高め。

一応下記のAWS提供公式計算ツールできちんと計算し、ある程度合っていることを確認した。

https://calculator.aws/#/estimate

:::note warn
高性能インスタンスを利用する性質上、**設定ミスやインスタンスの止め忘れなどがあると高額料金を請求されるリスクがある**。
利用料金については、ネットの記事を鵜呑みにせずご自身で公式ドキュメントの最新の情報を調べる、計算ツールを利用する、**利用額超過のアラートを設定するなどして高額請求にならないようご自身の責任で実施頂きたい。（本記事は一切責任を負わない）**
:::

# やったことの概要
* EC2 g系インスタンスのvCPU上限引き上げ申請
* 前準備（リモート接続用のキーペア作成、VPC作成）
* ローカルマシンへのリモート接続クライアントインストール（NICE DCV）
* EC2インスタンス起動、EBSアタッチ
* 起動後の環境整備（IEのセキュリティ設定変更、Windows Server2019の日本語化）
* 動画編集の準備（動画データの転送、編集ソフトのインストール）

# 前準備
#### EC2 g系インスタンスのvCPU上限引き上げ申請
今回はNVIDIAの高性能GPUを搭載したg系EC2インスタンスを利用するが、デフォルトではg系インスタンスのvCPUの上限値（サービスクォータ）が0となっており、インスタンスを起動しようとしてもエラーが出て失敗する。
![202409092027.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/431a6a86-4b95-09f4-c524-fe0f3cb9e4df.png)
なのでまずは、AWSのサポートにvCPUのサービスクォータを上げる申請を行わないと利用できない。申請から対応完了まで数時間～数日程度のリードタイムがかかるので、作業する前に一番最初にやっておくことを勧める。
<br>
手順については下記の通り申請すればOK。

https://qiita.com/dhirabayashi/items/03ba2a0ed1c08b1f521a


注意する点としては、お問い合わせオプションでEnglishを選択し、申請理由等も英語で記載すると日本語サポートに比べてレスが早い。私の時は日本時間で夜20時に申請し、6時間後に引き上げ完了のメールが来た。
vCPU数は8で申請しておけば特には困らないはず。私は余裕を持たせてvCPU数32で申請したが、**「大きいリソースが欲しいなら、それだけの妥当な申請理由をきちんと記述してね？」** と言われ8までしかアサインされなかった。要するにいくら適当な理由で申請しても8vCPUぐらいはちゃんとくれるということらしい。
![awsmail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/38575f33-f385-ed2e-1f2e-67e491208bce.png)

#### キーペア作成
EC2のトップ画面を開き、サイドバーの「ネットワーク&セキュリティ」＞「キーペア」の順にクリック。
右上の、「キーペアを作成」をクリックし、キーペアを新規作成する。キーペアタイプはRSA、プライベートキーファイル形式は.pemでよい。
「キーペアを作成」を押すと作成完了し、.pemファイル（秘密鍵）のダウンロード画面が開くのでDLする。EC2インスタンス側にある公開鍵に、ユーザが秘密鍵をアップロードし認証することで接続できるようになる。
.pemファイル（秘密鍵）はリモートデスクトップ接続時のパスワード復号に使う（＝攻撃者に盗まれると乗っ取られる）ので**安全かつ忘れない場所に格納しておくこと**。

#### VPC作成
※VPC作成済の方は、下記手順は実施不要。
VPCのトップ画面（ダッシュボード）から「VPCを作成」をクリック。
* 作成するリソース：「VPCなど」を選択
* 名前タグの自動生成：下の入力欄に、ネットワーク名を入力。区別しやすくわかりやすい名前がよい
* アベイラビリティゾーン(AZ)の数：「1」を選択
他はいじらなくてOK。一番下の「VPCを作成」ボタンをクリックするとVPC作成が開始される。
![VPCcreate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/47eaccb5-64f2-cf24-7626-e52011380b66.png)

#### ローカルマシンへNICE DCVクライアントのインストール
[NICE DCV公式サイト](https://download.nice-dcv.com/)からインストーラーをDLし、インストール。一番上の「client」タブをクリックして表示されたものから、ご自身のローカルPCのOSに合ったバージョンをDLすればOK。例えばWindowsユーザであれば「Windows (x86_64 and x86)」を選択。

# EC2インスタンス起動
前準備が終わったところでいよいよEC2インスタンスを起動していく。起動後からすぐ課金されるので、中断する場合はこまめに停止すること。
EC2ダッシュボードの左のサイドバーから「インスタンス」＞「インスタンス」の順にクリックし、右上の「インスタンスを起動」ボタンをクリック。
* 名前：何でもよい。適当にわかりやすいもので
* アプリケーションおよびOSイメージ：検索窓に「NICE DCV」と入力。
AMIイメージの選択画面が表示されるので（下記画像）、<strong>NICE DCV for Windows（g4 and g5 with NVIDIA gaming driver）</strong>を選択する
![AMIselect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/fb046290-7935-a8f7-23c3-b7853ea3365f.png)
※上記ボタンをクリックするとAMIの詳細や料金が表示される。「料金」タブでソフトウェア料金（＝NICE DCVのライセンス料）やEC2インスタンスの料金を確認したうえで、「インスタンス起動時に購読」をクリック。ちなみに、<font color="Red">NICE DCVのソフトウェア料金は24年9月時点では無料となっている</font>為通常のWindow server2019単独のAMIと料金は同額。
* インスタンスタイプ：**g4dn.xlarge**を選択。事前準備のサービスクォータ引き上げ申請で8vCPUまで引き上げた場合は、g4dn.xlargeかg4dn.<font color="Red">2</font>xlargeが選択可能。
* ネットワーク設定：上部右側の「編集」を最初にクリック。各項目は画像の通り入力していく
![EC2securityconfig01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/a1041376-dcea-63fd-0c26-5078cad6f7e8.png)
![EC2securityconfig02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/c1b308a7-6e80-653a-c641-3ed17c854be7.png)

* ストレージを設定：汎用SSD（gp2）ボリュームを選択。ボリュームサイズは動画編集で使いたいサイズを自分で指定する。
※上でも書いたが、<font color="Red">EBSボリュームは全部使えるわけではなくAMIのOSイメージサイズ分が最初から引かれた状態で起動する</font>ので、その分を計算に加えたうえで設定すること。Windows Serverなら大体30GB程度。
<br>
全て入力が完了したら、「インスタンスを起動」をクリック。EC2のダッシュボードで「実行中」になり起動完了するまで待つ。起動完了したら「接続」をクリック。

![connection.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/4ffc77d2-c0b3-8268-6b8d-9f976c250e8c.png)
# インスタンスへのリモートデスクトップ接続
EC2インスタンスの「接続」ボタンをクリックすると、下記のように接続に必要な情報が表示される。
「RDPクライアント」タブをクリック。続いて下の方の「パスワードを取得」ボタンをクリック。
![RDPconnection.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/2adb56ec-bf4d-b3c0-f69d-a7a218fc5115.png)
「プライベートキーファイルのアップロード」ボタンをクリックし、事前準備のキーペア作成時に保存した.pemファイル（秘密鍵）をアップロードし、「パスワードを復号化」をクリック。元の画面に戻ると、パスワードが平文で表示された。この「Public DNS」「ユーザ名」「パスワード」の3つの情報を使ってリモート接続する。

事前準備でインストールしておいたNICE DCVクライアントソフトを起動する。
下記画像の通りに、AWSの画面で確認した「Public DNS」「ユーザ名」「パスワード」を入力し接続。
![NICEDCVlogin01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/36a4145f-c12c-242e-ecc6-f0d20260c225.png)
![NICEDCVlogin02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/962616cf-c3b2-4b2b-6ff4-4e81ac726f38.png)
![NICEDCVlogin03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/0e492da4-250a-885d-ab94-51bcd4de16da.png)

下記のWindows画面が表示されれば接続成功。NICE DCVクライアントの詳しい使い方についてはここでは説明割愛する。
インスタンスを終了（＝課金停止）する際は、**必ずWindowsボタンからシャットダウンを選択すること**。
![RemoteDesktopInit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/87ae7a95-b714-85ea-3352-024ab68b1dc4.png)

ちなみにデスクトップで右クリックのメニューからNVIDIAのドライバの設定画面を開ける。しっかりドライバインストール済であることが分かる。
![NVIDIA_driver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/4e4b8c82-0dfd-3aa8-ed32-a2abd0fae8b0.png)


# Windows Server2019の日本語化
今回使用するWindows Serverはデフォルトが英語である。（NICE DCV付でないWinServer単独のAMIだと最初から日本語のパッケージもあった気がする）
最初に下記サイトの手順に従ってとりあえず日本語化と、時計のローカルタイム変更を行っておくと使いやすい。最後に再起動手順があり、再起動されるとNICE DCVのウインドウは一旦閉じるのでもう一度NICE DCVクライアントを起動し、パスワード等入力して再接続すること。

https://zenn.dev/supersatton/articles/807635bdb0a85b

# Internet Explorerのセキュリティ設定変更、Chromeインストール
起動してスタートメニューを開いてみると分かると思うが、Windows Server2019は普通のWindows10や11のPCでデフォルトで入っているようなソフトが全然入っていない。
そして**ブラウザソフトもInternet Explorerしか入っておらず（公式サポート切れてませんでしたっけ・・・？）**、そのIEを開くと**なんか警告がやたら出てまともにWEBサイトを閲覧できない状態だったりする**。
このままではどうしようもないので、まずは下記の手順の通りIEのセキュリティ設定を緩める。IEではもう閲覧できないサイトもあったりするので、Chromeもついでにインストールしておくとよい。

https://qiita.com/onishi_820/items/87fce8b08397013d1a9b

# 動画編集の準備
#### 動画編集ソフトのインストール
上手順でインストールしたChromeブラウザ（IEでもよいが）経由でDL、インストール。

#### 動画素材をローカルマシンからインスタンス上に転送する
NICE DCVクライアントにもファイル転送機能はあるが、使ってみたところなんか異様に重い気がしたのでやめた。
セキュリティ面を気にしないのであれば、[ギガファイル便](https://gigafile.nu/)などのアップローダーサイトを使用したほうが多分早い。ちなみに実績ベースにはなるが、EC2インスタンスの通信速度は下り140～170Mbps程度出た。

**ここまでやれば構築準備は全て完了。実際に使ってみよう。**


# 実際に使ってみての評価
#### 処理面（動画編集中）
![動画編集中のGPU02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/cc98df95-2bb2-af89-b542-54d09d170118.png)
モザイクやキャプション、クロマキー合成など**エフェクトモリモリでもストレスフリーで編集できる**。自宅のPCでやっていた時は一つ変更を加えるたびにフリーズ、編集結果のプレビュー動画は再生すらまともにできないという惨状だったので、劇的な進歩である。<font color="Red">これは検証成功ということでいいだろう</font>。<br>重い4K動画にあれこれ手を加えてもGPU使用率5～10％程度しか使っていないというのはさすがNVIDIAというべきか。ただ最新のGeForce4000シリーズとかとベンチマーク比べるとこのTesla T4もだいぶ性能的には劣るのだがそれでもこの余裕っぷりという。


#### 処理面（エンコード、書き出し）
![動画編集中のGPU03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/15452dd3-2f7e-ac8a-4786-a02a89d064e4.png)

**うーん、思ったより遅い**。こんなものだっけ？
30分の長さの動画を書き出すので20h程度。1、2時間の動画を書き出すので35～40h程度だった。
リソース見ると「Video Encode」の使用率は5～10%程度。一応GPUは仕事はしているらしい。となると動画編集ソフトの要求に対してGPUはオーバースペックすぎるということだろう。<br>ClowdWatchで確認するとEBSはスループットは余裕そうだがIOPSがややネックになってそうな気もしたので、汎用SSD（gp2）⇒同（gp3）の最小スペックに上げ、IOPSを3000にしておいた。
<br>
ただこれでも、ローカルマシンで20～40時間ガンガン回し続けて熱を吐き続けながら書き出すよりは、AWS上でバックグラウンドで処理してくれる方が便利だなとは感じた。

#### コスト面
![costexplorer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/6aae4092-2e97-9834-7617-1e9e6002c647.png)
20時間で約$17≒2380円（1ドル140円）と試算したが、
実際は、**24時間起動、$20.04≒2805円**となった。うーん、高え・・・

今回、初回でインスタンス起動など環境構築に結構手間取ってしまった＋書き出し前の動画編集でそれなりに時間を費やしたので予定より4時間ほど延びてしまったが、per利用時間での試算自体はまあまあ妥当なラインだったといえる。<br>インスタンスの単価が高い分、g4dnインスタンスを使用する時間のON/OFFにはシビアになり余計な請求を減らさないといけないと感じた。例えば、ローカルからEC2インスタンス上への動画素材のアップロードや、完成した動画のローカルへのダウンロードを行う際はローコストロースペックのt2インスタンスに変えておいて、安く済ませる、などというのも大切だろう。

# 感想とか改善点とか
* 冒頭で初心者向け記事と書いたが私自身もオンプレや社内IaaSなどを触る仕事が多く今年から初めてAWSやAzureを触り始めた為、初めて自力で本格的なクラウド構築をやったなという達成感はあった。
* 一方で、アーキテクチャ的には「計算ノードとストレージつけてリモートデスクトップ接続するだけやろ簡単やん」と内心どこかで思ってた節もあり、ネットワークやらセキュリティやらインスタンス起動後の環境整備やらで思ったより手こずったという感触も大きい。
* <strong>NVIDIAの高性能GPUの計算リソースを自宅で気軽に使えちゃうのはスゴイ。</strong>今後も、自宅開発やってて機械学習やデータ分析などでリソース要求が発生したらガンガン使っていきたい。
* 今回は30分ほどの動画の編集で約3000円だったが、5時間とかの長時間動画編集エンコードだと1万円コースの請求も発生しうる。
私のユースケースではぎりぎりクラウド編集を続けた方が安く済みそうだが、頻度が多いならハイスペックPC買った方が安くね？ということにもなりうるので、高コストのインスタンスを利用するならばそこのコスト意識には注意し続けたい。

# 参考
今回の手順はこの方の手順をメインに参考にさせて頂いた。加えて、途中で分からず詰まったところなどを補足でメモする形とした。

https://qiita.com/chinakiss2014/items/e9346b3dd5b6c70cc1fa

Linuxインスタンス×Davinchi Resolveでトライされた方の手順。

https://davmemos.hatenablog.com/entry/2022/03/06/233320

AWS社員直々に構築ソリューション例を説明されている記事。ストレージにFSxを採用しているが、追加で認証基盤のADの設定も必要となる為、個人利用レベルではやや冗長感がある。長時間、複数人プロジェクトで作業される方にはこちらの方がいいかもしれない。

https://aws.amazon.com/jp/builders-flash/202306/edit-in-the-cloud/