- 投稿日:2019-10-09T22:42:23+09:00
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))まず、元の映像から切り出す範囲を決定します。
start
とend
という二つの引数で開始時刻、終了時刻を秒で指定します。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秒〜14秒までの13秒間を1秒間に圧縮して貼り付け
- 元映像の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 = playerInstructionやAVPlayerを使ったプレビューについては、AVFoundationを使った動画編集(簡単なフェード処理)と同じなので説明を省略します。
- 投稿日:2019-10-09T20:16:17+09:00
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番の長丁場になってしまいました.ですが新機能も追加された事ですし,満喫していきましょう!!
- 投稿日:2019-10-09T15:49:50+09:00
AWS WorkSpacesでmacからのキーボード操作ができない
突然リーダーから「ちょっと本番環境見てくれや〜」って言われて、
いつも通りWorkSpacesにログインしたもののキーボードが反応せず大変困ったので備忘録を。環境
MacBook Pro (Retina, 15-inch, Mid 2015)
macOS Catalina バージョン 10.15 Beta
Amazon WorkSpaces Version 2.5.9.1186これのおかげ
https://forums.aws.amazon.com/thread.jspa?threadID=278583
対処法
WorkSpaceを起動してログイン。
キーボードで入力できるようになっていた!!突然キーボードが反応しなくなるのは辛い
同僚のPCから確認し、なんとか依頼は完了させました。参考
- 投稿日:2019-10-09T13:10:00+09:00
MacからRaspberryPiへVNC
RaspberryPi標準のRealVNCを使用してMacからアクセスするにはMacへ以下のRealVNCのViewerをインストールする。
https://www.realvnc.com/en/connect/download/viewer/
- 投稿日:2019-10-09T12:17:25+09:00
macをCatalinaにしたら、XcodeのArchiveが出来なくなった
タイトルの通りだが、
macをCatalinaにしたら、Xcodeの既存プロジェクトでアーカイブが出来なくなった。正確には、
アーカイブはできるのだが、iOS Apps
として認識されなくなった・・・
どうやっても、Other Items
というとこに入って、AdHocが作れない、審査にも上げれない・・・
(まぁ、手作業でipaファイルを作ってしまう方法もあるけど、ここでは割愛。Stack Overflowとか、他の方の記事で
Buuild Settings
のSkip Install
をYes
にするとイイぜ!って書いてたので試してみたけど失敗・・・これはヤバいと思っていろいろ試してたら、ちゃんとアーカイブして
iOS Apps
になっているプロジェクトもあるのを発見。
成功と失敗の二つのプロジェクトの設定を比べて見ていたら、犯人は・・・
Buuild Settings
のInfo.plist File
だった・・・Info.plistのパスを指定する項目だけど、そこが
{$SRC_ROOT}
を含んだ絶対パスにしてた事が原因でした・・・
{$SRC_ROOT}
を削除して相対パスに変更して、アーカイブで無事に解決!!!かなり焦ってハマったので、備忘録として・・・
(Appleさん、仕様を変えるならその前にワーニングとか出して教えてよ・・・orz
(自分が知らんかっただけだろうけど・・・
- 投稿日:2019-10-09T12:07:10+09:00
xcodeの容量サイズがおかしい件
macをupgradeする際、容量が足りないと言われたので、xcodeを一旦、外部に移動させることにしました。
ただ、ここで、
exfat
でフォーマットしたHDD上にxcode.appをコピーすると、容量はmacのファイルシステム上と比較し、10倍に膨れ上がります。14GB -> 149GB
これに気づかずにハマりました。注意してください。
- 投稿日:2019-10-09T11:46:22+09:00
Macのスクリーンショットの容量が気になる方へ
はじめに
スクリーンショットを撮影する機会は多々あると思いますが、その容量が1~2MBあったのを改善したいと考えていました。
デフォルトでは、png形式で保存されるようになっており、それが原因のようです。
対応後は、1~2MB→200KB以内に改善されました!
jpgに変更する
スクリーンショットのタイプをjpgに変更する。
defaults write com.apple.screencapture type jpgSystemUIServerを再起動
killall SystemUIServerこれで、jpgで保存されるようになりました。
おわりに
1~2MBあったものが、200KB以内には収めることができました
おまけ
スクリーンショットを撮影すると、
「スクリーンショット 2019-10-09 8.19.27.jpg」というファイル名で保存されると思いますが、
このファイル名も変更することができます。ファイル名変更
defaults write com.apple.screencapture name "ここに任意のテキスト"SystemUIServerを再起動する
killall SystemUIServer日付などの情報も変更できます。気になる方は以下を参考にしてみてください。
Macのスクリーンショットの保存先と名前を変更する