20191009のMacに関する記事は7件です。

AVFoundationを使った動画編集(再生速度を変える)

AVFoundationを使った動画編集(簡単なフェード処理)の続きで、映像の再生速度を変更して早送りにしたりスローモーションにしたりしてみます。

出力用のCompositionとTrackの準備

let srcAsset = AVURLAsset(url: url1)

let composition = AVMutableComposition()

// 出力用VideoTrackを作る
guard
    let videoTrack = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid) else {
    debugPrint("Failed to add video tracks")
    return
}

CompositionとTrackの準備については、前回の内容と同じです。

再生速度を指定して映像を追加するメソッドを作る

private func copyVideoTrack(of asset: AVAsset,
                            start: TimeInterval,
                            end: TimeInterval,
                            to track: AVMutableCompositionTrack,
                            duration: TimeInterval,
                            at: TimeInterval) throws {
    let srcVideoTrack = asset.tracks(withMediaType: .video)[0]
    let timeScale = srcVideoTrack.naturalTimeScale

    // 元の映像の切り出す範囲
    let srcTimeRange = CMTimeRange(start: CMTime(seconds: start, preferredTimescale: timeScale), end: CMTime(seconds: end, preferredTimescale: timeScale))

    // 出力先トラックでの挿入位置(再生開始時刻)
    let insertAt = CMTime(seconds: at, preferredTimescale: timeScale)

    // 一旦そのままの長さで挿入する
    try track.insertTimeRange(srcTimeRange, of: srcVideoTrack, at: insertAt)

    // 再生時間(再生速度)を変更する
    track.scaleTimeRange(CMTimeRange(start: insertAt, duration: srcTimeRange.duration), toDuration: CMTime(seconds: duration, preferredTimescale: timeScale))
}

元の映像から、出力用の映像トラックに映像を貼り付けるメソッドを用意します。

元映像の再生速度と貼り付け先の再生速度が変わる関係で若干ややこしいので細かくみていきます。

let srcTimeRange = CMTimeRange(start: CMTime(seconds: start, preferredTimescale: timeScale), end: CMTime(seconds: end, preferredTimescale: timeScale))

まず、元の映像から切り出す範囲を決定します。startendという二つの引数で開始時刻、終了時刻を秒で指定します。timescaleは元映像のtimescaleで統一します。

let insertAt = CMTime(seconds: at, preferredTimescale: timeScale)

次に、出力先トラックの挿入位置を決定します。

try track.insertTimeRange(srcTimeRange, of: srcVideoTrack, at: insertAt)

切り出す範囲と挿入位置が決まったら、一度元のスケール(再生速度)のままトラックに映像を挿入します。

track.scaleTimeRange(CMTimeRange(start: insertAt, duration: srcTimeRange.duration), toDuration: CMTime(seconds: duration, preferredTimescale: timeScale))

その後、scaleTimeRangeメソッドを使って挿入した箇所のスケール(再生速度)を変更します。

最初の引数(CMTimeRange(start: insertAt, duration: srcTimeRange.duration))は、出力用トラックにおける再生範囲です。元映像における再生範囲ではないので注意しましょう。ここでは映像を挿入した位置(insertAt)から元映像における切り出し範囲の長さ(srcTimeRange.duration)分を再生速度変更の対象として指定します。

次の引数(toDuration: CMTime(seconds: duration, preferredTimescale: timeScale))では、対象となる範囲を何秒に圧縮/引き延ばすかを指定します。ここでは、durationという引数で指定した秒数になるように指定しています。もし元映像から再生速度の倍率で指定したい場合はCMTimeMultiplyByFloat64(_:multiplier:)などを使って、元の映像の長さから計算しても良いと思います。

Trackに映像を切り貼りしていく

