DEV Community

Cover image for FFmpegで動画を高画質化: スケーリング、ノイズ除去、手ぶれ補正
Akira
Akira

Posted on • Originally published at apidog.com

FFmpegで動画を高画質化: スケーリング、ノイズ除去、手ぶれ補正

結論

FFmpegは-vf "scale=1920:1080:flags=lanczos"を使ってビデオをアップスケールします。Lanczosはアップスケーリングに最適なスケーリングアルゴリズムです。デノイズには、hqdn3dがエッジを保持しながらノイズを低減します。手ぶれ補正には、vidstabが2パス処理でカメラの揺れに対応します。これら3つすべてを単一のフィルターチェーンに結合して、品質向上パイプラインを構築します。

Apidogを今すぐ試す

はじめに

FFmpegを使ったビデオ品質向上は、解像度変更だけにとどまりません。真の強化は、解像度アップスケーリングとインテリジェントなデノイズ、オプションの手ぶれ補正を組み合わせることで実現します。各ステップは、ソフトまたはピクセル化した映像、粒子の粗いまたはノイズの多いフレーム、不安定なカメラの動きといった異なる品質問題に対処します。

このガイドでは、各技術を個別に説明し、それらを組み合わせる方法を示します。

スケーリングアルゴリズム

スケーリングアルゴリズムは、FFmpegがアップスケーリング時に新しいピクセルをどのように埋めるかを決定します。その選択は出力品質に直接影響します。

アルゴリズム 速度 品質 最適な用途
neighbor 最速 最低 ピクセルアート
bilinear 速い 低い 速度が重要な場合
bicubic 中程度 良い 一般的なダウンサイジング
lanczos 遅い 最高 アップスケーリング

Lanczosで1080pにアップスケール:

ffmpeg -i input_720p.mp4 -vf "scale=1920:1080:flags=lanczos" -c:v libx264 -crf 20 output_1080p.mp4
Enter fullscreen mode Exit fullscreen mode

アスペクト比を維持:

ffmpeg -i input.mp4 -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 output.mp4
Enter fullscreen mode Exit fullscreen mode

-2はアスペクト比を維持しつつ、高さを自動で2の倍数に調整します。

4Kにスケール:

ffmpeg -i input.mp4 -vf "scale=3840:-2:flags=lanczos" -c:v libx264 -crf 18 -preset slow output_4k.mp4
Enter fullscreen mode Exit fullscreen mode

-preset slowは圧縮効率を高め、高解像度での品質向上に有効です。

hqdn3dによるデノイズ

hqdn3dフィルターは高品質な3Dデノイズで、エッジを保ちながら粒状性やノイズを除去します。

ffmpeg -i noisy_video.mp4 -vf "hqdn3d=4:3:6:4.5" -c:v libx264 -crf 20 denoised.mp4
Enter fullscreen mode Exit fullscreen mode

パラメータ(luma_spatial:chroma_spatial:luma_temporal:chroma_temporal):

  • luma_spatial (0-16): 輝度チャンネルの空間ノイズ(デフォルト4)
  • chroma_spatial (0-16): 色チャンネルの空間ノイズ(デフォルト3)
  • luma_temporal (0-16): 輝度の時間的平滑化(デフォルト6)
  • chroma_temporal (0-16): 色の時間的平滑化(デフォルト4.5)

強力なデノイズ例:

ffmpeg -i grainy.mp4 -vf "hqdn3d=10:8:15:10" -c:v libx264 -crf 20 clean.mp4
Enter fullscreen mode Exit fullscreen mode

値を大きくするとノイズ除去が強くなりますが、細部が失われることもあるので調整が必要です。

軽いデノイズ(ディテール重視):

ffmpeg -i video.mp4 -vf "hqdn3d=2:1.5:3:2.5" -c:v libx264 -crf 20 output.mp4
Enter fullscreen mode Exit fullscreen mode

vidstabによる手ぶれ補正

vidstabフィルターは2パス方式です。まず動きを分析し、次に補正を適用します。

インストールの確認:

ffmpeg -filters | grep vidstab
Enter fullscreen mode Exit fullscreen mode

macOSならbrew install ffmpegでサポートされます。

パス1: 動き分析

ffmpeg -i shaky_video.mp4 -vf "vidstabdetect=stepsize=6:shakiness=8:accuracy=9:result=transform.trf" -f null -
Enter fullscreen mode Exit fullscreen mode
  • shakiness=8 (1-10): 揺れの大きさ
  • accuracy=9 (1-15): 検出精度

