どうもこんにちは。
趣味で録画サーバー作ったりエンコードしたりしていたら、それが上司にバレて本職でも動画の配信基盤を作るようになり、気がついたら配信基盤のプロダクトオーナーになっていたyanoshiです。
突然寒くなりましたね。
冬といえばエンコードが捗る季節!エンコードしまくって部屋を温めよう!!!!!
とはいえ近頃はパブリッククラウド全盛期。一時的なコンピューティングリソースであればコスパ良くボタンポチで用意できる時代です。
突然AV1のエンコードをしてみたくなったのですが、手元にある環境はクソ非力で、流石にAV1の劇遅エンコードを耐えられる環境ではありません。
ならばAWS上でエンコードしようと思ったのですが、環境構築がめんどくさい…
あーーボタンポチで追加コストも無く各種エンコーダーがビルド済みで設置できるソリューションがあれば良いのになぁー
使い方
詳しくはREADME.mdを読んでね!って感じなんだけど、ちらっとだけ説明を書いておきます。
AWS上への展開はVagrantとVagrant Pluginであるvagrant-awsを利用して行っています。
初期設定ではオレゴンリージョン(us-west-2)にc4.8xlargeインスタンス(1.591USD/時間)を展開します。
予め下記の5つをAWSコンソール上で設定及び取得しておいてください。
- アクセスキー
- シークレットアクセスキー
- EC2用のキーペア
- 上記キーペアに対応するプライベートキーファイル
- オレゴンリージョン上に存在するデフォルトVPCとデフォルトセキュリティグループの設定でSSH(22番ポート)が疎通するようにしておく
デフォルトVPCとデフォルトセキュリティグループについては、存在しなければ自動的に作成されます。が、初期で作られる子はSSHが疎通しないのでよしなに設定変更してください(その場合一番最初のvagrant upは中途半端に失敗しちゃうかも)
あとは上記設定に従って .env ファイルを記載し…
echo EOF > .env
# EC2 Auth Config
EC2_ACCESS_KEY_ID="アクセスキー"
EC2_SECRET_ACCESS_KEY="シークレットアクセスキー"
EC2_KEYPAIR="キーペア名"
SSH_KEY_PATH="キーペアに対応するpemファイルのパス"
# VM Config(下記は変更不要)
EC2_REGION="us-west-2" # US West Oregon
EC2_INSTANCE_TYPE="c4.8xlarge"
EC2_AMI="ami-01ed306a12b7d1c96" # CentOS 7
EC2_USERNAME="centos"
EOF
起動するだけ!
vagrant up
込み入った使い方
vagrant sshすれば色々とできるわけですが「さっと上げてエンコード終えたらすぐインスタンス削除したい!」って場合は下記みたいコマンドを叩きましょう。
(予めsync_folderに動画ファイルを設置しておく必要があります)
vagrant up \
&& vagrant ssh -- -t \
'ffmpeg \\
-i /sync_folder/test_input.mp4 \\
-c:v libaom-av1 \\
-strict experimental \\
-row-mt 1 \\
-cpu-used 1 \\
-crf 30 \\
-b:v 2000k \\
-c:a libopus \\
-ac 2 \\
-ar 48000 \\
-b:a 128k \\
/sync_folder/test_output.mp4' \
&& vagrant rsync-back \
&& vagrant destroy -f
注意点
プロビジョニングにかかる時間
時は金なり。
ffmpegの方で20分程かかりました。
なのでPackerとかでAMIに固めるほうが本当は良いのかもしれませんね。それはまた後日必要に迫られたら以下略
最後に
みんなも使ってね!あと何か気になることがあればプルリクどうぞ。