0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

はじめに

動画処理の現場では、解像度の調整がどうしても必要な場面がたくさんありますよね。たとえば、スマホやタブレット、テレビなど、さまざまなデバイスに動画を合わせたり、ストレージやネットワークの負担を減らすために動画サイズを小さくしたり…。でも、伝統的な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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?