// それぞれのトラックから最初の5秒を取り出す
do {
    try copyVideoTrack(of: srcAsset, start: 0.0, end: 1.0, to: videoTrack, duration: 1, at: 0.0)
    try copyVideoTrack(of: srcAsset, start: 1.0, end: 14.0, to: videoTrack, duration: 1.0, at: 1.0)
    try copyVideoTrack(of: srcAsset, start: 14.0, end: 15.0, to: videoTrack, duration: 1.0, at: 2.0)
} catch let error {
    debugPrint(error)
    return
}

上で用意したメソッドを使って、元映像から出力用トラックに映像を切り貼りしていきます。上のコードでは、

  1. 元映像の最初の1秒を等倍速で貼り付け
  2. 元映像の1秒〜14秒までの13秒間を1秒間に圧縮して貼り付け
  3. 元映像の14秒〜15秒までの1秒間を等倍速で貼り付け

という形で、再生速度を変えながら元映像の15秒分を3秒に圧縮して追加しています。

Instructionの設定とプレビュー

// 出力用のビデオトラックに対するlayerInstruction(今回は何もしない)
let layerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: videoTrack)

// VideoCompositionに対するinstruction
let instruction = AVMutableVideoCompositionInstruction()
instruction.layerInstructions = [layerInstruction]

// instructionはビデオトラック全体に適用されるようにする
instruction.timeRange = videoTrack.timeRange

// VideoComposition
let videoComposition = AVMutableVideoComposition()
videoComposition.frameDuration = CMTime(value: 1, timescale: 30)
videoComposition.renderSize = videoTrack.naturalSize
videoComposition.instructions = [instruction]

let playerItem = AVPlayerItem(asset: composition)
playerItem.videoComposition = videoComposition

let player = AVPlayer(playerItem: playerItem)
playerView.player = player

InstructionやAVPlayerを使ったプレビューについては、AVFoundationを使った動画編集(簡単なフェード処理)と同じなので説明を省略します。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Catalinaにアップデート後のhomebrewの挙動(2019/10/09現在)

とうとうやってきました!Catalina!早速アップデートしたので開発環境も更新していきます!
先に注意事項ですが今回のアップデートで最後まで終了するのに 5時間 程度要しました.wifi環境や各ローカル環境によってかかる時間は変わると思いますが,様子を見ながら時間に余裕がある時にアップデートする事をオススメします.

環境

  • macOS Catalina 10.15

動作確認

とりあえずhomebrewが動作するか確認してみます.

terminal
-> % brew -v
Homebrew 2.1.10
Homebrew/homebrew-core (git revision 78520; last commit 2019-09-28)
Homebrew/homebrew-cask (git revision 1ca38; last commit 2019-09-28)

前回しっかり整えておいたからなのか,今回は動くようですね!

brew upgrade

では今までに入れてきたパッケージをアップデートしてみましょう!
ここでは今までに入れてきたパッケージが多いほど時間がかかる可能性があるので,時間がある時にやることをお勧めします.

-> % brew upgrade
Updating Homebrew...
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.

ちょっとした余興ですが,cmakeのアップデートを覗いてみます.

==> Upgrading cmake
==> Downloading https://homebrew.bintray.com/bottles/cmake-3.15.4.catalina.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/46/46d8b2170e1bc872f5d4548a730bd7829347189aa8c50843343ff2f0e4e356e4?__gda__=exp=1570593359~hmac=d2e0dee5a3c0c1
######################################################################## 100.0%
==> Pouring cmake-3.15.4.catalina.bottle.tar.gz
==> Caveats
Emacs Lisp files have been installed to:
  /usr/local/share/emacs/site-lisp/cmake
