FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


macOSアプリからFFmpegを使い複数の動画ファイルをクロップする

Macで時々FFmpegという動画編集ソフトを使うんだけど、いつもターミナルから使うのがなんとも面倒だったりする。コマンドを入力したり、動画ファイルをターミナルにドラッグ&ドロップするなど。
まだファイルが1つならいいんだけど、何十個もあるとやってられない。
なにかいい方法はないかなあ?と調べるとmacOSアプリからFFmpegを使えそうな記事(※)を見たのでやってみた。

やりたいことは、、、動画ファイルのクロップ(トリミング)だ。画面上部を削除したい(時間的なトリミングではない)。
もう少し詳しく書くとiPhoneで録画したアプリのプレイ動画は録画中を示すためステータスバーがずっと赤くなりそれが録画されている(これはもちろんアプリによるのでステータスバーが非表示なら何も赤くなったりしない)。
クロップ前の動画のスクショ
↑この赤いステータスバーの部分を削除したいのだ。


ffmpeg -i src.mp4 -vf crop=width:height:x:y dst.mp4
↑通常ならターミナルからこのような形式で入力する。
これをmacOSアプリから実行する。下のコードは単に1つの動画ファイルに対する処理。
{
    NSTask *task = [[NSTask alloc] init];
    [task setLaunchPath:@"/usr/local/bin/ffmpeg"];

    [task setArguments:@[@"-i", srcFilePath , @"-vf", @"crop=1080:1868:0:52", dstFilePath]];
    
    [task launch];
    [task waitUntilExit];
    
    int status = [task terminationStatus];
    if (status == 0) {
        NSLog(@"Task succeeded");
    } else {
        NSLog(@"Task failed");
    }
}
↑クロップの位置はあくまでiPhone 7 Plusで撮影した動画ファイルの縦長の場合なので違う場合は適当に変更が必要。ちなみにiPhone 7 Plusでアプリを録画すると動画ファイルは1080x1920のサイズになる。
ループでフォルダ内にある動画ファイルに対しどんどんこの処理したのだが、1つの処理が終わるまで次へ行かない(並列で処理されるわけではない)。
これで複数の動画ファイルを自動的にクロップすることができた。
クロップ後の動画のスクショ
↑クロップ後の動画のスクショ。上部の赤いステータスバー部分を削除できている。


※参考
How to record screen in macOS using FFmpeg in Objective-C? - Stack Overflow



<< macOSでのスクロールビュー NSScrollView の最小実装  TopPage  iOSアプリ赤ちゃんの成長グラフver2.3(ARKitで身長計測機能の追加)が公開 >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1235-78878a01




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad