【Mac/Apple Silicon対応】動画を24fpsから60fpsへ!RIFEフレーム補間を全自動化するAppleScript

動画編集をしていると、「24fpsのシネマティックな素材を、60fpsのプロジェクトで滑らか(ヌルヌル)に動かしたい」という場面に遭遇しませんか?

一般的な編集ソフト(LumaFusionなど)でそのままfpsを引き上げても、同じコマが複製されるだけでカクつきが残ってしまいます。そこで活躍するのが、AIが「存在しない中間フレーム」を描き出してくれる「RIFE (rife-ncnn-vulkan)」という技術です。

ただ、毎回ターミナルを開いてコマンドを叩き、動画を画像に分解して…と手作業でやるのは非常に面倒ですよね。

今回は、「動画を選ぶだけで、分解・AI補間・再結合・ゴミ箱掃除まで全て全自動でやってくれるAppleScript」を作成したのでシェアします!M1などのApple Silicon搭載Macで爆速で動きます。

変換前 猫の動きに注目すると若干カクカクしています
変換後 猫の動きに注目するとカクカク感は消えています。
目次

スポンサーリンク

事前準備:必要なツールをインストール

このスクリプトを動かすには、以下の2つがMacにインストールされている必要があります。

  1. ffmpeg(動画と画像の相互変換に使用)
    • Homebrewを使っている場合、ターミナルで brew install ffmpeg を実行するだけで完了します。
  2. rife-ncnn-vulkan(AIフレーム補間の本体)
    • GitHub等からMac版(Vulkan対応版)をダウンロードし、任意のフォルダに配置しておきます。今回は rife-v4 モデルを使用します。

こちらからダウンロードし解凍してからお好きな場所に配置しておいてください。

コピペでOK!全自動AppleScriptのコード

Mac標準アプリの「スクリプトエディタ」を開き、以下のコードをコピペしてください。

※注意点: 2行目の property rifePath の部分だけ、ご自身のMacに保存した rife-ncnn-vulkan の実行ファイルがある場所へのパスに書き換えてください。

スクリプト2行目の property rifePath の部分は、ご自身のMacに保存した rife-ncnn-vulkan の実行ファイルがあるパスに必ず書き換えてください。 【例】 property rifePath : "/Users/あなたの名前/rife-ncnn-vulkan-20221029-macos/rife-ncnn-vulkan" ※ パスを囲む "(ダブルクォーテーション)は必ず半角のままにしてください。全角()になるとエラーになります。

-- 設定項目(ご自身の環境に合わせてパスを書き換えてください)
property rifePath : "/Users/ここ/rife-ncnn-vulkan-20221029-macos/rife-ncnn-vulkan" -- ★実際のrife実行ファイルパスに変更
property ffmpegPath : "/opt/homebrew/bin/ffmpeg"
property rifeModel : "rife-v4" -- ★使用するモデル名

on run
	-- 1. 動画ファイルの選択
	set inputFile to choose file with prompt "60fpsになめらかにしたい24fpsの動画を選択してください"
	set inputPath to POSIX path of inputFile
	
	-- 2. デスクトップに作業ディレクトリを設定
	set desktopPath to POSIX path of (path to desktop folder)
	set workDir to desktopPath & "RifeSmooth_Work"
	
	set tempInput to workDir & "/1_temp_in"
	set tempOutput to workDir & "/2_temp_out"
	set resultDir to workDir & "/3_result"
	
	-- フォルダの実作成(すでに存在する場合はそのまま)
	do shell script "mkdir -p " & quoted form of tempInput
	do shell script "mkdir -p " & quoted form of tempOutput
	do shell script "mkdir -p " & quoted form of resultDir
	
	-- ★追加機能1: 処理開始前に、前回の作業画像が残っていたらすべて削除(クリーンアップ)
	do shell script "rm -rf " & quoted form of tempInput & "/*"
	do shell script "rm -rf " & quoted form of tempOutput & "/*"
	
	-- ★追加機能2: 出力ファイルがすでに存在する場合、リネームして保存
	set baseName to "output_60fps"
	set outputPath to resultDir & "/" & baseName & ".mp4"
	
	-- ファイルの存在確認
	set fileExists to (do shell script "if [ -f " & quoted form of outputPath & " ]; then echo 'true'; else echo 'false'; fi")
	
	if fileExists is "true" then
		-- 存在する場合は現在の日時(年月日時分秒)をファイル名に付与して上書きを回避
		set timeStamp to do shell script "date +'%Y%m%d_%H%M%S'"
		set outputPath to resultDir & "/" & baseName & "_" & timeStamp & ".mp4"
	end if
	
	-- 3. 動画を連番静止画に分解(24fpsのまま抽出)
	do shell script ffmpegPath & " -i " & quoted form of inputPath & " -qscale:v 2 " & quoted form of (tempInput & "/%08d.png")
	
	-- 4. 元のフレーム数を数え、60fps用の「目標フレーム数」を計算
	set frameCountStr to do shell script "ls -1 " & quoted form of tempInput & " | wc -l"
	set frameCount to frameCountStr as integer
	
	-- 万が一画像が抽出できなかった場合のエラー処理
	if frameCount is 0 then
		display dialog "エラー: 動画から画像を抽出できませんでした。" buttons {"OK"} default button "OK"
		return
	end if
	
	-- 24fps -> 60fps なので、フレーム数を2.5倍にします
	set targetFrameCount to round (frameCount * (60.0 / 24.0)) rounding as taught in school
	
	display dialog "元のフレーム数: " & frameCount & "枚
