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



## **はじめに**

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

---

## **Rustでの動画処理の悩みを解決！**

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

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

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

---

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

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

### **1. FFmpegをインストール**

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

#### **macOS**：

```bash
brew install ffmpeg
```

#### **Windows**：

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

### **2. Rustの依存関係を追加**

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

```toml
[dependencies]
ez-ffmpeg = "*"
```

### **3. Rustのコードを書く**

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

```rust
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の画面に動画を合わせたい場合：

```rust
.filter_desc("scale=640:480")
```

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

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

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

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

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

### **3. 全体を等倍で縮小**

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

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

`iw`と`ih`は元の幅と高さのこと。とっても便利ですよね！

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

---

## **おわりに**

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

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

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

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

🔗 **オープンソースプロジェクト**：[ez-ffmpeg](https://github.com/YeautyYE/ez-ffmpeg)