Communitygithub.com

ショート動画公開エクスプレーナー

縦型解説動画のフォルダから最もバズりそうなエピソードを選び、目を引くサムネイルとキャプションを作成し、Chrome上のClaudeを使ってYouTubeショートとInstagramリールに投稿します。ユーザーが「投稿」「公開」「アップロード」、またはチャンネルのプロフィールやブランディングを更新したいと依頼した場合に使用します。

ショート動画公開エクスプレーナー とは?

このスキルは、**Only Sci Facts**チャンネル(YouTube `@onlyfactsci`、Instagram `onlyfactsci`)向けに設計された、縦型解説動画(9:16 MP4)の公開を支援するエンドツーエンドのワークフローです。エピソードフォルダからバズりやすい動画を選定し、アップロード用に圧縮し、目を引くカバー画像とキャプションを作成し、YouTubeショートとInstagramリールの両方にClaude(Chrome操作)を通じて自動投稿します。投稿後は公開状態を確認します。このスキルは、`ffmpeg`、Python 3(`Pillow`、`numpy`)などのスクリプト依存関係を利用し、`scripts/`ディレクトリ内のスクリプトで動作します。また、チャンネルのプロフィール画像やバナー、バイオなどのブランディング更新もサポートします。ユーザーの意図しない公開を防ぐため、常に確認を促すルールが組み込まれています。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/pranaykrpiyush/video-publishing-skill/tree/HEAD/publish-explainer-shorts

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

解説ショート・リールの公開

Only Sci Factsチャンネル(YouTube @onlyfactsci、Instagram onlyfactsci)向けのエンドツーエンドワークフロー: エピソードを選ぶ → アップロード用に圧縮 → カバーを作成 → キャプションを書く → YouTubeショートとInstagramリールに投稿 → 確認。 任意の9:16 MP4解説動画フォルダで動作します。

スクリプトはこのファイルの隣の scripts/ にあります。ない場合は、https://github.com/pranaykrpiyush/video-publishing-skill をクローンして publish-explainer-shorts/scripts/ を使用してください。

スクリプトには ffmpeg、ffprobe、Python 3(Pillow、numpy)、およびInter Displayフォントが必要です。太字のサンセリフフォントであれば、FONT_DIR 環境変数で指定することで使用可能です。

0. 開始前の確認

  • エピソードフォルダをユーザーに確認する(または見つける)。エピソードは NN-slug.mp4 という名前です(例:14-falling-into-a-black-hole.mp4)。
  • リクエストに明記されていない場合は、投稿するエピソード数とプラットフォームをユーザーに尋ねる。
  • ユーザーがChromeでYouTube StudioとInstagramにサインインしていることを確認する:各サイトを一度開いて確認する。
  • すでに投稿済み? YouTube Studioのショート一覧とInstagramのグリッドを確認し、同じエピソードを二重投稿しないようにする。

1. 最もバズりそうなエピソードを選ぶ

  1. 在庫確認:scripts/inventory.sh <folder> を実行し、各ファイルの再生時間、解像度、オーディオレベルを表示する。

  2. 以下の条件に該当するものを除外する:

    • 60秒を超えるもの(ショートとして機能はするが、完視率が低下する)、または1080×1920でないもの。
    • 無音または音声がクリッピングしているもの(最大音量が-0.5 dBを超える)。
    • プラットフォームが抑制するトピック(例:「LSD mirrors」エピソードのような薬物、グラフィックまたは医療コンテンツ)。
    • すでに投稿済みのエピソード。
  3. 内容を確認する。scripts/contact_sheet.sh <video> <out.jpg> で4秒ごとのフレームを1枚の画像にまとめる。そのシートを読む。

  4. 残った各エピソードを以下の基準で5点満点で評価する:

    • 最初の1秒でフックするか:大きな数字、パラドックス、「もし〜したらどうなるか」。
    • 好奇心のギャップ:直感に反する答え。
    • 視覚的なドラマ:ブラックホール、銀河、爆発は図表より優れている。
    • コメントを誘発するか:自由回答の質問や複数の競合する答え。
    • 幅広い魅力:宇宙や人体はニッチなトピックより優れている。

    宇宙のパラドックス(ブラックホール、フェルミのパラドックス、スターダスト、ダークマター)は通常、最高得点になる。

  5. 各エピソードの選定理由を一言添えてユーザーに伝え、その後続行する。ユーザーが選択を依頼した場合を除き、承認を待たない。

