見出し画像

再生数が伸びやすいYouTubeショートの長さは〇〇秒と判明!再生回数TOP500件のデータから検証&分析【運営レポート4週目】

皆様ハロー、プログラミングのおかげで毎日サボれてるスマイルです('ω')ノ

切り抜き動画アカウントのレポートも4週目になりまして、youtube studioの再生回数を見るのが毎日の楽しみになってきました。無料で遊べる趣味としてyoutubeってのもありっすね。

切り抜き動画チャンネルの運営レポートは下記のマガジンにまとめています↓↓

記事が面白かったらフォロー&♥よろしくお願いしますm(_ _)m



今週の成長

ショート動画オンリーのチャンネルですが成長推移はこんな感じ。

  • チャンネル登録者:+25人

  • 再生回数:+19,389回

始めたばかりなので何にも分かりませんが、完全に無名で他チャンネルの補助ナシでのスタートなのでこんなもんなんじゃないかと。


日次レポート

今週から「動画の作り方」別に成績を評価するABテストを始めました、グループAの成績は出揃いまして、今は対戦相手のグループBの投稿&データ収集中です。

ABテストの結果は来週中に出るのですごい楽しみ、今週のレポートはそこら辺に焦点を当てた内容になっております。


2月21日

  • チャンネル登録者:+0人

  • 再生回数:+6,858回

今まで公開された動画データを眺めて気付いた事を別章の「データ分析&ABテスト」にまとめた。

エンゲージメント率を上げるための作戦を色々考えた1日でした。


2月22日

今日はパチンコが出る日。誘惑に抗う。

  • チャンネル登録者:+1人

  • 再生回数:+1,052回

データ分析の結果、思い付いた動画の改善案がこちら。

  • くしゃみシーンを冒頭にもってくる

  • くしゃみシーンを増やす

  • 動画内で何回くしゃみをするか視聴者に伝える

これらをchatGPTと相談しながら具体的な動画編集方法に落とし込む、よし、とりあえず作ってみんべ。

と思ったら、yt-dlp+moviepyで自動切り抜きした動画をDaVinci Resolveに読み込ませるとなぜかオーディオが認識されない。なんでや??他のプレイヤーでは普通に音が出るのに。

内部的にオーディオがmp3だったのでwavに変換してからmp4に戻してみたらちゃんと認識された。なんやねん。と言う事でスクリプトを一部修正っと。

色々工夫して改善した動画がこちら。

ちっとはマシになるかな?このスタイルをグループBとしてカテゴライズしABテストで評価する。


2月23日

  • チャンネル登録者:+0人

  • 再生回数:+130回

今日は黙々とグループBの動画を量産する日。

実際に作ってみると1本の動画に切り抜きを4つ使う構成にしちゃったので、制作コストが上がって時間がかかるようになっちゃった。毎日2本更新はちょっと面倒くさいので1本更新に戻そう

25日まではグループAの動画を予約しちゃったから、グループBの投稿は26日から開始する。ABテストの期間は1週間毎にしよう、レポートも同じ隔週でまとめてるし丁度いいでしょ。

よし、とりあえず2月26日から3月3日までグループBの動画をチャージ完了。

作り方を変えた影響もあるけどトータルで4-5時間かかった気がする、ずっと続けるにはキツイ負担だけどABテスト期間中は我慢。成績の高い動画を再現できるようになったら、その作り方を自動化すればいいし今は頑張りどころ。

YouTubeのショート動画を見てて気づいたんだけど、視聴者がコメント欄を読んでいる間も動画って再生されっぱなしになってるから、コメントの多い動画はエンゲージメント率が高まるワケか。

だから視聴者がコメントしやすい動画は、YouTubeのアルゴリズム的に優先表示されやすくなるっちょーことか。なるほど。


2月24日

  • チャンネル登録者:+8人

  • 再生回数:+727回

グループBを一週間分予約投稿しちゃったけど、すでに修正点に気付いちゃった。

  • 他のショート動画と比較して音が小さい

  • 動画内で繋げた切り抜きの音のボリュームが揃っていない