==> Summary
?  /usr/local/Cellar/cmake/3.15.4: 5,800 files, 53.4MB
Removing: /usr/local/Cellar/cmake/3.15.3... (5,800 files, 53.2MB)
Removing: /Users/user_name/Library/Caches/Homebrew/cmake--3.15.3.mojave.bottle.tar.gz... (14.9MB)
Removing: /usr/local/Cellar/shared-mime-info/1.13.1... (85 files, 4.7MB)
Removing: /Users/user_name/Library/Caches/Homebrew/shared-mime-info--1.13.1.mojave.bottle.tar.gz... (1.2MB)
Removing: /usr/local/Cellar/glib/2.62.0_1... (430 files, 15.3MB)
Removing: /Users/user_name/Library/Caches/Homebrew/glib--2.62.0.mojave.bottle.tar.gz... (4.5MB)
Removing: /Users/user_name/Library/Caches/Homebrew/glib--2.62.0_1.mojave.bottle.tar.gz... (4.5MB)

これを見るとMojave用のパッケージがRemoveされCatalina用のパッケージがダウンロードされていることが分かりますね!!

brew doctor

ではアップデーグレードが終わったら,状況確認してみましょう.

-> % brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: You have unlinked kegs in your Cellar.
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  docker

Warning: Your Xcode (11.0) is outdated.
Please update to Xcode 11.1 (or delete it).
Xcode can be updated from the App Store.

Xcodeをアップデートしろと言われました(^_^;)
XcodeのアップデートはApp Storeでできます.

私はここが一番時間がかかりました...
2度もアップデート失敗したので一度削除して再インストールを試みました...軽く3時間は超えたと思います...

めちゃくちゃ時間かかったのでその間に他のwarningの解消をやってしまいます.
こちらはリンク切れのようなのでlinkを走らせて現状を確認します.

-> % brew link docker
Linking /usr/local/Cellar/docker/19.03.3...
Error: Could not symlink bin/docker
Target /usr/local/bin/docker
already exists. You may want to remove it:
  rm '/usr/local/bin/docker'

To force the link and overwrite all conflicting files:
  brew link --overwrite docker

To list all files that would be deleted:
  brew link --overwrite --dry-run docker

この状態で一度brew doctorを走らせてみます.

-> % brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: Git could not be found in your PATH.
Homebrew uses Git for several internal functions, and some formulae use Git
checkouts instead of stable tarballs. You may want to install Git:
  brew install git

Warning: No developer tools installed.
Install the Command Line Tools:
  xcode-select --install


Warning: You have unlinked kegs in your Cellar.
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  docker
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

毎度お馴染みxcode-select --installが出ましたね!解決順が前後じますが先にこちらを解決します.
これはおそらくある程度Xcodeのアップデートまたはインストールが正常に進んでないと出ないと思います.
なので時間のある方はXcodeのアップグレード → xcode-select --install → そのほかのwarning解消の順にするとスムーズに進むと思います.

-> % xcode-select --install
xcode-select: note: install requested for command line developer tools
-> % brew doctor
Error: You have not agreed to the Xcode license. Please resolve this by running:
  sudo xcodebuild -license accept

このエラーは初めて出ましたが,ライセンス云々書いてあって最後にsudo xcodebuild -license acceptを実行しろとあります.
このコマンドを実行するとパスワードが要求されるので入力して再度状態を確認します.

-> % sudo xcodebuild -license accept
Password:

-> % brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: You have unlinked kegs in your Cellar.
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  docker

はい!
では解決し切れていない残りのwarningを片付けます.

-> % brew link docker
Linking /usr/local/Cellar/docker/19.03.3...
Error: Could not symlink bin/docker
Target /usr/local/bin/docker
already exists. You may want to remove it:
  rm '/usr/local/bin/docker'

To force the link and overwrite all conflicting files:
  brew link --overwrite docker

To list all files that would be deleted:
  brew link --overwrite --dry-run docker

-> % brew link --overwrite docker
Linking /usr/local/Cellar/docker/19.03.3... 10 symlinks created

-> % brew doctor
Your system is ready to brew.

はい!一通り全て解決しました!
今までで1番の長丁場になってしまいました.ですが新機能も追加された事ですし,満喫していきましょう!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS WorkSpacesでmacからのキーボード操作ができない

突然リーダーから「ちょっと本番環境見てくれや〜」って言われて、
いつも通りWorkSpacesにログインしたもののキーボードが反応せず大変困ったので備忘録を。