2. アップロード用に圧縮する

Chrome拡張機能の file_upload ツールは 3.8 MB を超えるファイルを拒否する。再エンコードされたファイルは、ユーザーが自分でファイルを選択した場合にも保持される。

scripts/compress_for_upload.sh <in.mp4> <out.mp4>

このスクリプトは、-preset slow を指定したCRF 26のx264、96kのAAC、+faststart で実行する。その後、元の動画とのSSIMとサイズを表示する:

  • 目標SSIMは少なくとも0.995、視覚的にロスレス。
  • ファイルがまだ3.8 MBを超える場合は、CRF=28 で再実行する。

出力はエピソードフォルダ内の upload-ready/ サブフォルダに配置する。元のファイルを上書きしない。

3. カバーを作成する

python3 scripts/make_cover.py --style blackhole \
  --kicker "もしも" --headline "落ちたら?" \
  --tagline "2つの結末。|どちらも真実。" --out 14-cover.png

python3 scripts/make_cover.py --style galaxy \
  --kicker "100,000,000,000の星" --headline "みんなは|どこに?" \
  --tagline "宇宙船なし。|信号なし。" --out 12-cover.png

python3 scripts/make_cover.py --style frame --video 05-why-the-sky-is-blue.mp4 --at 12 \
  --kicker "なぜ空は" --headline "青いの?" --tagline "海を映して|いるわけじゃない。" --out 05-cover.png

引数の説明:

  • --headline 内の | は改行を挿入する。
  • --tagline 内の | はテキストを白の部分とオレンジの部分に分割する。
  • --style frame は、エピソードの焼き込みキャプションの間にあるアートワークを持ち上げる。アートの端にラベルが表示される場合は、--art-top / --art-bottom でバンドを移動する。デフォルトはソースフレームの420ピクセルと1300ピクセル。

各カバーは1080×1920で、すべてのテキストは中央の1080×1350領域内に収まるため、Instagramのグリッドクロップでも保持される。

コピーライティングのルール:

  • 見出しは質問または衝撃的な数字。大文字で2〜4単語に抑える。
  • キッカーはその設定をする。
  • タグラインは、答えを明かさずに結果をほのめかす。

使用前にすべてのカバーを確認する:Readで開く。

4. キャプションを書く

YouTubeのタイトル。 70文字以内に抑え、動画が答える質問として表現し、絵文字と #shorts を追加する。例:What happens if you fall into a black hole? 🕳️ #shorts

説明とInstagramのキャプション。 両方のプラットフォームで同じテンプレートを使用する:

<フックライン:パラドックスまたは大きな数字> <絵文字>

<2文:結果を平易な言葉で>

<コメント誘発質問:「どちらを信じますか?👇」/「どちらのバージョンを体験したいですか?👇」>

Follow (@onlyfactsci on IG) for a new mind-bending science fact every day 🚀

#<トピック> #<トピック2> #space #science #universe #astronomy #spacefacts #shorts|#reels