これは次々回のグループCで修正する。

グループBは複数メンバーを混ぜて編集しているので、グループCは一人のキャラクターにまとめて編集してみよう。

グループBの動画の公開を明日からに変更した、グループAは2月13日-24日までで十分データはとれたし新しいグループのデータが見たくて待てなくなっちゃった。という事で明日から新バージョンの動画公開。


2月25日

  • チャンネル登録者:+6人

  • 再生回数:+170回

今日からグループBの投稿開始日、情熱と時間を使い過ぎると途中で飽きてしまうので今日はサボりDAY。


2月26日

  • チャンネル登録者:+2人

  • 再生回数:+1,559回

グループAはデータが出そろったと判断しまして成績を別章「データ分析&ABテスト」にまとめました。

ショート動画の伸ばし方を調べていて動画のボリュームは30-35秒が伸びやすい傾向があるらしい。

そういえば人気のショート動画はどれくらいのdurationなのか確認した事がなかったので、youtubeAPIで人気のショート動画を抜き出して統計を見てみよう、先人に学ぶのは大事。

import requests
import csv
from isodate import parse_duration
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import seaborn as sns
from scipy.stats import norm

# APIキーを設定
API_KEY = 'APIKEY'

# キーワードとしてショート動画を指定
keyword = 'ホロライブ #shorts'

# 動画の詳細情報を処理する関数
def get_video_details(video_ids):
    details_url = 'https://www.googleapis.com/youtube/v3/videos'
    details_params = {
        'part': 'snippet,contentDetails,statistics',
        'id': ','.join(video_ids),
        'key': API_KEY
    }
    details_response = requests.get(details_url, params=details_params)
    details_data = details_response.json()

    videos = []
    for item in details_data['items']:
        duration = parse_duration(item['contentDetails']['duration']).total_seconds()
        if duration < 61:
            videos.append({
                'video_id': item['id'],
                'title': item['snippet']['title'],
                'view_count': int(item['statistics']['viewCount']),
                'duration': duration
            })
    return videos

# 全ての動画情報を取得するためのリスト
all_videos = []

# 検索APIのパラメータを設定
search_params = {
    'part': 'snippet',
    'q': keyword,
    'type': 'video',
    'order': 'viewCount',
    'maxResults': 50,
    'key': API_KEY
}

# 500件の動画を取得するまで検索を続ける
while len(all_videos) < 500:
    search_response = requests.get('https://www.googleapis.com/youtube/v3/search', params=search_params)
    search_data = search_response.json()
    video_ids = [item['id']['videoId'] for item in search_data['items']]
    videos = get_video_details(video_ids)
    all_videos.extend(videos)
    if 'nextPageToken' in search_data:
        search_params['pageToken'] = search_data['nextPageToken']
    else:
        break  # 次のページがなければ終了

# 再生数で降順にソート
all_videos.sort(key=lambda x: x['view_count'], reverse=True)

# 上位500件を取得
top_videos = all_videos[:500]

