[FFmpeg] 動画に複数のぼかしを入れる

[M1 Mac, Big Sur 11.6.8]

FFmpegのコマンドがとにかくわかりにくいので、書き留めておきます。

開発中のビデオツールアプリに実装するには、このコマンドをC++で生成する必要があります。

FFmpeg関連の情報はネットに数多くありますが、どういったユーザー層なのか気になります。C/C++ユーザーよりもコマンドライン使いが多そうです。

ffmpeg -i out.mp4 -filter_complex \          --- (1)
 "[0:v]crop=265:154:648:103,boxblur=4[b0]; \ --- (2)
  [0:v]crop=94:111:572:267,boxblur=4[b1]; \  --- (3)
  [0:v][b0]overlay=648:103[ovr0]; \          --- (4)
  [ovr0][b1]overlay=572:267[ovr1]" \         --- (5)
-map "[ovr1]" out2.mp4                       --- (6)

(1) 入力ファイルはout.mp4。以下、-filter_complexを記す。
(2) 入力ファイル0番目の映像[0:v]について、x:648,y:103の位置からw:265,h:154のサイズでクロップし、レベル4のboxblur処理をする。これをb0とする。
(3) 入力ファイル0番目の映像について、x:572,y:267の位置からw:94,h:111のサイズでクロップし、レベル4のboxblur処理をする。これをb1とする。
(4) 入力ファイル0番目の映像とb0をx:648,y:103の位置で重ねる。これをovr0とする。
(5) ovr0とb1をx:572,y:267の位置で重ねる。これをovr1とする。
(6) ovr1をマッピングし、out2.mp4として出力する。

[MacOS] ディレクトリ権限の変更によるアプリ動作不良

[M1 Mac, Big Sur 11.6.8, clang 13.0.0, FLTK 1.3.8, NO IDE]

通信プロトコルの実験を進めていく過程でなぜかホームディレクトリへの書き込みが不可になっていたため、一部アプリが動かなくなりました。

ホームディレクトリの権限を縮小した覚えは全くないのですが、以下のように読み取り可能、書き込み不可、実行可能になっていたので、chmodコマンドで権限を全て可能に戻しました。

[MacOS] Windows機とのファイル送受信 SFTPコマンド例

[M1 Mac, Big Sur 11.6.8]
[DeskMini B660, Windows11]

MacとWindows機との間でファイルのやりとりができるようにしました。

Macをサーバーとする送受信はOpenSSHクライアントがデフォルトで有効になっているため、何も設定しなくてもWindows機コマンドプロンプト(あるいはPowerShell)からSFTPコマンドで可能です。

今回の設定はWindows機がサーバー、MacがクライアントのSFTPによるファイル送受信になります。

手順は以下の通りです。

1.Windows11のオプション機能 OpenSSHサーバーを追加する。

2.”コンピューターの管理”でOpenSSHサーバーを有効にする。

