さとまたwiki

FFmpegとは

動画編集ソフト開発の核となるツール

FFmpegとは何か

FFmpeg(エフエフエムペグ)は、動画・音声ファイルを処理するための無料のコマンドラインツールです。

2000年から開発が続けられ、現在も活発に更新されています。 動画編集ソフトを作る場合、FFmpegを使うことで動画処理を自分で実装する必要がなくなります。

簡単に言うと

FFmpegは「動画処理の万能ナイフ」です。
カット、変換、結合、エフェクト適用など、動画に対するほぼ全ての操作ができます。

FFmpegを使っているソフトウェア

FFmpegを使っている

  • VLC Media Player - 動画プレーヤー
  • OBS Studio - 配信ソフト
  • HandBrake - 動画変換ソフト
  • Kdenlive / Shotcut - 動画編集ソフト
  • LosslessCut - カット専用ソフト
  • YouTube / TikTok - サーバー側処理

FFmpegを使っていない(独自エンジン)

  • Adobe Premiere Pro
  • DaVinci Resolve
  • Final Cut Pro

※ これらは大企業が独自開発した商用ソフト

なぜFFmpegを使うのか

1. 複雑な処理が不要

動画のデコード・エンコードは非常に複雑な技術。 FFmpegを使えば、たった1行のコマンドで処理できる。

2. ほぼ全形式に対応

MP4, MKV, WebM, MOV, AVI, GIF, MP3, AAC... ほぼ全ての動画・音声形式を処理可能。

3. どのOSでも動く

Windows, Linux, macOS全てで同じコマンドが動く。 OS間の差を気にする必要がない。

インストール方法

Windows

winget install ffmpeg

または 公式サイト からダウンロード

Linux (Ubuntu/Debian)

sudo apt install ffmpeg

macOS

brew install ffmpeg

# インストール確認

ffmpeg -version

基本的な使い方

FFmpegはコマンドライン(ターミナル)で使います。基本形式は:

ffmpeg -i 入力ファイル [オプション] 出力ファイル

動画をカット(切り抜き)

bash
# 開始10秒から30秒間を切り出し
ffmpeg -i input.mp4 -ss 10 -t 30 -c copy output.mp4

-i = 入力ファイル

-ss 10 = 開始位置(10秒目から)

-t 30 = 長さ(30秒間)

-c copy = 再エンコードせずコピー(高速)

フォーマット変換

bash
# MOVからMP4に変換
ffmpeg -i input.mov output.mp4

# WebMに変換(Web向け)
ffmpeg -i input.mp4 output.webm

出力ファイル名の拡張子を変えるだけで自動的に変換されます。

解像度変更

bash
# 1280x720(HD)にリサイズ
ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4

# 幅1920に合わせて高さは自動調整
ffmpeg -i input.mp4 -vf "scale=1920:-1" output.mp4

音声だけ抽出

bash
# MP3で抽出
ffmpeg -i input.mp4 -vn output.mp3

-vn = 映像なし(video none)

プログラムから使う方法

動画編集ソフトを作る場合、プログラムからFFmpegを呼び出します。 どの言語でも「サブプロセス」として実行するだけで使えます。

Python(推奨)

python
import subprocess

def cut_video(input_path, output_path, start, duration):
    subprocess.run([
        'ffmpeg',
        '-i', input_path,
        '-ss', str(start),
        '-t', str(duration),
        '-c', 'copy',
        output_path
    ])

# 使用例: 10秒目から30秒間をカット
cut_video('input.mp4', 'output.mp4', 10, 30)

Rust

rust
use std::process::Command;

fn cut_video(input: &str, output: &str, start: u32, duration: u32) {
    Command::new("ffmpeg")
        .args(["-i", input, "-ss", &start.to_string(),
               "-t", &duration.to_string(), "-c", "copy", output])
        .output()
        .expect("FFmpeg failed");
}

JavaScript (Node.js)

javascript
const { spawn } = require('child_process');

function cutVideo(input, output, start, duration) {
    const ffmpeg = spawn('ffmpeg', [
        '-i', input,
        '-ss', start.toString(),
        '-t', duration.toString(),
        '-c', 'copy',
        output
    ]);
}

まとめ

  • FFmpegは動画処理の業界標準ツール
  • コマンドライン1行で動画処理ができる
  • プログラムから簡単に呼び出せる(subprocess)
  • 動画編集ソフト開発では必須の知識

この記事はClaude Opus 4.6によって作成されました