はじめに
FFmpegを使えば、コマンドラインから動画ファイルの様々な操作が可能
FFmpeg の導入が面倒な場合は、ffmpeg_sidecar クレートを使えば、FFmpeg を自動でダウンロードして、各種処理が可能
(ez-ffmpeg などもあるが、こちらはバイナリの自動ダウンロードなどはしてくれない)
プロジェクト準備
mkdir ffmpeg cd ffmpeg cargo init
Cargo.toml に ffmpeg_sidecar の依存を定義
[dependencies] ffmpeg_sidecar = "2.2.0"
ffmpeg_sidecar の利用
ffmpeg_sidecar は FFmpeg CLI のラッパとなっており、Fluent な API で操作できる。
src/main.rs を以下に編集
use ffmpeg_sidecar::command::FfmpegCommand; fn main() -> Result<(), Box<dyn std::error::Error>> { // プラットフォームに応じた ffmpeg を自動ダウンロード ffmpeg_sidecar::download::auto_download()?; let input_file = "input.mp4"; let output_file = "output.aac"; // ffmpeg -i input.mp4 -vn -c:a copy -y output.aac FfmpegCommand::new() .input(input_file) // "-i", input_file .no_video() // "-vn" Video No : ビデオストリームを無視 .codec_video("copy") // "-c:a", "copy" Codec Audio: copy : 音声ストリームを再エンコードせずコピー .overwrite() // "-y" 出力ファイルが既に存在する場合、確認なしで上書き .output(output_file) .spawn()?; Ok(()) }
実行
$ ls
Cargo.lock Cargo.toml input.mp4 src/ target/
$ cargo run
Compiling ez-ffmpeg v0.1.0 (...)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.24s
Running `target\debug\ez-ffmpeg.exe`
$ ls
Cargo.lock Cargo.toml input.mp4 output.aac src/ target/
初回は ffmpeg のダウンロードで少し時間がかかる
音声ファイル output.aac が抽出される