5. YouTubeショートに投稿する(Chrome上のClaude)

  1. chrome-browserスキルを読み込む。tabs_context_mcp を実行し、新しいタブを開く。
  2. https://studio.youtube.com/channel/<CHANNEL_ID>/videos/upload?d=ud にアクセスする。チャンネルIDはサインイン後のStudio URLに表示される。
  3. ファイルを添付する:
    • まず find "file-input" を試し、次にデバイスパスを指定して file_upload を実行する。
    • 既知の制限: file_upload は、ユーザーの接続フォルダにあるファイルを拒否することが多い(「このセッションで読み取りが許可されているファイルのみ」)。再試行は1回まで。ユーザーに Select files をクリックして upload-ready/<file>.mp4 を選択するよう依頼する。自分で Select files をクリックしない。ネイティブダイアログが開き、表示できないため。
  4. 詳細:
    • タイトルフィールド:クリックし、ctrl+a、その後入力。
    • 説明:クリックし、その後入力。
    • #タグ を入力すると候補ドロップダウンが開く。Escapeキーではなく、ダイアログの空の部分をクリックして閉じる。
    • 視聴者設定:find で「いいえ、子供向けではありません」を見つけ、scroll_to してクリックする。
    • サムネイル:ユーザーがサムネイルの下の Upload file をクリックし、カバーを選択する。Studioはカスタムショートサムネイルを受け付ける。
  5. Next を3回クリックする(動画要素、チェック、公開設定)。公開 を選択し、公開 をクリックする。
  6. 確認:/videos/short を開き、get_page_text を実行する。新しいタイトルに 公開済み と表示されていることを確認する。

6. Instagramリールに投稿する(Chrome上のClaude)

  1. https://www.instagram.com/ を開く。「通知をオンにする」は 後で で閉じる。
  2. サイドバーの 作成 をクリックし、投稿 をクリックする。
  3. ユーザーが Select from computer をクリックし、MP4ファイルを選択する。YouTubeと同じファイル選択の制限あり。
  4. クロップ手順: Instagramのデフォルトは 1:1 で、動画が正方形にクロップされる。
    • プレビューの左下にあるクロップアイコンをクリックし、オリジナル を選択する。
    • プレビューが縦長(9:16)であることを確認し、次へ をクリックする。
  5. 編集手順: ユーザーが「カバー写真」の横にある Select From Computer をクリックし、カバーPNGを選択する。
    • カバーが動画と一致していることを確認する。 プレビューを再生し、内容とトリム長(例:フェルミは55秒、ブラックホールは47秒)を比較する。ユーザーは間違ったカバーを選びやすい。
    • 次へ をクリックする。
  6. キャプション手順:
    • キャプションボックスをクリックし、キャプションを入力する。
    • 末尾にスペースを入れて、ハッシュタグのドロップダウンを閉じる。
    • ユーザーから依頼がない限り、「Facebookと共有」はオフのままにする。
  7. 共有 をクリックする。find で「新しいリールダイアログヘッダーの共有ボタン」を見つけ、参照でクリックする(座標はダイアログのサイズ変更でずれるため)。
  8. 「リールが共有されました。」というメッセージが表示されるまで待ち(20〜40秒)、完了 をクリックする。

7. プロフィールとブランディング(依頼があった場合)

  • python3 scripts/brand_assets.py --outdir <dir> で以下を生成する:
    • onlyscifacts-profile-picture.png:1024²、オレンジのリングを持つブラックホール。
    • onlyscifacts-youtube-banner.png:2560×1440、1546×423の安全領域内にテキスト。
  • Instagram:
    • 自己紹介:instagram.com/accounts/edit/、その後 送信。
    • 名前:accountscenter.instagram.com/profiles/、アカウントを選択、名前、その後 完了。14日間に2回しか変更できない。
    • 画像:アカウントセンター、プロフィール写真、新しい写真をアップロード。ユーザーがファイルを選択する。
  • YouTube: studio.youtube.com/channel/<ID>/editing/profile にアクセスする。
    • 説明:入力する。
    • 画像:変更。バナー:アップロード。ユーザーが両方のファイルを選択する。
    • 公開 をクリックする。
    • チャンネル名は14日間に2回しか変更できない。名前を変更する前に確認する。
  • 保存する前に、必ず自己紹介と説明テキストをユーザーに表示し、承認を得る。プロフィールの変更は公開される。

ルール

  • 投稿は公開され、元に戻すのが難しい。ユーザーが依頼したものだけを投稿する。リクエスト以外の操作(以前の投稿の編集、投稿のアーカイブ、チャンネル名の変更など)は、まず確認する。
  • パスワードを絶対に入力しない。サイトがサインインを求める場合は、ユーザーが行う。
  • 公開された内容をタイトルと公開状態とともに報告する。ファイル選択など、ユーザーに残された作業があれば言及する。

関連スキル