ffprobe × Python で動画を一括比較!画質・ビットレートを見える化するスクリプト解説

こんにちは!パパリーマンのこっしーです!いつもご覧いただきありがとうございます。

クラウドに動画をアップロードしたあと、ふと「これ、ちゃんとオリジナルの画質のまま残ってるのかな?」と不安になったことはありませんか?

スマホで撮った大切な動画。GoogleフォトやpCloudなどのクラウドに保存していても、裏で勝手に圧縮されていたら…と思うと、ちょっとぞっとしますよね。

この記事では、そんな不安をPython × ffprobeを使って簡単に検証できるスクリプトとともにご紹介します。

複数の動画をまとめて比較できて、ビットレート・解像度・フレームレートの違いも丸見え。

家族の思い出や仕事で扱う動画をしっかり守りたい人にこそ、知っておいてほしい内容です。

✅ この記事でわかること
  • クラウドにアップロードした動画が本当にオリジナルのままかを確認する方法
  • ffprobe と Python を使って複数の動画を一括比較するスクリプトの実装方法
  • ビットレート・解像度・コーデックなど、動画の技術情報の読み方
  • ストリーミング再生時の画質劣化とオリジナル保存の見分け方
  • GoogleフォトやpCloudなど、クラウド保存後の品質確認に役立つ実用テクニック
✅ こんな人におすすめ
  • pCloudやGoogleフォトにアップした動画が劣化していないか不安な方
  • クラウド保存後に“本当にオリジナルのままか”を確かめたい方
  • ビットレートや解像度の差を数値で比較したいけど、方法がわからない方
  • 複数の動画ファイルをまとめて比較・検証したい方
  • 家族の思い出動画や記録映像をきちんと保存しておきたい方
目次

はじめに|なぜ動画ファイルの比較が必要なのか?

動画って、見た目では意外と“劣化”に気づきにくいものです。

とくにスマホやクラウドストレージ上で再生すると、ストリーミング用に軽くされたファイルが再生されていて、「あれ、なんか画質悪くない?」と思っても、実際のオリジナルがどうだったかよくわからない。

かくいう僕も、クラウドストレージにアップロードした動画のサイズが小さく見えたのをきっかけに、

「これ、本当にそのまま保存されてるの?」という疑問がムクムクと湧いてきました。

思い出の動画は、大切に保存しておきたいからこそ、「気づいたときにちゃんと調べておきたい」。

そんな思いで、ffprobeというツールとPythonを使って、動画ファイルの中身を比べて“本当に同じか”を確かめる方法を作りました。

次章からは、ffprobeとPythonを組み合わせてどんなことができるのかを、わかりやすくご紹介していきます。

ffprobeとPythonを使えば、動画の“情報”が丸分かり

動画ファイルって、見た目はただの.mp4や.movにしか見えませんが、

その中には「ビットレート」「解像度」「コーデック」「フレームレート」など、再生品質に直結する情報がしっかり詰まっています。

そして、それらを人間にも読める形で引き出せるツールが、ffprobeです。

ffprobeとは?ffmpegに含まれる強力な動画解析ツール

ffprobeは、動画編集でおなじみのffmpegに含まれているツールのひとつ。

コマンドラインから動画ファイルの技術情報を引き出すのが得意で、たとえば以下のような情報を取得できます:

  • 映像コーデック(例:H.264、HEVC)
  • 解像度(例:1920×1080)
  • ビットレート(例:4500 kbps)
  • フレームレート(例:30fps)
  • 音声トラックの情報

ただし、ひとつひとつ動画ファイルに対してコマンドを叩いて…というのは手間がかかります。

そこで、Pythonと組み合わせて、複数ファイルを一括比較できるようにしたのが今回のスクリプトです。

Pythonで扱えば複数ファイルの一括比較が可能に

Pythonなら、指定した複数の動画ファイルをループ処理で処理して、

ffprobeで取得した情報を一覧表に整形したり、HTML形式で見やすく出力したりすることもできます。

今回ご紹介するスクリプトでは、以下のような特徴を持たせています:

  • オリジナルと比較対象の動画をまとめて読み込める
  • 表形式で、差がある項目に印をつけて表示
  • ブラウザで確認できるHTML出力にも対応

GUI不要・誰でも再現できる軽量スクリプト

このスクリプトのいいところは、Pythonが少し使える人なら誰でも再現できること。

動画編集ソフトのような重たい環境は不要で、

MacやWindowsのターミナル上でコマンドを打つだけで動きます。

次の章では、スクリプトの中身と使い方、実行結果の例をご紹介していきます。

ffprobeを使う準備|Homebrewでのインストール方法(macOS)

今回のスクリプトでは、ffprobe というコマンドラインツールを使います。

