はじめに

こんにちは!会津大学学部2年の伊藤優汰です。私はユオレイ ( Xは@yuorei71、GitHubはyuorei )という名前で活動しています。普段は主に Go を使用してバックエンド開発を行っていたり、個人開発として動画配信サイトの作成も行っています。

2024年3月の1ヶ月間、CA Tech JOB の一環として株式会社 AbemaTV のインターンシップに参加させていただきました。私はコンテンツエンジニアリングチームに配属され、そこで得た経験や学びについて紹介させていただきます。

 

 

CA Tech JOB に参加した目的

私自身が動画配信サイトの開発を手がけているうちに、普段使っている ABEMA の動画技術や仕事に魅力を感じ、インターンシップへの応募を決めました。この機会に、サイバーエージェントの働き方や社風を身近に感じてみたいと考えました。

 

 

コンテンツエンジニアリングについて

コンテンツエンジニアリングチームは、ABEMAのコンテンツを管理し、最大限に活用するための重要な役割を果たしています。このチームのビジョンは、「MediaAsset(つまり、映像や音声などのメディア資産)の価値を最大化する」ことです。これを達成するために、彼らはクラウド技術を中心としたICT(情報通信技術)を活用して、コンテンツの供給網(メディアサプライチェーン)を最適化しています。

加えて、コンテンツエンジニアリングチームは「マスタリング」というプロセスを通じて、動画を最適な形式に変換したり、「QC(Quality Control)」というプロセスを通じて、映像の品質を管理しています。これらの作業を通じて、彼らは提供するコンテンツの品質を確保しています。これらの活動が、視聴者の皆さんが楽しむことのできる高品質なコンテンツ作りにつながっています。

 

タスクについて

 

タスクが生まれた背景

今回のインターンシップでは、コンテンツ供給網 ( メディアサプライチェーン ) の中で、特に生放送の映像をクリップし、SNS に公開するフローの最適化プロジェクトに参加しました。

 

ABEMA ではスポーツライブの中継配信を行なっていますが、その中でライブ中にクリップされた映像を YouTube や TikTok、ABEMA ビデオ、ABEMA TIMES に投稿しています。

 

SNSにおいては「速報性」が重視されており、早ければ早いほどみられやすいという特性があるため、業務を効率化・最適化することは、速報性を担保する上では非常に重要です。

 

コンテンツエンジニアリングチームでは、これらの課題を解決するために、VMC ( Video Mastering Console ) と呼ばれる生放送の映像をクリップする Web ベースの社内向けプロダクトの開発を行っています。

 

 

タスクのミッション

 

SNS / ODM (オンデマンド) にアップする上で必要な要素として、映像とサムネイルがあります。今回は、サムネイル制作を効率化することを目的に開発を行いました。

 

従来の SNS / ODM用の切り出し制作においてサムネイルの作成は以下の手順で行われております。

 

  1. VMCでクリップした動画を制作者のローカルにダウンロード
  2. 動画編集ソフトでフレームの切り出し
  3. サムネイルを編集して各種 SNS / ODM にアップロード

 

上記手順の中でボトルネックとなっているのは、2.のフレームの切り出しとなります。ツールをまたぐことにより、認知負荷や作業負荷が高くなっていました。

 

VMC 上でサムネイルを取得可能にする開発を行うことで、1ツールで作業を完結することができます。

 

プレビュー映像からスクリーンショットを撮ればいいのではと感じる方がいるかもしれませんが、プレビュー映像はあくまで映像確認用の低品質の映像であるため、素材としては適切ではありません。そのため、別途同時録画している高品質の映像から切り出します。

 

 実装の詳細

 

上記のアーキテクチャで VMC でのフレームキャプチャ機能を実現させました。

 

UI としては VMC 上に新しくカメラボタンを配置し、ユーザーは書き出したいフレーム位置でこのボタンを押下します。すると、VMC クライアントは API に書き出しリクエストを行い、API はリクエスト内部でフレームの書き出しを行うワークフローを起動します。このワークフローの構築には AWS サービスを簡単に連携させてワークフローを作成できる AWS Step Functions を使用しました。また、ライブ映像 ( HLS ) からのフレームの切り出しには AWS Lambda 上で FFmpeg を利用して行っています。

 

 

書き出しの進捗状況は Amazon DynamoDB で一元的に管理し、VMC のクライアントは API を通じて最新のステータスをポーリングして確認します。これにより、クライアントはフレームのダウンロードが可能なタイミングを把握しています。

書き出し完了後、切り出した高品質のフレーム画像がローカルにダウンロードされます。

 

 

工夫した点、詰まった点、学んだ点

 

処理速度を意識したフレームの書き出し

先ほど説明したようにサムネイル制作においては速度が大切です。そのため、ライブ映像からフレームを書き出す処理速度が遅ければ意味がありません。

今回ライブ映像の HLS から特定のフレームを切り出すために FFmpeg という動画、音声の変換、処理を行えるツールを使用しました。

 

FFmpeg には正確なフレームの切り出しを行うビデオフィルター ( -vf ) オプションやソース指定( -i) の後に配置する (-ss) オプションを使用した時間指定での切り出し方法があります。しかし、この正確性を重視した FFmepg のコマンドでは HLS の全てのセグメントファイルをダウンロードしようとするため、処理時間が大幅に掛かってしまいます。

 

