私は普段、QuickTimePlayerによる収録、Youtubeの動画保存、デジカメやiPhoneによる動画撮影等をしているのですが、
解像度がFullHD以上で固定されている場合が多く、録画時間が長くなるとファイルサイズも大きくなり、ストレージの空き容量も少なくなります。
一方でファイル内容や動画をスマホで見る場合など、FullHDまで必要ないケースもあるため、Macのエンコード機能を使用してファイルサイズを小さくして管理しています。
ビデオファイルのエンコード方法
ファイルで右クリック > 選択したビデオファイルをエンコード > 設定でエンコード指定
エンコードする際は複数ファイルを選択して実行することで1ファイルずつ実行されるのですが、ファイル選択とエンコード指示が手間(実際そこまでではないですが)なので、
1アクションで実行する方法として、ショートカットAppを使用して指定フォルダ内のビデオファイルを1ファイルずつエンコード処理するショートカットを作成したので紹介します。
作成したショートカットについて
以下で公開しています。使用する際は自己責任の範囲でリンクより取得して使用してください。
※リンクから追加画面に遷移しない場合はメモにURLを貼り付けてからアクセスしてください。
使い方、注意事項についてはショートカットの先頭にコメントで記載しているため参照してください。
以下では使用アクションと処理のポイントについて記載します。
指定フォルダに格納されたファイル一覧の取得処理として、エンコード処理はファイル単位で実行するため、lsコマンド
を使用してファイルの一覧を.tmpファイル
に書き出しています。
次にフォルダからファイルを取得
アクションを使用して改行
で分割指定することにより、.tmpファイル
からファイル単位の情報に分割しています。
分割した情報はリストから項目を取得
アクションを使用してRangeの項目指定で開始位置から終了位置まで
取得しています。
フォルダ内のファイル一覧を取得するアクションがあるとよかったのですが、単体では存在しないようです 。
次に.tmpファイル
は不要になるためrmコマンド
で削除しています。
その後、各項目を繰り返す
アクションでリストからの項目
を指定しています。
リストからの項目ではビデオファイル名(ファイル名.拡張子)を取得できるため、ビデオファイル名をシェルスクリプトに引数
として与えてavconvertコマンド
を実行しています。
ここでポイントとして、ファイル名を出力ファイル名に使用したかったので、${source%.*}
でファイル名部分を変数filename
に代入しています。シェルスクリプトに渡す変数は調べた範囲では複数指定できないようだったのでシェルの中で処理しました。
最後に完了メッセージを表示して、ショートカットを停止しています。
まとめ
ショートカットAppを使用して指定フォルダ内のビデオファイルを1ファイルずつエンコード処理するショートカットを作成したので紹介しました。
ショートカットを作成していて使いたいアクションがないケースがあり、作りづらいと感じる部分もありました。
正直、エンコード処理であればシェルスクリプトで書けばいいのではと思うこともありましたが、今回はショートカットで作成しました。
ショートカットでは共有する都合上、表示アクションを追加していますが、削除すればショートカットの実行のみで各ファイルがエンコードされるため、やりたいことは実現することができました。
また、ファイルの取得処理などは動画ファイル以外でも使用できるため、何かで他でも活用できるかと思います。
参考
以下の記事を参考にさせていただきました。
MacOS コマンドラインで「選択したビデオファイルをエンコード」 - vague memory