これは動画解析ツール ffmpeg に含まれているもので、macOSでは Homebrew を使って簡単にインストールできます。

🔧 手順(macOS)

  1. Homebrewがまだ入っていない場合は、まず以下のコマンドをターミナルで実行:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  1. 次に ffmpeg をインストールします(ffprobeも同時に入ります):
brew install ffmpeg
  1. インストール完了後、バージョン確認してみましょう:
ffprobe -version

Windowsでも ffprobe は使用可能です。

公式サイト(https://ffmpeg.org/download.html)から Windows版をダウンロードし、

ffprobe.exe をシステムのPATHに通すことで同様に使用できます。

この準備が整えば、あとはPythonスクリプトと動画ファイルを同じディレクトリに置くだけでOKです。

次に、スクリプト本体と使い方を見ていきましょう👇

スクリプトの使い方と出力イメージ

ここからは、実際に使えるスクリプト compare_multiple_videos.py の中身と、使い方をご紹介します。

Pythonの基本がわかる方ならすぐ動かせる内容になっているので、ぜひ手元の動画ファイルで試してみてください。

スクリプトの全体コード(compare_multiple_videos.py)

以下が比較用スクリプトの全体コードです。

複数の動画ファイルをコマンドライン引数として渡すことで、各ファイルの主要なプロパティを一覧比較できます。

"""
複数の動画ファイルのメタデータを比較し、HTMLレポートを生成するモジュール。
"""

import subprocess
import json
import sys
from typing import Dict, List
from datetime import datetime


def get_video_metadata(file_path: str) -> Dict:
    """動画ファイルのメタデータを取得(ffprobe + JSON形式)"""
    cmd = [
        "ffprobe",
        "-v",
        "error",
        "-select_streams",
        "v:0",
        "-show_entries",
        "stream=width,height,bit_rate,codec_name,avg_frame_rate",
        "-of",
        "json",
        file_path,
    ]
    result = subprocess.run(cmd, capture_output=True, text=True, check=False)
    try:
        return json.loads(result.stdout)["streams"][0]
    except (KeyError, IndexError, json.JSONDecodeError):
        return {"error": f"読み込み失敗:{file_path}"}


def compare_all(metadata_list: List[Dict], filenames: List[str]) -> str:
    """すべての動画のメタデータを比較して表形式で出力&HTMLを返す"""
    keys = ["codec_name", "width", "height", "bit_rate", "avg_frame_rate"]
    html_rows = []

    # ヘッダー
    print("\n📊 動画メタデータ比較(先頭ファイルを基準に差異表示)")
    header = f"{'項目':<18}" + "".join([f"{name:<20}" for name in filenames])
    print(header)
    print("=" * len(header))

    html_header = (
        "<tr><th>項目</th>"
        + "".join(f"<th>{name}</th>" for name in filenames)
        + "</tr>"
    )
    html_rows.append(html_header)

    for key in keys:
        row = f"{key:<18}"
        base_value = metadata_list[0].get(key, "N/A")
        html_cells = [f"<td>{key}</td>"]
        for meta in metadata_list:
            val = meta.get(key, "N/A")
            diff = val != base_value
            cell = f"*{str(val):<19}" if diff else f"{str(val):<20}"
            row += cell
            html_cells.append(
                f"<td style='color:{'red' if diff else 'black'}'>{val}</td>"
            )
        print(row)
        html_rows.append("<tr>" + "".join(html_cells) + "</tr>")

    template = f"""
    <html>
    <head>
        <meta charset="UTF-8">
        <title>動画比較結果</title>
        <style>
            table {{ border-collapse: collapse; }}
            th, td {{ border: 1px solid #ccc; padding: 8px; }}
            th {{ background-color: #f0f0f0; }}
        </style>
    </head>
    <body>
        <h2>動画メタデータ比較</h2>
        <p>生成日時: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</p>
        <table>
            {''.join(html_rows)}
        </table>
    </body>
    </html>
    """
    return template


if __name__ == "__main__":
    if len(sys.argv) < 3:
        print(
            "使い方: python compare_multiple_videos.py original.mp4 pcloud.mp4 gphotos.mp4 ..."
        )
        sys.exit(1)

    files = sys.argv[1:]
    print("▶ 比較対象ファイル一覧:")
    for f in files:
        print(f"  - {f}")

    metadata_all = [get_video_metadata(f) for f in files]
    result_html = compare_all(metadata_all, files)

    with open("video_comparison.html", "w", encoding="utf-8") as f:
        f.write(result_html)

    print("\n✅ HTML出力が完了しました:video_comparison.html")

実行方法|コマンド一発で比較・可視化!

python compare_multiple_videos.py original.mp4 pcloud.mp4 googlephoto.mp4

上記のように複数の動画ファイルを並べて指定するだけで、

画質・ビットレート・コーデックなどの違いを自動で抽出して、HTML表にまとめてくれます。

生成されるファイルは:

video_comparison.html

ブラウザで開くだけで結果が視覚的に確認できるので、技術的な知識がなくても安心です。

出力結果のイメージ(簡易)

項目original.mp4pcloud.mp4googlephoto.mp4
codec_nameh264h264hevc
width192019201280
height10801080720
bit_rate450000045000001200000
avg_frame_rate30/130/130/1

赤字で示される部分は、オリジナルと異なるポイントです。

どんな時にこのスクリプトが役立つか?

このスクリプトは、単に動画の情報を一覧で表示するだけでなく、「アップロードや変換によってファイルが変化していないか」を確認するためのチェックツールとして活用できます。

クラウド保存後に「オリジナルのまま残っているか」確かめたいとき

pCloudやGoogleフォトなどのクラウドストレージに動画をアップロードすると、

アプリやブラウザで再生されるのはストリーミング用の軽量バージョンであることもあります。

このスクリプトを使えば、元動画とクラウド保存版を比較して、解像度・ビットレート・コーデックなどに差があるかどうかを可視化できます。

「画質が落ちたかも…」という不安を、数値ベースで確認できるのがポイントです。

編集前後・変換後の違いを検証したいとき

動画をエンコードしたあと、「軽くしたけど、どれくらい情報量が減っているのか?」といった客観的な比較をしたい場面にも使えます。

元動画と変換後のファイルをこのスクリプトで読み込むだけで、

ビットレートや解像度の変化を一覧でチェックできます。

思い出の動画をクラウドに保存する前の確認用として

家族の記録や旅行の動画など、長期保存したい大切な映像をクラウドにアップロードする際、

一度スクリプトで確認しておけば、保存前後での画質変化にいち早く気づけます。

実際にpCloud・Googleフォトで使ってみた結果(要約)

このスクリプトを使って、実際にいくつかの動画ファイルを比較してみました。

アップロード元は、以下の3つです:

  • 📱 オリジナル(iPhoneで撮影した動画ファイル)
  • ☁️ pCloud に自動アップロードされた動画
  • ☁️ pCloud に手動アップロードされた動画
  • ☁️ Googleフォト に自動アップロードされた動画

結果:いずれのクラウドファイルも“変化なし”だった

比較した動画では、いずれのクラウド保存版も、ビットレート・解像度・コーデックがオリジナルと完全に一致していました。

特に pCloud では、自動アップロードでも手動アップロードでも違いは確認されず、オリジナルのまましっかり保存されていたことがわかりました。

一方で、ストリーミング再生には注意が必要

ただし、Webブラウザやスマホアプリでのストリーミング再生では、軽量化された別ファイルが使われていることがあるようです。

実際に画質を比べてみると、

  • ブロックノイズが出る
  • 解像度が明らかに落ちている
  • ファイルサイズが不自然に小さい

といった変化が見られるケースもありました。

これはクラウド側の“再生用最適化”として行われている処理で、保存されているオリジナルファイルそのものとは別物です。

大事なのは「どこを見て判断しているか」

画質が落ちたと感じる場面でも、それがストリーミング再生の問題なのか、元ファイルそのものの変化なのかを切り分けられるようになると、不安もかなり減ります。

このスクリプトは、そういった判断の“よりどころ”になるはずです。

まとめ:動画の「見えない違い」に気づける、実用的なチェックツール

動画ファイルって、見た目は同じでも中身は案外ちがっていたりします。

クラウドにアップロードしたり、変換したり、誰かに渡したりしているうちに、

知らないうちに画質が落ちていた…というのは、実はあり得ない話ではありません。

今回紹介した compare_multiple_videos.py は、そんな“見えない変化”に気づくためのチェックツールです。

  • コマンド一発で、複数動画のビットレートや解像度、コーデックなどを一覧比較
  • HTML形式の出力で、ブラウザから視覚的に確認
  • ストリーミング版の軽量ファイルとの違いにも気づける

と、シンプルながら実用的な構成になっています。

もちろん、このスクリプトが動画の品質を守ってくれるわけではありません。

けれど、「変化があったことに早く気づける」というだけでも、保存先や設定を見直すきっかけになります。

大切な思い出や記録をクラウドに預ける前に、一度こういったツールで確認しておくことで、

“なんとなくの安心”から、ちゃんと確かめたうえでの安心へ。

そんなふうにクラウドとの付き合い方を見直す一助になればうれしいです。

実際にこのスクリプトを使って、pCloudやGoogleフォトにアップロードした動画が本当にオリジナルのまま保存されているかどうかを検証した結果を、こちらの記事で紹介しています👇

最後までお読みいただき、ありがとうございました。
それではまた次の記事でお会いしましょう。 ばいばいっ!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次