`3.コマンドプロンプトにhostnameを入力してホスト名を確認する。

4.MacのターミナルからWindows機にアクセスする。

sftp ホスト名.local

5.getコマンド、putコマンドでファイルをコピーする。

# Windows11のホームにあるtest.txtをMacのdirへコピーする。
get test.txt [to mac dir]

# Windows11のホームにあるtestディレクトリをMacのホームへコピーする。
get -r test

# Windows11のホームにあるtestディレクトリ内のファイル全てをMacのdirへコピーする。
get -r test [to mac dir]

# Macのホームにあるtest2.txtをWindows11のdirへコピーする。
put test2.txt [to win dir]

[MacOS] Mac間のファイル転送 SFTP

[M1 Mac, Big Sur 11.6.8]

ローカル環境のMac間でファイルをコピーする時は、iCloudやFinderのSMB接続を使っていましたが、iCloudは同期が異様に遅い、SMB接続はトラブルが多いため、結局USBストレージでコピーファイルを移すことが多かったです。

最近、通信プロトコルを学習していて、SFTPコマンドを使えば簡単にファイル転送できることを知りました。SFTPはFTPのセキュリティ強化版です。なおAirDropはWi-Fi接続が必須なので今回は除外しています。

これまでGUIでSMBプロトコルを使うとトラブルに見舞われることが多かったので、これを機会にSFTPへシフトするつもりです。

これで大分作業効率がアップしそうです。Macユーザーでどれくらいの方がSFTPを使っているか知りたいです。

次はWindows機との効率的なファイル送受信を検討します。

SMBのトラブル例(他にログインがなくてもこうなる)
SFTPによるファイル転送(ディレクトリ転送も可能)

[AppleScript] 02 アルファベット入力からローマ字変換 スクリプト案

かなり時間が掛かりましたが、土台が出来上がりました。

以下のスクリプトではクリップボードのアルファベットをひらがなに変換するだけです。

操作中のアプリで文字を全選択してひらがな変換し、アプリに貼り付けるという動作はまだできません。

いつになるかわかりませんが、完成すればAutomatorに登録してショートカットを割り当てる予定です。

それにしてもAppleScriptの情報の少なさには困り果てました。ネット検索する限りでは日本語ユーザーの有識者は2人位しかいらっしゃいません。on – endが関数の設定と分かるまでは全く前に進みませんでした。

use AppleScript version "2.5" --  (10.12) or later
use framework "Foundation"
use scripting additions

property NSString : a reference to current application's NSString
property NSStringTransformLatinToHiragana : a reference to current application's NSStringTransformLatinToHiragana

selectString() -- 全選択のみ可

set latin to the clipboard

set hiragana to alphabetToHiragana(latin)

set the clipboard to hiragana

pasteString() -- 今のところ機能せず

on selectString()
    tell current application
        activate
        tell application "System Events"
            keystroke "ac" using command down
        end tell
    end tell
end selectString

on pasteString()
    tell current application
        activate
        tell application "System Events"
            keystroke "v" using command down
        end tell
    end tell
end pasteString

on alphabetToHiragana(aStr)
	set aString to NSString's stringWithString:aStr
	return (aString's stringByApplyingTransform:(NSStringTransformLatinToHiragana) |reverse|:false) as string
end alphabetToHiragana

参考サイト

[AppleScript] 01 アルファベット入力からローマ字変換

アルファベットから”かな”キー連打でローマ字変換するという機能がmacOS Monterey 12.3.1では今のところ使えません。

もうAppleの対応をあてにせず、AppleScript等でなんとかできないか探ってみます。

実装したい内容は以下の通りです。
1.カーソル直近のアルファベット文字列を自動選択する。
2.ローマ字変換でひらがなに変換する。
3.漢字変換する。
アサインするキーはこれまで通り”かな”キー連打あるいは⌘ + 1文字とします。

ネットで調べるとAppleScriptでNSStringTransformLatinToHiraganaを使っているコード例が見つかりました。

またBig Surに戻すのもアホらしいのでなんとかしたいです。

[macOS] 34 launchdによる定期実行 実施例

[macOS Big Sur 11.6.1]

launchdによるプログラムの定期実行を試してみました。

エディタやXcodeを使ってxml形式でplistファイルを作成するのですが、エディタでは非常に書きにくいです。Xcodeが多少マシかと思います。どちらにしても結局crontabの方が扱いやすいです。

plistファイルを/Library/LaunchAgentsに作成したら、chownコマンドで所有者変更、chmodコマンドで権限変更します。最後にplistファイルをロードすると定期実行が始まります。

下記コード例では60秒おきにtest.pyを実行します。

このスキルはcrontabが使えなくなった際の代替手段としてストックしておきます。htmlとxmlは極力書きたくないです。だからなのかJavaScriptとはまた疎遠になっています。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>test</string>
    <key>ProgramArguments</key>
    <array>
        <string>python</string>
        <string>test.py</string>
    </array>
    <key>StartInterval</key>
    <integer>60</integer>
    <key>StandardOutPath</key>
    <string>test.out</string>
    <key>StandardErrorPath</key>
    <string>test.err</string>
</dict>
</plist>
Xcodeでplistを表示
# plistを有効化
launchctl load test.plist

# plistを無効化
launchctl unload test.plist

[macOS] 33 launchdによる定期実行検討

[macOS Big Sur 11.6.1]

前回記事でMicrosoft AutoUpdateの定期実行を強引にできなくしましたが、そもそもどこで管理しているのか調べてみました。

今回のケースではライブラリディレクトリにあるLaunchAgentsやLaunchDaemonsでコントロールしています。crontabだけではなくこのlaunchdというサービス管理フレームワークでも自由にプログラムの定期実行を設定できるようです。

Microsoftの他にCubaseのメーカーであるSteinbergやフリーソフトKarabinerのプロパティリストファイルがありました。知らぬ間に放り込まれているので監視が必要ですね。ここに名を連ねるアプリは曲者という印象です。

ちなみにplistファイルは基本的にはXcodeで編集可能なはずですが、RunAtLoadの設定をNOにすることはできませんでした。ファイルの権限を変えても不可でした。どうやらファイルごと消去するしかないようです。

次回以降でlaunchdを使った定期実行を試してみます。

2021/11/20追記:plistファイルを編集するには権限だけでなくchownコマンドでファイルの所有者を変更する必要があります。Macにrootでログインしてコマンド実行します。

[macOS] 31 crontabの設定

[macOS Big Sur 11.6.1]

M1 Mac miniでcrontab(定時実行のスケジュール管理ツール)の設定に手間取ったのでメモ書き。Intel Mac miniの時も設定したはずですが、すっかり忘れていました。

crontabのログは/var/mail/[ユーザー名]に記録されています。

今回そこには”Operation not permitted”と記されていました。

その場合はシステム環境設定 “セキュリティとプライバシー”のフルディスクアクセスをcronに許可します。cronファイルは/usr/sbin/cronにあります。