# CSVファイルに出力
csv_file = 'youtube_shorts.csv'
with open(csv_file, 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(['Video ID', 'Title', 'Views', 'Duration (seconds)'])
    for video in top_videos:
        writer.writerow([video['video_id'], video['title'], video['view_count'], video['duration']])

print(f'CSVファイルに出力しました: {csv_file}')

# 秒数のリストを作成
durations = [video['duration'] for video in top_videos]

# 平均値と標準偏差を計算
average = np.mean(durations)
std_dev = np.std(durations)

# 結果を出力
print(f'平均値: {average}秒')
print(f'標準偏差: {std_dev}秒')

# 日本語フォントの設定
font_path = 'C:\\Windows\\Fonts\\meiryo.ttc'  # Windowsの場合
# font_path = '/path/to/your/font.ttf'  # macOSやLinuxの場合は適切なパスに変更してください
font_prop = fm.FontProperties(fname=font_path)

# Seabornのスタイルを設定
sns.set(style='whitegrid')

# ヒストグラムを作成
plt.figure(figsize=(10, 6))
sns.histplot(durations, bins=10, color='skyblue', kde=False, stat='density')

# 正規分布曲線を追加
x = np.linspace(min(durations), max(durations), 100)
y = norm.pdf(x, average, std_dev)
plt.plot(x, y, color='purple', linewidth=2)

# 平均値と標準偏差の範囲を示す線を追加
plt.axvline(average, color='red', linestyle='dashed', linewidth=2)
plt.axvline(average - std_dev, color='green', linestyle='dashed', linewidth=2)
plt.axvline(average + std_dev, color='green', linestyle='dashed', linewidth=2)

# タイトルとラベルの設定
plt.title('動画の秒数の分布と正規分布曲線', fontsize=16, fontproperties=font_prop)
plt.xlabel('秒数', fontsize=14, fontproperties=font_prop)
plt.ylabel('確率密度', fontsize=14, fontproperties=font_prop)
plt.xticks(fontsize=12, fontproperties=font_prop)
plt.yticks(fontsize=12, fontproperties=font_prop)

# 凡例の追加
plt.legend(['正規分布曲線', '平均値', '標準偏差の範囲', '秒数の分布'], fontsize=12, prop=font_prop)

# グラフの表示
plt.tight_layout()
plt.show()

レスポンスはこんな感じ。

「ホロライブ #shorts」で検索し再生数が上位500件の平均durationを計算すると32.8秒なので、ほおじろ通信さんの考察ピッタリ!に見えるけどもうちょっと詳しく見てみると、

この通り山が二つある状態。ボリュームゾーンは20秒前後 or 60秒前後かな?このデータからはほおじろ通信さんの考察とはちっと乖離が見られる気がする。

中身のレコードを見ると公式の動画も多く含まれていて、推し活の切り抜き動画とは性質が違うのかと思ったのでキーワードを「ホロライブ 切り抜き #shorts」に変えてグラフ化してみると、

これはホロライブの切り抜きに限った話なので他のジャンルは分からないけど、どう見ても60秒前後が一番多い。他は10-20の間が多少こんもりしているけど、「再生回数の多いショート動画は60秒前後が多い」でファイナルアンサーな気がする。

今まで公開したショート動画は15秒前後だったのでグラフでは標準偏差の端っこ辺り。自分の考察を信じて60秒前後のショート動画作って投稿してみるか。良い気付きだった、これもグループCの改善案に入れとこう。

ちなみにホロライブのショートで世界一再生されている動画はこちら。

まさかの海外meme、知らんかった笑


2月27日

  • チャンネル登録者:+8人

  • 再生回数:+8,893回

投稿し始めたグループBの動画が7,000再生を超えた、いいっすな。偶然じゃなくて自分で再生回数伸ばしてやった感があるわ。

youtubeアカウントの運営を2週間くらいやってみて思ったのは、webメディアの中でも動画ってのは数値の更新と施策に対するレスポンスが早いので、コツコツやれるタイプなら確実に伸ばせるって事が分かった。

これがブログとかwebサイトだとSEO対策的な施策をやっても、効果がでるのが1ヶ月先とか普通にあるからめちゃくちゃ時間かかるんよね。動画分かりやすくていいわぁ~。


時短&効率化ツール

切り抜きチャンネルに限らず、YouTubeチャンネルを運営する上で役に立つツールを自作し公開しています。興味のある方はぜひご一読下さいm(_ _)m


データ分析&ABテスト

今週から本格的にデータ分析を始める。データは分析しただけじゃあ意味が無いのでちゃんと作戦に落とし込んでABテストまでやる予定。

アナリティクスを見て気付いた事

youtubeは分析用の数値が公式で大量に用意されているので、頑張れば大体の事は把握できるっぽい。今回は難しい事はやらずにグループAの視聴維持率グラフを眺めて気付いた点を考察してみました。

ここから先は

1,328字 / 7画像

スタンダード

¥990 / 月
初月無料
このメンバーシップの詳細

よろしければサポートお願いします、頂いたサポートは活動費として使用させて頂きより有意義な記事を書けるように頑張ります!