FFMPEGは動画のmp4ファイルなどを加工することができるコマンドラインツールです。
Windowsだけでなく、LinuxやMacなど様々なOSで使うことができます。
そんなFFMEPGを使って動画をトリミングする処理を、C#で制御してみたいと思います。
【検証環境】Windows10 / .NET5 Console
FFMPEGの設定
インストール
下記のダウンロードページを開きます。
https://ffmpeg.org/download.html
「Windows builds by BtnN」を選択します。
「ffmpeg-N-104925-ga8a7c5d502-win64-gpl-shared.zip」をダウンロードします。
環境変数にパスを登録するために、ダウンロードしたZipファイルを解凍し、中身の「bin」フォルダの絶対パスをコピーします。
タスクバーの検索ボックスで「環境変数」と入力すると、【環境変数を編集】が表示されるので、選択します。
Pathを選択した状態で、編集をクリックします。
新規を選択して、コピーしたパスを貼り付け、OKをクリックします。
コマンドプロンプトで「ffmpeg -version」を叩きます。下記のように返ってくれば、準備完了です。
使い方
使い方はこちらのサイトを参考にさせて頂きました。
(例)「E:sample.mp4」の10秒から30秒間切り出し、「E:output.mp4」として出力する
ffmpeg -i E:sample.mp4 -ss 10 -t 30 E:output.mp4
59秒の動画が、10秒の位置から30秒先まで切り取られていることが確認できました。
動画は下記のサイトでフリー素材をダウンロードできます。
https://pixabay.com/ja/videos/
C#で制御してみる
C#でコマンドを実行するには、Processクラスを利用します。
下記のコードを実行すると、プログラムからFFMPEGを実行できることが確認できました。
using System;
using System.Diagnostics;
namespace testprocess
{
class Program
{
static void Main(string[] args)
{
//開始時間
var start = 10;
//切り取り時間
var cut = 30;
//切り抜き元ファイルパス
var orgPath = @"E:sample.mp4";
//出力ファイルパス
var outPath = @"E:output.mp4";
//Processの生成
using (var process = new Process())
{
// コマンド
process.StartInfo.FileName = "ffmpeg";
// コマンド引数
process.StartInfo.Arguments = $@"-i {orgPath} -ss {start} -t {cut} {outPath}";
// コマンド実行
process.Start();
// コマンド終了まで待機
process.WaitForExit();
}
Console.WriteLine("コマンド完了");
}
}
}
C#のコマンド制御についてはこちらとこちらのサイトを参考にさせて頂きました。