パス2: 手ぶれ補正

ffmpeg -i shaky_video.mp4 -vf "vidstabtransform=input=transform.trf:zoom=1:smoothing=10" -c:v libx264 -crf 20 stabilized.mp4
Enter fullscreen mode Exit fullscreen mode
  • zoom=1: エッジのクロッピング補正
  • smoothing=10: パスの滑らかさ

積極的な手ぶれ補正:

ffmpeg -i video.mp4 -vf "vidstabtransform=input=transform.trf:zoom=3:smoothing=30:optzoom=1" -c:v libx264 -crf 20 stable.mp4
Enter fullscreen mode Exit fullscreen mode
  • optzoom=1: ズーム量を自動最適化

品質向上パイプラインの結合

3つの操作(デノイズ→スケール→手ぶれ補正)を単一のフィルターチェーンで処理できます。

ffmpeg -i source.mp4 \
  -vf "hqdn3d=4:3:6:4.5,scale=1920:-2:flags=lanczos,vidstabtransform=input=transform.trf:zoom=1:smoothing=10" \
  -c:v libx264 -crf 18 -preset slow \
  -c:a copy \
  enhanced.mp4
Enter fullscreen mode Exit fullscreen mode

この順序で適用することで、ノイズが高解像度に拡大されるのを防ぎます。

事前にvidstabdetectパスを実行してtransform.trfを生成してください。

シャープネスフィルター

映像がソフトに見える場合はシャープネスを活用しましょう。

ffmpeg -i video.mp4 -vf "unsharp=5:5:1.5:5:5:0.5" -c:v libx264 -crf 20 sharpened.mp4
Enter fullscreen mode Exit fullscreen mode
  • lx:ly:la:cx:cy:ca(輝度/色差のサイズ・量)
    • lx:ly — 輝度マトリックスサイズ
    • la — 輝度量(正=シャープ、負=ぼかし)
    • cx:cy:ca — 色差

軽め: unsharp=3:3:0.5:3:3:0.0

強め: unsharp=5:5:2.5:5:5:0.0

パフォーマンスに関する考慮事項

各種強化処理はCPU負荷が高いです。10分の1080p動画でのおおよその処理時間:

  • 単純なスケール: 2-5分
  • スケール + hqdn3d: 5-10分
  • スケール + hqdn3d + vidstab: 15-25分

-presetで速度と容量を制御できます:

  • ultrafast — 最速・大容量
  • fast — 中間
  • slow — 高品質・最小容量
  • veryslow — 追加効果は少なめ

バッチ処理は並列化で高速化できます。例:

ls *.mp4 | parallel ffmpeg -i {} -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 enhanced_{/}
Enter fullscreen mode Exit fullscreen mode

AIビデオアップスケーリングAPIへの接続

AI駆動のアップスケーリングは、FFmpegよりも優れた結果を得たい場合に有効です。APIを使ってニューラルアップスケーリングを実行できます。

WaveSpeedAIの例:

POST https://api.wavespeed.ai/api/v2/wavespeed-ai/video-enhance
Authorization: Bearer {{WAVESPEED_API_KEY}}
Content-Type: application/json

{
  "video_url": "https://storage.example.com/source-video.mp4",
  "scale": 2,
  "enhance": true
}
Enter fullscreen mode Exit fullscreen mode

Apidogでテストする際のアサーション例:

Status code is 200
Response body has field id
Enter fullscreen mode Exit fullscreen mode

出力の完成をステータスエンドポイントでポーリングし、AI出力とFFmpegのLanczos出力を比較しましょう。AIアップスケーリングはテクスチャやディテールの再現に強みがありますが、FFmpegは高速・無料です。標準用途はFFmpeg、最高品質が必要な場合はAI APIを使い分けましょう。

よくある質問

Lanczosは常にバイキュービックより優れていますか?

アップスケーリングではLanczosが最適です。ダウンサイジングではバイキュービックも十分な品質で高速です。

vidstabはスマートフォン映像にも使えますか?

はい。スマホ動画にはshakinessを8-10に上げると効果的です。

手ぶれ補正の縁取りにはどれくらいズームが必要?

揺れの大きさによりますが、通常3-8%。optzoom=1で自動設定できます。

FFmpegで低解像度の歴史的映像も強化できる?

ある程度可能ですが、AIベースのアップスケーリング(例: ESRGANやAPI)はより優れた結果を出します。

デノイズは再生を遅くしますか?

いいえ。デノイズは変換時の処理で、出力動画の再生には影響しません。

Top comments (0)