環境

MacBook Pro (Retina, 15-inch, Mid 2015)
macOS Catalina バージョン 10.15 Beta
Amazon WorkSpaces Version 2.5.9.1186

これのおかげ

06.png

https://forums.aws.amazon.com/thread.jspa?threadID=278583

対処法

システム環境設定からセキュリティとプライバシーを選択
01.png

アクセシビリティ > プライバシーを選択
02.png

Amazon WorkSpacesを一度削除
03.png

Amazon WorkSpacesを追加
04.png
05.png

WorkSpaceを起動してログイン。
キーボードで入力できるようになっていた!!

突然キーボードが反応しなくなるのは辛い
同僚のPCから確認し、なんとか依頼は完了させました。

参考

https://forums.aws.amazon.com/thread.jspa?threadID=278583

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacからRaspberryPiへVNC

RaspberryPi標準のRealVNCを使用してMacからアクセスするにはMacへ以下のRealVNCのViewerをインストールする。
https://www.realvnc.com/en/connect/download/viewer/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macをCatalinaにしたら、XcodeのArchiveが出来なくなった

タイトルの通りだが、
macをCatalinaにしたら、Xcodeの既存プロジェクトでアーカイブが出来なくなった。

正確には、
アーカイブはできるのだが、iOS Appsとして認識されなくなった・・・
どうやっても、Other Itemsというとこに入って、AdHocが作れない、審査にも上げれない・・・
(まぁ、手作業でipaファイルを作ってしまう方法もあるけど、ここでは割愛。

Stack Overflowとか、他の方の記事で
Buuild SettingsSkip InstallYesにするとイイぜ!って書いてたので試してみたけど失敗・・・

これはヤバいと思っていろいろ試してたら、ちゃんとアーカイブしてiOS Appsになっているプロジェクトもあるのを発見。
成功と失敗の二つのプロジェクトの設定を比べて見ていたら、犯人は・・・

Buuild SettingsInfo.plist Fileだった・・・

Info.plistのパスを指定する項目だけど、そこが{$SRC_ROOT}を含んだ絶対パスにしてた事が原因でした・・・
{$SRC_ROOT}を削除して相対パスに変更して、アーカイブで無事に解決!!!

かなり焦ってハマったので、備忘録として・・・
(Appleさん、仕様を変えるならその前にワーニングとか出して教えてよ・・・orz
(自分が知らんかっただけだろうけど・・・

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

xcodeの容量サイズがおかしい件

macをupgradeする際、容量が足りないと言われたので、xcodeを一旦、外部に移動させることにしました。

ただ、ここで、exfatでフォーマットしたHDD上にxcode.appをコピーすると、容量はmacのファイルシステム上と比較し、10倍に膨れ上がります。14GB -> 149GB

これに気づかずにハマりました。注意してください。

xcode_exfat.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macのスクリーンショットの容量が気になる方へ

はじめに

スクリーンショットを撮影する機会は多々あると思いますが、その容量が1~2MBあったのを改善したいと考えていました。

デフォルトでは、png形式で保存されるようになっており、それが原因のようです。

対応後は、1~2MB→200KB以内に改善されました!

jpgに変更する

スクリーンショットのタイプをjpgに変更する。

defaults write com.apple.screencapture type jpg

SystemUIServerを再起動

killall SystemUIServer

これで、jpgで保存されるようになりました。

おわりに

1~2MBあったものが、200KB以内には収めることができました:upside_down:

おまけ

スクリーンショットを撮影すると、
「スクリーンショット 2019-10-09 8.19.27.jpg」というファイル名で保存されると思いますが、
このファイル名も変更することができます。

ファイル名変更

defaults write com.apple.screencapture name "ここに任意のテキスト"

SystemUIServerを再起動する

killall SystemUIServer

日付などの情報も変更できます。気になる方は以下を参考にしてみてください。
Macのスクリーンショットの保存先と名前を変更する

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む