😊

3分でマスター!RustでFFmpegを使って動画解像度を簡単に変更する方法

に公開

はじめに

動画処理の現場では、解像度の調整がどうしても必要な場面がたくさんありますよね。たとえば、スマホやタブレット、テレビなど、さまざまなデバイスに動画を合わせたり、ストレージやネットワークの負担を減らすために動画サイズを小さくしたり…。でも、伝統的なFFmpegのコマンドラインツールって、確かにすごい力を持っているけれど、パラメータが複雑でちょっと扱いにくいと思いませんか?特にRustが大好きな開発者の皆さんなら、プロジェクトでコマンドラインを直接呼び出すのは面倒だし、エラーも出やすいと感じているはず。そんなお悩みを、この記事で一緒にスッキリ解決しましょう!Rustを使って、動画解像度をスマートに変える方法を、3分でご紹介します。


Rustでの動画処理の悩みを解決!

Rust開発者の皆さんが、動画解像度を調整する時に感じるストレスって、こんなところでしょうか:

  • 学習が大変:FFmpegのコマンドライン引数が多すぎて、フィルターの書き方も分かりにくい。
  • 操作が難しい:コマンドを少しでも間違えると、エラーが出てしまって困る。
  • プロジェクトに組み込むのが面倒:Rustから外部コマンドを呼び出すと、プロセス管理やエラー処理がややこしい。

そんな悩みを一気に解消してくれるのが、FFmpegをRustでラップしたライブラリなんです!シンプルで使いやすいAPIのおかげで、複雑な操作は全部隠してくれるから、開発者の皆さんは大事なビジネスロジックに集中できますよ。


さっそく実践!Rustで動画解像度を変更

たとえば、ショートビデオアプリを作っているとして、ユーザーがアップロードしたtest.mp4幅1280ピクセルにリサイズしたい。でも、元の縦横比はちゃんとキープして、output.mp4として保存したい。そんなシーン、実際の開発ではよくありますよね。スマホの画面にピッタリ合わせたり、ファイルサイズを小さくしたり…。それでは、早速やってみましょう!

1. FFmpegをインストール

まず、開発環境にFFmpegが入っているかチェックしてください。インストールの手順はこちらです:

macOS

brew install ffmpeg

Windows

# vcpkgでFFmpegをインストール
vcpkg install ffmpeg
# 初めてvcpkgを使う方は、環境変数 VCPKG_ROOT を設定してくださいね

2. Rustの依存関係を追加

プロジェクトのCargo.tomlに、必要なライブラリを追加します:

[dependencies]
ez-ffmpeg = "*"

3. Rustのコードを書く

main.rsファイルを作って、以下のコードを入力してください:

use ez_ffmpeg::FfmpegContext;

fn main() {
    // FFmpegの処理コンテキストを作成
    FfmpegContext::builder()
        .input("test.mp4") // 入力動画を指定
        .filter_desc("scale=1280:-1") // 幅を1280に、縦は自動調整
        .output("output.mp4") // 出力先を指定
        .build().unwrap() // コンテキストを構築
        .start().unwrap() // 処理を開始
        .wait().unwrap(); // 完了を待つ
}

このコードを実行すると、あっという間に解像度が調整された動画が完成します!FFmpegのコマンドラインを直接使うよりも、たった数行でできちゃうなんて、嬉しいですよね。しかも、エラーが出にくいから安心です。


コードの解説

このコードがどうしてこんなに簡単なのか、少し詳しく見てみましょう:

  1. 入力ファイルを指定.input("test.mp4")で、どの動画を処理するのか教えてあげます。
  2. スケールフィルターを設定.filter_desc("scale=1280:-1")で、幅を1280ピクセルに設定。縦は-1のおかげで自動で調整されます。
  3. 出力先を決める.output("output.mp4")で、完成した動画の保存先を指定。
  4. 処理を実行:チェーン呼び出しで、コンテキストを作って、処理を始めて、終わるのを待つ。スムーズそのものです!

もしFFmpegのコマンドラインを使うなら、ffmpeg -i test.mp4 -vf scale=1280:-1 output.mp4みたいな感じになります。でも、パラメータを間違えやすいし、ちょっと大変ですよね。RustのAPIなら、直感的でプロジェクトにすぐ取り入れられます。


いろんなシーンで大活躍!

解像度を調整するニーズって、本当にたくさんありますよね。いくつか例をご紹介します。きっと、あなたのプロジェクトでも役立つはずです!

1. 特定のデバイスに合わせる

たとえば、古いデバイスの640x480の画面に動画を合わせたい場合:

.filter_desc("scale=640:480")

注意:これだと画面が伸びたり縮んだりする可能性があるので、見た目が大事な時は別の方法がおすすめです。

2. 片方の寸法だけ変えて、縦横比をキープ

画面が変形しないように、たとえば縦を720ピクセルに固定して、横を自動調整:

.filter_desc("scale=-1:720")

これなら、動画がキレイにリサイズされますよ。

3. 全体を等倍で縮小

動画を50%のサイズにしたいときは:

.filter_desc("scale=iw*0.5:ih*0.5")

iwihは元の幅と高さのこと。とっても便利ですよね!

これらの方法を使えば、どんなニーズにも柔軟に対応できます。デバイスに合わせたり、ファイルサイズを小さくしたり、いろんなバージョンの動画を用意したり…。このAPIなら、すぐに対応できちゃいます!


おわりに

Rustで動画解像度を調整する時、学習の大変さや操作の難しさに困ることはもうありません。FFmpegをラップしたRustライブラリを使えば、たった数行のコードで、入力から出力までスムーズにできちゃいます。FFmpegの細かいコマンドを覚える必要もなし!

この方法のいいところをまとめると:

  • 時間も労力も節約:パラメータを試行錯誤する手間がなく、コードでサクッと解決。
  • ミスが減る:チェーン呼び出しで操作が分かりやすく、手作業のエラーがぐっと減ります。
  • 柔軟に対応:いろんな調整方法が使えるから、どんなシーンでも安心。

動画のトランスコードツールを作ったり、複数のデバイスに動画を合わせたり、ストレージを節約したり…。Rust開発者の皆さん、この方法で作業がグッと楽になりますよ!

🔗 オープンソースプロジェクトez-ffmpeg

Discussion