この問題を解決するために、以下の手順を踏んで目的のフレームを切り出しました。

 

  1. キャプチャしたいフレーム位置を開始点としたクリップ(尺は1秒間)を作成
$ ffmpeg -ss [開始時刻] -t 1 -i "input.m3u8" output.mp4

 

2. 生成したクリップ動画から先頭1フレームを画像として切り出す

$ ffmpeg -i "output.mp4" -vframes 1 output.png

この方法で実際に切り出し時間を計測した結果、元素材の尺やフレーム位置に依存せず、約5秒ほどで切り出す事ができました。こうして速度を担保しつつ正確なフレームの切り出しを実現しました。FFmpeg や HLS といった動画技術を学べるのは、ABEMA のコンテンツエンジニアリングチームならではだと思います。

 

セキュリティ

 

クラウド周りのセキュリティでも学びがありました。これまでの個人開発では内部でセキュアに映像を扱うことを意識していませんでしたが、実際の現場では映像を外部に露出しては問題となってしまいます。

今回 FFmpeg を利用しAWS Lambda 上で S3 に保存されている HLS を安全に取得する必要がありました。デフォルトでは AWS Lambda と Amazon S3 が VPC の外にあります。その状態で AWS Lambda から S3 にアクセスする場合、外からインターネット経由でアクセスするようになってしまいます。

 

そこで FFmpeg を動かしている AWS Lambda を VPC に紐づけ、VPC Endpoint 経由で S3 にアクセスすることで安全に HLS を取得しました。

 

また VPC Endpoint を設定しない場合、気づかずのうちに Nat Gateway 経由で外部からアクセスしていて Nat Gateway のコストがかかってしまうケースがあります。このようにプライベート通信することはセキュリティ以外にもコスト面でもメリットがあることを学びました。

 

 

スタジオ見学

 

スタジオ見学に行ってきました。

Chateau Ameba (シャトーアメーバ) とは、サイバーエージェントが所有するテレビ番組配信・テレビ番組収録兼用のスタジオ、および ABEMA の番組制作拠点です。

本格的なスタジオであったり、配信機材を見せていただきました。テレビ局とは違ったABEMA ならではの工夫を知ることもできました。今回私が作った機能はここからライブ配信された映像からフレームをキャプチャしています。

とても貴重な機会でした。

 

 

発表

インターンシップの最終週には、インターン生と内定者がそれぞれ3分間で自身の活動や学びを発表する機会が設けられました。それぞれが異なるテーマやプロジェクトに取り組んでいたことが印象的でした。

 

そして最終日にはチーム向け発表があります。ここでチームにこの1ヶ月のインターンシップでやった成果を発表しました。また実際に作った機能を使ってもらいました。

今回の機能はビジネス的にもかなり大きいことを改めて実感することもできました。

 

 

ランチ

ランチには一部補助が出たためメンターさん、トレーナーさん、コンテンツエンジニアリングチームの方やABEMAの他チームの方などさまざまな方とランチにいくことができました。動画技術についてや、サイバーエージェント、コンテンツエンジニアリングチームのこと、他のチームではどんなことをしているのかといったお話をすることができました。

※ 一部ランチではない画像があります。

 

その他

CA Tech JOB の制度としてインターンシップ生にはトレーナーとメンターがつきます。

主にトレーナーと相談したり行動をともにします。わからないことがあった場合には丁寧に教えていただけたため大変助かりました。

 

チームの方と1on1をすることができたためチームの方がやっていることや、その他さまざまなアドバイスをいただくことができました。

 

インターンシップ期間中には、週に1度の人事面談が設けられていました。ここでは、進捗報告や、今後のキャリアについての話し合いを行いました。

 

また、サイバーエージェントは、仕事の効率化を図るための生成 AI の導入にも力を入れています。具体的には、GitHub Copilot の導入や、社内向け AI チャットボットの設置、さらにはPRを自動で要約してくれる CodeRabbit の導入などを行っています。特に CodeRabbit は非常にわかりやすく、私自身の開発にも導入したいと思いました。

 

 

インターンシップの感想

非常に有意義なインターンシップとなり、大変充実した経験を得ることができました。特に、新機能の開発に一から関与できたことは大きな達成感を感じさせてくれました。また、自分が関心を持っていた動画技術の領域に携わる機会を得られたことも大きな収穫でした。この過程で、機能開発に必要なクラウドの知識を学ぶことができ、さらにミーティングへの参加を通じて問題解決の視点を確認することができました。スタジオ見学に行くことができたのもよかったです。このインターンシップを通じて、サイバーエージェントやABEMAについて深く理解することができました。

また、トレーナーとなっていただいた鈴木 寛史 (@shellingford330)さんには大変お世話になりました。この1ヶ月間、本当にありがとうございました。

 

まとめ

とても楽しいインターンシップでした。特に動画に興味がある人には特に楽しい環境でした。ABEMAならではのことに挑戦できてよかったです。

 

1ヶ月間ありがとうございました!