パッケージのインストール
まずは、今回のプログラムを実行するにあたって必要なパッケージをインストールします。 Anaconda Promptから以下の通りに入力して下さい。(僕はAnaconda Promptを使っているため、condaにしている)

プログラムの解説
ここからは、実際に使うPythonプログラムの解説をしていきます。
ライブラリのインポート
まずは、必要なライブラリをインポートします。

OAuthとAPIのセットアップ
ここでは、YouTube Data APIへのアクセスに必要な権限のスコープを定義しています。

スコープとは、APIを使用する際にアプリケーションがリクエストするアクセス権限の範囲を指定する仕組みのことで、 スコープを指定することでアプリケーションはユーザの許可を得て、YouTubeチャンネルに動画をアップロードする操作を実行できるようになります。
メインの関数
次に、メインの関数を加えます。

2~4行目について、プログラムをローカルで実行するときにOAuthlibのHTTPS検証を無効にするための設定を行っています。僕の場合は個人で利用したため、この設定を追加していますが、 通常の本番環境ではセキュリティ上の理由から無効にすべきではないです。
6~8行目について、YouTube Data APIのサービス名、APIのバージョン、クライアントの秘密鍵ファイルを設定しています。 ここでのJSONファイルについては、OAuthクライアントIDを作成した際にダウンロードするものです。詳しくは今回の記事の参考元をチェックしてください。
10~15行目について、OAuthの認証を通じてYouTube APIにアクセスするための認証情報を取得しています。
YouTube APIリクエスト
最後に、YouTube APIリクエストを加えます。

リクエスト内の、partパラメータには、「snippet」と「status」が指定されており、これにより動画のメタデータやステータスの情報がリクエストに含まれます。 また、bodyパラメータには、具体的な動画の情報が指定されています。
snippetパラメータ:動画を投稿するチャンネルIDや動画のタイトル、動画の説明、言語など
statusパラメータ :公開設定やライセンスなど
media_body=MediaFileUpload()の部分の()には投稿したい動画ファイルのパスを書きます。
参考文献
1.Python3のYouTube Data Apiで動画を投稿/サムネイル追加/動画情報の編集/削除する
2.GCPコンソール