目標フレーム数(60fps): " & targetFrameCount & "枚

RIFE処理を開始します。" buttons {"OK"} default button "OK" giving up after 5
	
	try
		-- 5. RIFE実行 (-m オプションでモデルを指定)
		set rifeCmd to "cd $(dirname " & quoted form of rifePath & ") && ./rife-ncnn-vulkan -m " & rifeModel & " -i " & quoted form of tempInput & " -o " & quoted form of tempOutput & " -n " & targetFrameCount
		do shell script rifeCmd
	on error errMsg
		display dialog "エラーが発生しました: " & errMsg
		return
	end try
	
	-- 6. 60fpsの動画として再結合
	set combineCmd to ffmpegPath & " -y -r 60 -i " & quoted form of (tempOutput & "/%08d.png") & " -i " & quoted form of inputPath & " -map 0:v:0 -map 1:a? -c:v libx264 -pix_fmt yuv420p -shortest " & quoted form of outputPath
	
	do shell script combineCmd
	
	-- ★追加機能3: 処理がすべて成功したら、作業用フォルダの中身を空にする(自動クリーンアップ)
	do shell script "rm -rf " & quoted form of tempInput & "/*"
	do shell script "rm -rf " & quoted form of tempOutput & "/*"
	
	display dialog "完了しました!
動画が「3_result」に作成されました。
作業用の画像ファイルはすべて自動的に削除されました。" buttons {"OK"} default button "OK"
end run

このスクリプトのすごいところ

  • 正確な60fps変換: 24fpsの素材を単純に2倍(48fps)にするのではなく、画像の枚数を数えて自動で「2.5倍」の計算を行い、ぴったり60fpsに合わせます。
  • デスクトップを汚さない: 処理が始まるとデスクトップに専用の「RifeSmooth_Work」フォルダを作り、そこで作業を完結させます。
  • 自動クリーンアップ: AIが生成した大量の中間画像(放置すると数GB〜数十GBになります)は、動画の書き出しが成功した瞬間に**自動でゴミ箱へ捨ててくれます。**Macのストレージに優しい設計です。
  • ファイル上書き防止: 連続で処理しても、ファイル名に自動でタイムスタンプが付くので、過去の動画を誤って消してしまう心配がありません。

アプリ化してさらに便利に!

スクリプトエディタのメニューから「ファイル」>「書き出し」を選び、ファイルフォーマットを**「アプリケーション」**にして保存すれば、ダブルクリックするだけで起動する独立したミニアプリになります。

M1 MacBook AirなどのApple Silicon搭載機なら、数秒〜数十秒のクリップであればあっという間に処理が終わります。事前にこのツールで素材をヌルヌルにしてから編集ソフトに放り込むワークフロー、最高に快適なのでぜひ試してみてください!

スポンサーリンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

システム開発SE・アプリ開発・デバッガー等々なんでもやる猫の下僕です。現在は凶暴猫にカタカタ動く手を狙われながらキーボードを打っています。かなりゆるい性格なのでコメントやメッセージお気軽に〜お仕事のご依頼もお気軽にぃ〜

スポンサーリンク

コメント

コメントする

CAPTCHA


目次