例えば、NHK「らじる★らじる・聴き逃し番組」のクラシックカフェ(収録時間は約2時間)を収録すると多くのクラシック曲が混在しています。 収録ファイルの中でお気に入りのクラシック曲を切出し(抽出)たい時が多々あると思います。
今回は、収録した音声ファイルをお気に入り部分の開始時間と終了時間を指定することで、お気に入り部分が切出せるffmpegのコマンドラインを組み込んだショートカットアプリの紹介です。
「らじる★らじる・聴き逃し番組」収録方法
音声・映像ファイルの切出しを行うFFmpegのコマンドライン
FFmpegのコマンドライン( CLI )を実行するには予めFFmpegをインストールする必要があります。 インストールされていない方は、以下を参照してください。
音声ファイルを切出すコマンドライン
下の場合は、AACファイル(m4a)の切出し例です。 macOSのターミナルを立ち上げてFFmpeg のコマンドラインに切出し開始時間と終了時間を打ち込めばAACファイルが無劣化で切出(抽出)されます。
ターミナル fmpeg -i "切出し元ファイル.m4a" -vn -ss 00:00:00 -to 00:01:20-acodec copy "切出しファイル.m4a" -------- (注記) FFmpegがApplicationsフォルダーにインストールされている時は、/Applications/ffmpeg にします。 また、" "で囲まれているファイルはフルパスで記述します。
オプションの説明
FFmpegのコマンドラインライン中に - で示される黄色部分がオプションです。
オプション | 内容 |
-i | 入力ファイルのパス |
-vn | ビデオの無効化(注記1) |
-ss 00:00:00 | -ssで切出し開始を示し、00:00:00で時:分:秒を指定します。 |
-to 00:01:20 | -toで切出し終了を示し、00:00:00で時:分:秒を指定します。 |
-acodec copy | copy コーデックを指定し、無劣化で切り出し部分がコピーされます。 (FFmpegが対応している音声コーディックファイルが 対象です) |
注記1:-vnオプションを付加しないと、アートワークが含まれている音声ファイルを切出すと、コマンドライン実行時エラーになります。 また、切出し後のファイルはアートワークは継承されません。(2024/6/8追記)
FFmpeg CLI をショートカットアプリに組込む
音声ファイルを切出すために、ターミナルを立ち上げ、切出し用のFFmpeg CLI を記述するのは面倒で非効率ですので、macOSに標準でインストールされているショートカットアプリを作成しておき、このアプリを呼出せば、簡単に音声ファイルを切出すことができます。
ショートカットアプリ作成手順
まず、macOSのLaunchpadから「ショートカットApp」を開きます。 ファイル > 新規ショートカット を選択しショートカット名の欄に Sound_Fileの切出し(抽出) と記入しショートカットの名前を付けます。
今回作成したショートカットは、入力プロセス(ファイル指定、開始時間、終了時間)と切出しプロセス(シェルスクリプトによるファイル切出し)の2つで構成されています。 夫々のプロセスについて説明します。step
1入力プロセスの説明 (Action-1〜5)
「ショートカットエディタ」エリア
にAction-1〜5を配置します。
・D & Dはドラッグ・アンド・ドロップの意味です。
・アクション項目の選択は、検索窓に入力するのが簡単です。
Action-1
「アラートを表示」アクションを選んで「ショートカットエディタ」エリアにD & D。 タイトルに「サウンドファイルの切出し(抽出)を実行します。」を記述
Action-2:ファイル選択
「ファイルを選択」アクションを選んで「ショートカットエディタ」エリアにD & D。 更に「変数に追加」をD & Dすると上のアクションとリンク線で接続される。 変数名をabcと記入することで紐付けられ、選ばれたファイル名がスクリプトの特殊変数($1)に格納される。
Action-3:開始時間入力
「入力を要求」アクションを選んで「ショートカットエディタ」エリアにD & D。 更に「変数に追加」をD & Dすると上のアクションとリンク線で接続される。 変数名をabcと記入することで紐付けられ、テキストで入力された開始時間がスクリプトの特殊変数($2)に格納される。
Action-4:終了時間入力
「入力を要求」アクションを選んで「ショートカットエディタ」エリアにD & D。 更に「変数に追加」をD & Dすると上のアクションとリンク線で接続される。 変数名をabcと記入することで紐付けられ、テキストで入力された終了時間がスクリプトの特殊変数($3)に格納される。
Action-5:切出しファイル入力
「入力を要求」アクションを選んで「ショートカットエディタ」エリアにD & D。 更に「変数に追加」をD & Dすると上のアクションとリンク線で接続される。 変数名をabcと記入することで紐付けられ、テキストで入力された切出しファイル名がスクリプトの特殊変数($4)に格納される。
step
2切出しプロセスの説明 (Action-6〜7)
続けてAction-6〜7を配置します。
・D & Dはドラッグ・アンド・ドロップの意味です。
・アクション項目の選択は、検索窓に入力するのが簡単です。
Action-6
「通知を表示」アクションを選んで「ショートカットエディタ」エリアにD & D。 タイトルに「サウンドファイルの切出しアクションを開始しました!」を記述
Action-7
「シェルスクリプトを実行」アクションを選んで「ショートカットエディタ」エリアにD & D。 切出し用のFFmpeg CLI 含みシェルスクリプトコードを記述します。
ここに記述するシェルスクリプトコードは、後述の「シェルスクリプト」コードを参照
赤枠で囲まれた重要設定の通りに設定すること。
シェル:bash
入力:abc
入力を渡す方法:引数として
Action-7「シェルスクリプト」コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# 文字化け対策 export LANG=ja_JP.UTF-8 # 順番に変数ABCに追加された入力内容は特殊変数($1〜$4)に格納されている # $1 #選択したファイル名(フルパス) # $2 #開始時間 # $3 #終了時間 # $4 #切出しファイル名 file_name=$1 #拡張子除く ${file_name%.*} #ディレクトリ抽出 ${file_name%/*} #拡張子取得 .${file_name##*.} out_file=${file_name%/*}/$4.${file_name##*.} /opt/homebrew/bin/ffmpeg -i "$file_name" -vn -ss $2 -to $3 -acodec copy "$out_file" result=$? # 特殊変数 $?で正常終了は0 異常は1を返します。 if [ $result = 1 ]; then #異常終了" osascript -e 'display dialog "エラーです!! 選択のファイルが音声ファイルでないか、入力に誤りがあります。" buttons {"終了"} with icon 2 with title "Sound_Fileの切出し(抽出).app"' exit # 異常ダイアログを表示して終了 else #正常終了" osascript -e 'display dialog "サウンドファイルの「切出し」が完了しました!!" buttons {"OK"} with icon 1 with title "Sound_Fileの切出し(抽出).app"' fi # END |
- 10行目:特殊変数 $1 にファイル名をフルパス格納された内容を、で file_nameに代入
- 16行目:切出しファイル名($4)の前後に、元のファイル名($1)から抽出したディレクトリと拡張子でサンドイッチして out_file にしています。
- 18行目:音声・映像ファイルの切出すFFmpegコマンドラインで切出しファイルを生成
- 20行目:FFmpegコマンドラインが異常終了した場合、特殊変数 $? が 1 を 正常終了した場合 $? は 0 が出力されます。 このステータスを判定する if文 で「正常」か、「異常」終了かで、表示するダイアログを変えています。(ダイアログはosascript -eでAppleScriptのダイアログを利用しています)
作成したショートカット・アプリの使い方
ショートカットのアプリ化
ポイント
作成した「Sound_Fileの切出し(抽出)収録」ショートカットを実行しても良いのですが、作成したショートカットを自己実行できるアプリ化(拡張子をapp)にした方が使い易くなります。
作成した「Sound_Fileの切出し(抽出)」ショートカットを右クリックして、 Dockに追加 を選択します。
すると、 Dockに Sound_Fileの切出し(抽出)が追加されますので、右クリックで、オプション > Finderに表示 を選択します。
するとFinderにアプリ化された、Sound_Fileの切出し(抽出) .app が存在している筈ですので、このファイルをダブルクリックすれば音声ファイルの切出しを実行できます。
なお、今回作成したショートカット・アプリは音声ファイル以外のファイルを誤って選択すると、FFmpegエラーになりますので注意してください。
Sound_Fileの切出し(抽出) .app を使う
ポイント
先ず、準備として
切出すための開始時間と終了時間を決めなければなりません。 ちょっと原始的ですが、VCLプレーヤ(Audacityなど)に切出す対象の音声ファイルをドロップします。 再生音を聞きながら(ビデオを見ながら)再生時間を示すタイムラインバーを動かして、「お気に入り」部分の開始時間(時:分:秒)と終了時間(時:分:秒)を特定し記録します。
準備が出来たら
Sound_Fileの切出し(抽出)収録 .appを起動して、画面の指示に従って、音声ファイルを選択し、先程記録しておいた「お好みの」の開始時間や終了時間及び切出しファイル名を入力して行けば「お好みの部分」が切出しファイルが生成されます。
ビデオをご覧ください。
ショートカットアプリのあとがき
macOSショートカットアプリの入力処理は。以前のAutomatorに比べて分かり易くなりました。 しかし、シェルスクリプトへの変数渡しの方法がもう少し簡単になると良いと感じました。
シェルスクリプトの特殊変数について、下のページが分かり易く纏められていましたのでご参照ください。