はじめに
今年(2017年)もあとわずかとなったわけですが、12月25日まではクリスマス用の飾り付けやイルミネーションが飾られていたところが、26日になると正月用の飾り付けに切り替わるのを見るたびに、毎年「中の人は大変だなぁ」と思います。
でも、クリスマス関係の動画を24日までに作って、年末までに今年のまとめ的な動画でそれなりのクオリティのものを作ろうとすると、なかなか大変です。特に、今年のまとめ的な動画の作成スケジュールは年賀状書きなどのスケジュールと重なるので、それはもう大変です。
そこで、今年自分のチャンネルにアップロードした動画のメタ情報をYouTube Data API v3を使って取り出し、その情報を利用してまとめ的な動画を作ることにしましたので、作り方について書いていきます。
動画の作り方の概要
なぜYouTube Data API v3を使うのか?
なぜアップロードした動画のメタ情報をわざわざYouTube Data API v3を使って取り出すのかというと、
「アップロードした数十個(またはそれ以上)ものメタ動画の情報を手元で管理するのが面倒だから。」
です。アップロードした動画は一応手元にはあるのですが、それを一個ずつ手元のPCから探してリストアップするのはそれなりに手間がかかります。年末の忙しい時期にその手の作業はあまりやりたくないところです。
そもそも、どんな動画を作るのか?
あまり人手をかけずに作れて(=エンコーディングは多少時間がかかってもよい)、ちょっとおしゃれそうな動画ということで、以下のようなものを考えてみました。
- 今までにアップロードした動画が右から左に流れていく。
- ただし、動画の大きさや流すタイミングやそのスピードなどは乱数で決定する。
これで勝てると思います!!✨
手作業よりもプログラミング。
手作業は正直言ってモチベーションが上がらないのと、プログラムを書く方が効率が良さそうだったり、正確に処理ができそうだったら、プログラムを書いた方がいいわけです。そこで、Python3で以下の2つのプログラムを書いてみます。
- YouTube Data API v3を使ってメタ情報を取り出し、JSONファイルに書き出すプログラム。
- 前項のJSONファイルを読み込んで、AviUtlエクスポートファイル(exoファイル)を出力するプログラム。
なぜ2個のプログラムに分割したのかというと、YouTube Data API v3は1回実行すれば十分なことと、2個目のプログラムについては試行錯誤的な調整が必要だったからです。2個目のプログラムの処理内容については後述します。
アップロードしたファイルの情報を取り出すプログラム
書くべきプログラムは決まったので、YouTube Data API v3のドキュメントや前の記事前の記事を参考にしてサクサクとプログラムを書いていきます。まずは、アップロードしたファイルの情報のうち、YouTubeにおけるID、タイトル名、ファイル名及び再生回数をJSONファイルに保存するプログラムを以下の通り書いてみました。
なお、プログラム中にあります”client_secrets.json”はYouTube Data APIの認証情報で、事前に作成しておく必要があります。
スポンサーリンク
上記のプログラムをコマンドラインプロンプトから以下のように実行すると”UploadedVideoDataList.json”という名前の出力ファイルが生成(すでに同名のファイルが存在する場合には上書き)されます。
なお、出力ファイル名については以下のコマンドラインオプションで変更することもできます。
- -o, –output-file-prefix: 出力されるファイル名を指定します。指定しない場合には”UploadedVideoDataList.json”という名前の出力ファイルが生成(すでに同名のファイルが存在する場合には上書き)されます。
JSONのファイルがサクサクと作れるのはありがたいです。
exoファイルを出力するプログラムの作成。
次に、前項のプログラムで出力したJSONファイルを読み込んで、exoファイルを出力するプログラムを書きます。
以下のような感じになります。例によって色々と決め打ちですが、流す動画の特徴などを意識しながら調整できるところはこの段階で調整しておきます。
なお、以下のコマンドラインオプションを指定することもできます。
- -o, –output-file-prefix: 出力されるexoファイルの先頭の文字列を指定します。AviUtlでは1つのシーンに設定できるフレームの上限は100フレームですので、挿入するフレームの調整をしないで50枚以上の動画を使おうとすると、exoファイルを2個以上に分割する必要があります。本プログラムではこれに対応するため、出力するexoファイルの先頭の文字列のみを指定する方式としています。したがって、出力されるファイル名の末尾に50枚ごとに”0.exo”,”1.exo”,…で終わる文字列が付加されます。
- -c, –cmd-line: 読み込んだJSONファイルに記述されているファイルを探すためのコマンドが書かれたファイルを指定します。例えば以下のように記述したファイルを作成し、本コマンドラインオプションの引数として指定します。
where /r c:\User\Administrator
- -u, –uploaded-json-file-list: 動画のファイル名が記述されているJSONファイルを指定します。
- -l, –length-in-frames: 作成される動画の長さをフレーム数で指定します。
例えば、pandanote-infoチャンネル(2017年12月31日現在)に対して以下のような感じで実行する(入力用のJSONファイルはすでに作成されているものとします。)と、”pandanote_0.exo”という名前のフレーム数が1200(30fpsの場合は40秒の長さ)のファイルが生成されます。
exoファイルをAviUtlに読み込ませて、ひたすら試行錯誤。
前項で作成したexoファイルをAviUtlに読み込ませます。これは、AviUtlを起動して拡張機能のタイムラインへexoファイルをドラッグ&ドロップすると以下のような感じで読み込ませることができます。
読み込ませたら、エンコーディングを行って動画ファイルを作成します。
出来具合がイマイチだと思ったら、いろいろと調整してexoファイルを作成→エンコーディング→出来具合を確認の手順を繰り返します。
できあがった動画
前節で作成した動画にシャドーエフェクトを加えると、ちょっとおしゃれな動画の出来上がりです。
できあがった動画は以下のような感じになります。作成に要した時間はエンコーディングの時間を除くと1時間くらいです。
まとめ
この記事では、年末年始のクソ忙しい時にちょっとおしゃれな動画を作る方法について考察し、実際に作ってみました。
途中で乱数を使ったりするので、試行錯誤的な要素が入ってしまいますが、何かできるかわからないという意味でのワクワク感は出せると思います。
この記事は以上です。