Media Movie

[Bash]DaVinciResolve再インストール・アップデート時のクリーナー


サンプルコード

サンプルソース(参考)
行番号ソース
001#!/bin/bash
002#com.cocolog-nifty.quicktimer.icefloe
003# DaVinciResolve 再インストール時のクリーナー
004#################################################
005###管理者インストールしているか?チェック
006USER_WHOAMI=$(/usr/bin/whoami)
007/bin/echo "実行ユーザー(whoami): $USER_WHOAMI"
008if [ "$USER_WHOAMI" != "root" ]; then
009  /bin/echo "このスクリプトを実行するには管理者権限が必要です。"
010  /bin/echo "sudo で実行してください"
011  ### path to me
012  SCRIPT_PATH="${BASH_SOURCE[0]}"
013  /bin/echo "/usr/bin/sudo \"$SCRIPT_PATH\""
014  /bin/echo "↑を実行してください"
015  ###実行しているユーザー名
016  CONSOLE_USER=$(/bin/echo "show State:/Users/ConsoleUser" | /usr/sbin/scutil | /usr/bin/awk '/Name :/ { print $3 }')
017  /bin/echo "コンソールユーザー(scutil): $CONSOLE_USER"
018  exit 1
019else
020  ###実行しているユーザー名
021  CONSOLE_USER=$(/bin/echo "show State:/Users/ConsoleUser" | /usr/sbin/scutil | /usr/bin/awk '/Name :/ { print $3 }')
022  /bin/echo "コンソールユーザー(scutil): $CONSOLE_USER"
023  ###実行しているユーザー名
024  HOME_USER=$(/bin/echo "$HOME" | /usr/bin/awk -F'/' '{print $NF}')
025  /bin/echo "実行ユーザー(HOME): $HOME_USER"
026  ###logname
027  LOGIN_NAME=$(/usr/bin/logname)
028  /bin/echo "ログイン名(logname): $LOGIN_NAME"
029  ###UID
030  USER_NAME=$(/usr/bin/id -un)
031  /bin/echo "ユーザー名(id): $USER_NAME"
032  ###STAT
033  STAT_USR=$(/usr/bin/stat -f%Su /dev/console)
034  /bin/echo "STAT_USR(console): $STAT_USR"
035fi
036
037#################################################
038###
039function DO_MOVE_TO_TRASH_C() {
040    STR_TMP_DIR=$(/usr/bin/dirname "$(/usr/bin/dirname "$(/usr/bin/sudo -u "$STAT_USR" /usr/bin/mktemp -d)")")
041    STR_TMP_DIR_C="${STR_TMP_DIR}/C/$1"
042    /bin/echo "$STR_TMP_DIR_C"
043  if [ -e "$STR_TMP_DIR_C" ]; then
044    TRASH_DIR=$(/usr/bin/sudo -u "$STAT_USR" /usr/bin/mktemp -d "/Users/${STAT_USR}/.Trash/XXXXXXXX")
045    /usr/bin/sudo -u "$STAT_USR" /bin/chmod 777 "$TRASH_DIR"
046    /bin/mv "$STR_TMP_DIR_C" "$TRASH_DIR"
047  else
048    /bin/echo "$STR_TMP_DIR_C""は見つかりませんでした"
049  fi
050}
051DO_MOVE_TO_TRASH_C "com.blackmagic-design.DaVinciResolve"
052DO_MOVE_TO_TRASH_C "com.blackmagic-design.UninstallDaVinciResolve"
053
054#################################################
055###
056function DO_MOVE_TO_TRASH() {
057  if [ -e "$1" ]; then
058    TRASH_DIR=$(/usr/bin/sudo -u "$STAT_USR" /usr/bin/mktemp -d "/Users/${STAT_USR}/.Trash/XXXXXXXX")
059    /usr/bin/sudo -u "$STAT_USR" /bin/chmod 777 "$TRASH_DIR"
060    /bin/mv "$1" "$TRASH_DIR"
061  else
062    /bin/echo "$1""は見つかりませんでした"
063  fi
064}
065
066DO_MOVE_TO_TRASH "/Applications/Blackmagic Proxy Generator Lite.app"
067DO_MOVE_TO_TRASH "/Applications/Blackmagic RAW"
068DO_MOVE_TO_TRASH "/Applications/DaVinci Resolve"
069DO_MOVE_TO_TRASH "/Library/Application Support/Blackmagic Design"
070DO_MOVE_TO_TRASH "/Library/Frameworks/DaVinciPanelAPI.framework"
071DO_MOVE_TO_TRASH "/Library/Frameworks/FairlightPanelAPI.framework"
072DO_MOVE_TO_TRASH "/Library/Extensions/CrystalDriver.kext"
073DO_MOVE_TO_TRASH "/Library/Extensions/CrystalDriver.kext"
074#この2つは好みの問題で外した方がいい人もいる
075DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Movies/.gallery"
076DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Movies/CacheClip"
077
078exit 0
AppleScriptで生成しました

|

【カーネル機能拡張】CrystalDriver.kext

/Library/Extensions/CrystalDriver.kext
Blackmagic Design製
カーネル機能拡張
Blackmagic DaVinci Resolveをインストールすると同時にインストールされる
バンドルIDは
com.blackmagic-design.driver.Crystal
バンドル名は
CrystalDriver

2024年時点で
InfoDictionary versionは6.0
DaVinci Resolveを使っていないならアンインストールも可
DMG同封のUninstall Resolve.appでは削除されないので
基本手動でアンインストール

|

Shutter Encoderからffmpegの取り出し

ダウンロード - mov2mp4arm.zip


#!/bin/bash
#com.cocolog-nifty.quicktimer.icefloe
#ユーザードメインの $HOME/binにインストールする
########################################
### 設定項目
STR_URL="https://www.shutterencoder.com/Shutter%20Encoder%2017.9%20Apple%20Silicon.pkg"

########################################
###管理者インストールしているか?チェック
USER_WHOAMI=$(/usr/bin/whoami)
/bin/echo "実行ユーザーは:$USER_WHOAMI"
###実行しているユーザー名
CONSOLE_USER=$(/bin/echo "show State:/Users/ConsoleUser" | /usr/sbin/scutil | /usr/bin/awk '/Name :/ { print $3 }')
/bin/echo "コンソールユーザー:$CONSOLE_USER"
###ログイン名ユーザー名※Visual Studio Codeの出力パネルではrootになる設定がある
LOGIN_NAME=$(/usr/bin/logname)
/bin/echo "ログイン名:$LOGIN_NAME"
###UID
USER_NAME=$(/usr/bin/id -un)
/bin/echo "ユーザー名:$USER_NAME"
###SUDOUSER
/bin/echo "SUDO_USER: $SUDO_USER"
########################################
##OS
PLIST_PATH="/System/Library/CoreServices/SystemVersion.plist"
STR_OS_VER=$(/usr/bin/defaults read "$PLIST_PATH" ProductVersion)
/bin/echo "OS VERSION :" "$STR_OS_VER"
STR_MAJOR_VERSION="${STR_OS_VER%%.*}"
/bin/echo "STR_MAJOR_VERSION :" "$STR_MAJOR_VERSION"
STR_MINOR_VERSION="${STR_OS_VER#*.}"
/bin/echo "STR_MINOR_VERSION :" "$STR_MINOR_VERSION"

############################################################
###旧バージョンをゴミ箱に
/bin/mkdir -p "/Users/$CONSOLE_USER/bin/"
# binは不可視にする
/usr/bin/chflags hidden "/Users/$CONSOLE_USER/bin"
/usr/bin/SetFile -a V "/Users/$CONSOLE_USER/bin"
#
USER_TRASH_DIR=$(/usr/bin/mktemp -d "$HOME/.Trash/FFMPEG.XXXXXXXX")
/bin/mkdir -p "/Users/$CONSOLE_USER/bin/ffmpeg.arm"
/bin/mv "/Users/$CONSOLE_USER/bin/ffmpeg.arm" "$USER_TRASH_DIR"

###ダウンロードSTR_URL
USER_TEMP_DIR=$(/usr/bin/mktemp -d)
/bin/echo "起動時に削除されるディレクトリ:" "$USER_TEMP_DIR"
if ! /usr/bin/curl -L -o "$USER_TEMP_DIR/install.pkg" "$STR_URL" --connect-timeout 20; then
/bin/echo "ファイルのダウンロードに失敗しました HTTP1.1で再トライします"
  if ! /usr/bin/curl -L -o "$USER_TEMP_DIR/install.pkg" "$STR_URL" --http1.1 --connect-timeout 20; then
/bin/echo "ファイルのダウンロードに失敗しました"
exit 1
  fi
fi
###########################
/usr/sbin/pkgutil --expand "$USER_TEMP_DIR/install.pkg" "$USER_TEMP_DIR/Expand"

###########################
/usr/bin/ditto -xz  "$USER_TEMP_DIR/Expand/com.paulpacifico.shutterencoder.pkg/Payload" "$USER_TEMP_DIR/Extract"
 
###########################
/usr/bin/ditto "$USER_TEMP_DIR/Extract/Shutter Encoder.app/Contents/Resources/Library" "/Users/$CONSOLE_USER/bin/ffmpeg.arm"

exit 0

|

[bluray]VLCのブルーレイ再生ライブラリのインストール(3.0.20対応)


【スクリプトエディタで開く】|

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
##自分環境がos12なので2.8にしているだけです
use AppleScript version "2.8"
use framework "Foundation"
use scripting additions
property refMe : a reference to current application

####ARM版では動作しないので留意 VLC インテル版
###set strUrlVlcArm to "https://vlc.letterboxdelivery.org/vlc/3.0.17.3/macosx/vlc-3.0.17.3-arm64.dmg"
##set strUrlVlcIntel to "https://vlc.letterboxdelivery.org/vlc/3.0.17.3/macosx/vlc-3.0.17.3-intel64.dmg"
set strUrlVlcIntel to "https://free.nchc.org.tw/vlc/vlc/3.0.20/macosx/vlc-3.0.20-intel64.dmg"
###AACライブラリ
set strUrlLibaacs to "https://vlc-bluray.whoknowsmy.name/files/mac/libaacs.dylib"
##キーDB
set strUrlKeydb to "http://fvonline-db.bplaced.net/export/keydb_jpn.zip"


#########################################
###ユーザーアプリケーションフォルダを作る
set appFileManager to refMe's NSFileManager's defaultManager()
set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSApplicationDirectory) inDomains:(refMe's NSUserDomainMask))
set ocidApplicationDirPathURL to ocidURLsArray's firstObject()
set ocidAppDirPathURL to ocidApplicationDirPathURL's URLByAppendingPathComponent:("Movies/VLC_intel")
set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
# 777-->511 755-->493 700-->448 766-->502
ocidAttrDict's setValue:(448) forKey:(refMe's NSFilePosixPermissions)
set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidAppDirPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error|:(reference)
if (item 1 of listBoolMakeDir) is false then
log "フォルダ作成でエラーしました"
return "フォルダ作成でエラーしました"
end if
#########################################
###ユーザーaacs Cachesフォルダを作る
set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSCachesDirectory) inDomains:(refMe's NSUserDomainMask))
set ocidCachesDirPathURL to ocidURLsArray's firstObject()
set ocidAacsCachesPathURL to ocidCachesDirPathURL's URLByAppendingPathComponent:"aacs"
set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
# 777-->511 755-->493 700-->448 766-->502
ocidAttrDict's setValue:(511) forKey:(refMe's NSFilePosixPermissions)
set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidAacsCachesPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error|:(reference)
if (item 1 of listBoolMakeDir) is false then
log "フォルダ作成でエラーしました"
return "フォルダ作成でエラーしました"
end if
#########################################
###ユーザーbluray Cachesフォルダを作る
set ocidBlurayCachesPathURL to ocidCachesDirPathURL's URLByAppendingPathComponent:"bluray"
set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
# 777-->511 755-->493 700-->448 766-->502
ocidAttrDict's setValue:(511) forKey:(refMe's NSFilePosixPermissions)
set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidBlurayCachesPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error|:(reference)
if (item 1 of listBoolMakeDir) is false then
log "フォルダ作成でエラーしました"
return "フォルダ作成でエラーしました"
end if
#########################################
###初期設定フォルダを作る
set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSLibraryDirectory) inDomains:(refMe's NSUserDomainMask))
set ocidLibraryDirPathURL to ocidURLsArray's firstObject()
set ocidPreferencesDirPathURL to ocidLibraryDirPathURL's URLByAppendingPathComponent:("Preferences/aacs")
set strPreferencesDirPath to ocidPreferencesDirPathURL's |path| as text
set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
# 777-->511 755-->493 700-->448 766-->502
ocidAttrDict's setValue:(448) forKey:(refMe's NSFilePosixPermissions)
set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidPreferencesDirPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error|:(reference)
if (item 1 of listBoolMakeDir) is false then
log "フォルダ作成でエラーしました"
return "フォルダ作成でエラーしました"
end if
#########################################
####ダウンロードフォルダ
set ocidTempDirURL to appFileManager's temporaryDirectory()
set ocidUUID to refMe's NSUUID's alloc()'s init()
set ocidUUIDString to ocidUUID's UUIDString
set ocidSaveDirPathURL to ocidTempDirURL's URLByAppendingPathComponent:(ocidUUIDString) isDirectory:true
set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
# 777-->511 755-->493 700-->448 766-->502
ocidAttrDict's setValue:(511) forKey:(refMe's NSFilePosixPermissions)
set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error|:(reference)
if (item 1 of listBoolMakeDir) is false then
log "フォルダ作成でエラーしました"
return "フォルダ作成でエラーしました"
end if
set strSaveDir to ocidSaveDirPathURL's |path| as text
#########################################
###vlcファイルのダウンロード
set objSysInfo to system info
set strCpuType to (CPU type of objSysInfo) as text
set strVlcSaveFilePath to (strSaveDir & "/vlc.dmg") as text
if strCpuType contains "Intel" then
  set strCommandText to "/usr/bin/curl -k \"" & strUrlVlcIntel & "\" -o \"" & strVlcSaveFilePath & "\" --connect-timeout 120" as text
else
  set strCommandText to "/usr/bin/curl -l \"" & strUrlVlcIntel & "\" -o \"" & strVlcSaveFilePath & "\" --connect-timeout 120" as text
end if
###コマンド実行
log "VLCダウンロード開始"
do shell script strCommandText
log "VLCダウンロード終了"

#########################################
###libaacs.dylibファイルのダウンロード
set strAacsSaveFilePath to (strSaveDir & "/libaacs.dylib.bin") as text
set strCommandText to "/usr/bin/curl -k \"" & strUrlLibaacs & "\" -o \"" & strAacsSaveFilePath & "\" --connect-timeout 120" as text
###コマンド実行
log "libaacs.dylibダウンロード開始"
do shell script strCommandText
log "libaacs.dylibダウンロード終了"

#########################################
###keydb_jpnファイルのダウンロード
set strKeySaveFilePath to (strSaveDir & "/keydb_jpn.zip") as text
set strCommandText to "/usr/bin/curl -k \"" & strUrlKeydb & "\" -o \"" & strKeySaveFilePath & "\" --connect-timeout 480" as text
###コマンド実行
log "keydb_jpn.zipダウンロード開始"
try
do shell script strCommandText
on error
  set strUrlKeydb to "https://force4u.cocolog-nifty.com/skywalker/files/keydb_jpn.zip"
  set strCommandText to "/usr/bin/curl -k \"" & strUrlKeydb & "\" -o \"" & strKeySaveFilePath & "\" --connect-timeout 480" as text
do shell script strCommandText
end try
log "keydb_jpn.zipダウンロード終了"


#########################################
###ユーザーアプリケーションフォルダにVLC.appがあればゴミ箱へ入れる
set ocidVclPathURL to ocidAppDirPathURL's URLByAppendingPathComponent:"VLC.app"
set strVclAppPath to ocidVclPathURL's |path| as text
##ゴミ箱に入れる
set boolGoToTrash to appFileManager's trashItemAtURL:(ocidVclPathURL) resultingItemURL:(ocidVclPathURL) |error|:(reference)
#########################################
###VLCをコピー
try
  set strCommandText to ("/usr/bin/hdiutil attach \"" & strVlcSaveFilePath & "\" -noverify -nobrowse -noautoopen\n") as text
do shell script strCommandText
on error
log "attachでエラーになりました"
return
end try
try
  set theComandText to ("/usr/bin/ditto \"/Volumes/VLC media player/VLC.app\" \"" & strVclAppPath & "\"") as text
do shell script theComandText
on error
log "dittoでエラーになりました"
return
end try
try
  set theComandText to ("/usr/bin/hdiutil detach \"Volumes/VLC media player\" -force") as text
do shell script theComandText
on error
log "detachでエラーになりました"
return
end try
#########################################
###libaacs.dylibを指定の場所にコピー
set ocidAacsSavePathURL to ocidVclPathURL's URLByAppendingPathComponent:"Contents/MacOS/lib/libaacs.dylib"
set strAacsSavePath to ocidAacsSavePathURL's |path| as text
try
  set theComandText to ("/usr/bin/ditto \"" & strAacsSaveFilePath & "\" \"" & strAacsSavePath & "\"") as text
do shell script theComandText
on error
log "libaacs.dylib dittoでエラーになりました"
return
end try
#########################################
### keydb.cfg まずは解凍してからコピー
try
  set theComandText to ("/usr/bin/unzip \"" & strKeySaveFilePath & "\" -d \"" & strSaveDir & "\"") as text
do shell script theComandText
on error
log "unzipでエラーになりました"
return
end try
set strUnzipPath to (strSaveDir & "/keydb.cfg") as text
try
  set theComandText to ("/usr/bin/ditto \"" & strUnzipPath & "\" \"" & strPreferencesDirPath & "/keydb.cfg\"") as text
  
do shell script theComandText
on error
log "keydb.cfg dittoでエラーになりました"
return
end try

#########################################
#アトリビュートをリセット
set theComandText to ("xattr -rc \"" & strVclAppPath & "\"") as text
do shell script theComandText
#########################################
#インストール先を表示
set ocidAppPathURL to ocidAppDirPathURL's URLByAppendingPathComponent:("VLC.app")
set ocidAppPath to ocidAppPathURL's |path|
set ocidContainerDirPath to ocidAppDirPathURL's |path|
set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
set boolDone to appSharedWorkspace's selectFile:(ocidAppPath) inFileViewerRootedAtPath:(ocidContainerDirPath)
set boolDone to appSharedWorkspace's openURL:(ocidAppPathURL)
if (boolDone as boolean) is false then
  #ファイルを開く
  set aliasSaveFilePath to (ocidAppDirPathURL's absoluteURL()) as alias
  tell application "Finder"
open file aliasSaveFilePath
  end tell
end if




|

mp4にチャプターを追加する

QuickTimeでのこの設定部分です
Screen_1_20240105163501

クイックルックでもチャプターは有効です
Screen_2_20240105163701



準備
1:解凍用7zzバイナリをインストール
2:ffmpegバイナリをインストール
3:DaVinci Resolveをインストール


作成
基本:FFMETADATA1
1:字幕を使ってチャプタを指定する
2:字幕データをTTMLで書き出す
3:TTMLから各種チャプター用データを作成する
3−1:Youtube用チャプター用データを作成する
3−2:FFMPEG用チャプター用データを作成する


準備
1:解凍用7zzバイナリをインストール
AppleScript
https://quicktimer.cocolog-nifty.com/icefloe/2024/01/post-01fee7.html
Bash
https://quicktimer.cocolog-nifty.com/icefloe/2023/11/post-c5ab17.html
2:ffmpegバイナリをインストール
AppleScript
https://quicktimer.cocolog-nifty.com/icefloe/2024/01/post-1ce12f.html
Bash
https://quicktimer.cocolog-nifty.com/icefloe/2023/12/post-c0e627.html
3:DaVinci Resolveをインストール
DaVinci Resolve公式サイトから
https://www.blackmagicdesign.com/support/family/davinci-resolve-and-fusion
Apple App Store
https://apps.apple.com/jp/app/davinci-resolve/id571213070?mt=12


作成
字幕トラックでチャプターの位置と内容を指定して
出来上がった字幕データをTTMLに書き出し
TTMLファイルをFFMETADATA1データに変換する方法で設定します

基本:FFMETADATA1
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-3f2621.html
1:字幕を使ってチャプタを指定する
https://quicktimer.cocolog-nifty.com/icefloe/2024/01/post-b3c054.html
2:字幕データをTTMLで書き出す
[DaVinci Resolve]字幕データをTTMLで書き出す
https://quicktimer.cocolog-nifty.com/icefloe/2023/09/post-e6d806.html
3:チャプター用データを作成する
3−1:Youtube用チャプター用データを作成する
[TTML]TTMLからYoutube用のチャプターテキストを作成する(修正版)
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-6042c5.html
3−2:FFMPEG用チャプター用データを作成する
TTMLからチャプター付与用のFFMETADATA1を作成する(Bash対応)
https://quicktimer.cocolog-nifty.com/icefloe/2023/09/post-e3a2ce.html

|

[DaVinci Resolve]字幕を使ってチャプタを指定する

字幕トラックを作成して Ffmetadata11
すでに字幕がある場合は チャプター用として別に字幕トラックを作成します (複数字幕を同じトラックではなく別の字幕トラックにするのがポイント) Ffmetadata12
チャプターは タイミングだけ指定しても機能としては動作します Ffmetadata13
チャプタ設定用のには スタートフレームとエンドフレーム番号が必要ですので
[CHAPTER]
TIMEBASE=1/16 
START=0   
END=480   
title=1:最初の30秒

このように設定するのが『ベター』です Ffmetadata14
詳しくは パネルで設定となります タイミングと内容が必要なだけですので フォントや位置指定等は配慮不要です
Ffmetadata15
字幕のON OFF 字幕は常に1つ選択ですので 書き出し時には『どの』字幕を書き出すのか?を意識する必要があります 3_20240105162701
4_20240105162701
5_20240105162701

|

[QuickTime]イメージシーケンス(複数画像)からムービーを作成する

ファイルメニューから読み込みます Screen2_20240108164101
一般的なGIFアニメでは 1秒間に16フレーム か 8フレームが多いが QuickTimeでは最低でも24/秒フレームなので どうしても動作が『速く』なるので Gifターゲットにする場合はフレーム数の計算が容易な25か50が個人的にはおすすめ Screen_1_20240108164101

|

[DaVinci Resolve]CrystalDriver.kext

[Extensions]CrystalDriver.kext
https://quicktimer.cocolog-nifty.com/icefloe/2022/07/post-2ffce3.html
OS再インストール時にメッセージが出たのでメモ
20231203-231124

機能拡張がブロックされました
"Blackmagic Design Inc"によって署名された新しい機能拡張を読み込もうとしました。これらの機能拡張はデベロッパによるアップデートが必要です。

/Library/Extensions/CrystalDriver.kext
これの事
システムレポートで読み込み可能になっていればOK
Screen_4

|

[DaVinci Resolve]字幕データをTTMLで書き出す

1_20240105162701

すでに字幕がある場合は
チャプター用として別に字幕トラックを作成します
(複数字幕を同じトラックではなく別の字幕トラックにするのがポイント)
2_20240105162701

字幕のON OFF 字幕は常に1つ選択
3_20240105162701


4_20240105162701


5_20240105162701

|

[AVAssetExportSession]ビデオ変換

ムービーファイルを変換します
OS12以降ならTSも書き出せます



#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
#
#
#
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
##自分環境がos12なので2.8にしているだけです
use AppleScript version "2.8"
use framework "Foundation"
use framework "AVFoundation"
use scripting additions

property refMe : a reference to current application
property refNSString : a reference to refMe's NSString
property refNSURL : a reference to refMe's NSURL
property refNSArray : a reference to refMe's NSArray
property refNSDate : a reference to refMe's NSDate
property refNSCalendar : a reference to refMe's NSCalendar
property refNSTimeZone : a reference to refMe's NSTimeZone
property refNSDateFormatter : a reference to refMe's NSDateFormatter
property refNSMutableDictionary : a reference to refMe's NSMutableDictionary

property refAVAsset : a reference to refMe's AVAsset
property refAVAssetExportSession : a reference to refMe's AVAssetExportSession
set objFileManager to refMe's NSFileManager's defaultManager()

###############################
#####ダイアログ
################################
tell application "Finder"
set aliasDefaultLocation to (path to desktop folder from user domain) as alias
end tell
####UTIリスト PDFのみ
set listUTI to {"public.movie"}

####ダイアログを出す
set listFilePath to (choose file with prompt "ムービーファイルを選んでください" default location (aliasDefaultLocation) of type listUTI with invisibles, showing package contents and multiple selections allowed) as list

###############################
#####出力メディアフォーマット関連
################################

set listChooseType to {"LowQuality", "MediumQuality", "HighestQuality", "HEVCHighestQuality", "HEVCHighestQualityWithAlpha", "640x480", "960x540", "1280x720", "1920x1080", "3840x2160", "HEVC1920x1080", "HEVC3840x2160", "HEVC1920x1080WithAlpha", "HEVC3840x2160WithAlpha", "HEVC7680x4320", "AppleM4V480pSD", "AppleM4V720pHD", "AppleM4V1080pHD", "AppleM4ViPod", "AppleM4VAppleTV", "AppleM4VCellular", "AppleM4VWiFi", "AppleProRes422LPCM", "AppleProRes4444LPCM", "Passthrough", "AppleM4A"} as list
try
set objResponse to (choose from list listChooseType with title "出力形式" with prompt "フォーマットを選んでください" default items (item 3 of listChooseType) OK button name "OK" cancel button name "キャンセル" with multiple selections allowed without empty selection allowed)
on error
log "エラーしました"
return
end try
if objResponse is false then
log "キャンセルしました"
return
end if
set objResponse to objResponse as text
set strPresetName to ("AVAssetExportPreset" & objResponse) as text
####出力形式番号にする
set ocidPresetArray to (refNSArray's arrayWithArray:listChooseType)
set numChooseListNo to (ocidPresetArray's indexOfObject:(objResponse as text)) as integer
set numChooseListNo to numChooseListNo + 1 as integer

###############################
#####書き出しに必要なテンポラリーの指定
################################

###書き出し途中の添付ファイルの書き出し先
set strTmpPath to ("/private/tmp/AVAssetExportSession") as text
set ocidTmpPath to (refNSString's stringWithString:strTmpPath)
set ocidFullTmpPath to ocidTmpPath's stringByStandardizingPath()
set ocidFullTmpPathURL to (refNSURL's alloc()'s initFileURLWithPath:ocidFullTmpPath isDirectory:true)
####TMPフォルダを作成
(objFileManager's createDirectoryAtURL:ocidFullTmpPathURL withIntermediateDirectories:true attributes:(missing value) |error|:(missing value))

###############################
#####本処理
################################

repeat with objFilePath in listFilePath

###############################
#####入力ファイル関連
################################
set aliasFilePath to objFilePath as alias
set strFilePath to POSIX path of aliasFilePath as text
####パステキスト
set ocidFilePath to (refNSString's stringWithString:strFilePath)
####コンテナディレクトリ
set ocidContainerPath to ocidFilePath's stringByDeletingLastPathComponent()
####ファイル名
set ocidFileName to ocidFilePath's lastPathComponent()
###ベースファイル名
set ocidBaseFileName to ocidFileName's stringByDeletingPathExtension()
###拡張子
set ocidFileExetension to ocidFileName's pathExtension()
####ドキュメントのパスをNSURL
set ocidFullPathURL to (refNSURL's fileURLWithPath:ocidFilePath)
####コンテナURL
set ocidContainerDirPathURL to ocidFullPathURL's URLByDeletingLastPathComponent()
###コンテナのエイリアス
set aliasContainerDirPath to ocidContainerDirPathURL as alias

###############################
#####出力ファイル関連
################################
###出力
set strDateNO to doGetDateNo("yyyyMMdd_hhmmss") as text
###ファイル名+日付時間+拡張子
if (objResponse as text) is "AppleM4A" then
set strExportFileName to ("" & ocidBaseFileName & "_" & strDateNO & ".m4a") as text
else
set strExportFileName to ("" & ocidBaseFileName & "_" & strDateNO & ".mov") as text
end if
####開いたファイルの同一階層
set strContainerDirPath to (POSIX path of aliasContainerDirPath) as text
###そこにファイル名
set strDistFilePath to (strContainerDirPath & strExportFileName) as text
###ストリングに
set ocidDistFilePath to (refNSString's stringWithString:strDistFilePath)
###NSURL
set ocidFullDistPathURL to (refNSURL's fileURLWithPath:ocidDistFilePath)


###############################
#####AV処理
################################

log "######AVAsset"
set ocidReadAsset to (refAVAsset's assetWithURL:ocidFullPathURL)
log className() of ocidReadAsset as text

set ocidReadAssetDuration to ocidReadAsset's duration()
log ocidReadAssetDuration
log "######AVAssetTrack"
set ocidReadAssetTrackArray to ocidReadAsset's tracks()
set numCntTrackNo to (count of ocidReadAssetTrackArray) as integer
log "トラック数は: " & numCntTrackNo
set numCntTrak to numCntTrackNo - 1
repeat numCntTrackNo times
log "--------"
set ocidTrack to (ocidReadAssetTrackArray's objectAtIndex:numCntTrak)
log className() of ocidTrack as text
set strTrackID to ocidTrack's trackID() as text
set strMediaType to ocidTrack's mediaType() as text
if strMediaType is "vide" then
log "MediaType: vide ビデオトラック:トラックID" & strTrackID
else if strMediaType is "soun" then
log "MediaType: soun サウンドトラック:トラックID" & strTrackID
else
log "MediaType: " & strMediaType
log "TrackID: " & strTrackID
end if
log (ocidTrack's formatDescriptions()'s objectAtIndex:0)
-->NSCFType
log ocidTrack's isPlayable()
log ocidTrack's isDecodable()
log ocidTrack's isEnabled()
log ocidTrack's isSelfContained()
log ocidTrack's totalSampleDataLength()
##log ocidTrack's hasMediaCharacteristic()
log "->"
set ocidAssetTrackTimeRange to ocidTrack's timeRange()
log ocidAssetTrackTimeRange
set ocidAssetTrackTimeScale to ocidTrack's naturalTimeScale()
log ocidAssetTrackTimeScale
set ocidAssetTrackNaturalSize to ocidTrack's naturalSize()
log ocidAssetTrackNaturalSize
set ocidCMTimeFrameDura to ocidTrack's minFrameDuration()
log ocidCMTimeFrameDura as record
log "-->"
log ocidTrack's nominalFrameRate() as number

log ocidTrack's requiresFrameReordering() as boolean
log ocidTrack's metadata() as list
log ocidTrack's commonMetadata() as list
log ocidTrack's availableMetadataFormats() as list
log ocidTrack's segments() as list
log ocidTrack's availableTrackAssociationTypes() as list
log "--->"
log ocidTrack's preferredTransform()
log ocidTrack's preferredVolume()
log ocidTrack's estimatedDataRate()
log ocidTrack's languageCode() as text
log ocidTrack's extendedLanguageTag()
log ocidTrack's hasAudioSampleDependencies()
set numCntTrak to numCntTrak - 1

end repeat

log strPresetName as text

(*
AVAssetExportPresetLowQuality
AVAssetExportPresetMediumQuality
AVAssetExportPresetHighestQuality
AVAssetExportPresetHEVCHighestQuality
AVAssetExportPresetHEVCHighestQualityWithAlpha

AVAssetExportPreset640x480
AVAssetExportPreset960x540
AVAssetExportPreset1280x720
AVAssetExportPreset1920x1080
AVAssetExportPreset3840x2160

AVAssetExportPresetHEVC1920x1080
AVAssetExportPresetHEVC3840x2160
AVAssetExportPresetHEVC1920x1080WithAlpha
AVAssetExportPresetHEVC3840x2160WithAlpha
AVAssetExportPresetHEVC7680x4320

AVAssetExportPresetAppleM4V480pSD
AVAssetExportPresetAppleM4V720pHD
AVAssetExportPresetAppleM4V1080pHD
AVAssetExportPresetAppleM4ViPod
AVAssetExportPresetAppleM4VAppleTV
AVAssetExportPresetAppleM4VCellular
AVAssetExportPresetAppleM4VWiFi

AVAssetExportPresetAppleProRes422LPCM
AVAssetExportPresetAppleProRes4444LPCM

AVAssetExportPresetPassthrough
AVAssetExportPresetAppleM4A
*)

###############################
#####書き出しセッション
################################
###初期化
set ocidExSession to (refAVAssetExportSession's alloc()'s initWithAsset:ocidReadAsset presetName:strPresetName)
####音声のみの分岐
if (objResponse as text) is "AppleM4A" then
(ocidExSession's setOutputFileType:(refMe's AVFileTypeAppleM4A))
else
(ocidExSession's setOutputFileType:(refMe's AVFileTypeQuickTimeMovie))
end if
(*
AVFileTypeAC3
AVFileTypeAIFC
AVFileTypeAIFF
AVFileTypeAMR
AVFileTypeEnhancedAC3
AVFileTypeSunAU
AVFileTypeMPEGLayer3
AVFileTypeCoreAudioFormat
AVFileTypeAppleM4A
AVFileTypeWAVE

AVFileTypeDNG
AVFileTypeHEIC
AVFileTypeHEIF
AVFileTypeJPEG
AVFileTypeAVCI
AVFileTypeTIFF


AVFileTypeAppleM4V
AVFileType3GPP
AVFileType3GPP2
AVFileTypeQuickTimeMovie
AVFileTypeMPEG4

AVFileTypeSCC
AVFileTypeAppleiTT
*)
(ocidExSession's setTimeRange:ocidAssetTrackTimeRange)
#ocidExSession's setFileLengthLimit:(missing value)
(ocidExSession's setShouldOptimizeForNetworkUse:false)
(ocidExSession's setCanPerformMultiplePassesOverSourceMediaData:true)
(ocidExSession's setDirectoryForTemporaryFiles:ocidFullTmpPathURL)
####出力先ファイル指定
(ocidExSession's setOutputURL:ocidFullDistPathURL)
(ocidExSession's exportAsynchronouslyWithCompletionHandler:(missing value))
###############################
#####出力
################################
log "########################################"
set numStatusNo to ocidExSession's status()
log "status:\t" & numStatusNo
(*
AVAssetExportSessionStatusUnknown:0
AVAssetExportSessionStatusWaiting:1
AVAssetExportSessionStatusExporting:2
AVAssetExportSessionStatusCompleted:3
AVAssetExportSessionStatusFailed:4
AVAssetExportSessionStatusCancelled:5
*)
set progress total steps to 1
set progress completed steps to 0
set progress description to "書出"

repeat
set numProgress to ocidExSession's progress()
set numProgressPer to numProgress * 100 as integer
set progress additional description to "状況:" & numProgressPer & "%"
set progress completed steps to numProgress
set numStatusNo to ocidExSession's status()
if numStatusNo > 2 then
exit repeat
end if
delay 1
end repeat
log "status:\t" & numStatusNo

set ocidReadAsset to ""
set objFileManager to ""
set ocidExSession to ""

set ocidReadAsset to ""
set objFileManager to ""
set ocidExSession to ""
end repeat


to doGetDateNo(strDateFormat)
####日付情報の取得
set ocidDate to refNSDate's |date|()
###日付のフォーマットを定義
set ocidNSDateFormatter to refNSDateFormatter's alloc()'s init()
ocidNSDateFormatter's setLocale:(refMe's NSLocale's localeWithLocaleIdentifier:"ja_JP_POSIX")
ocidNSDateFormatter's setDateFormat:strDateFormat
set ocidDateAndTime to ocidNSDateFormatter's stringFromDate:ocidDate
set strDateAndTime to ocidDateAndTime as text
return strDateAndTime
end doGetDateNo

|

その他のカテゴリー

Accessibility Acrobat Acrobat 2020 Acrobat AddOn Acrobat Annotation Acrobat ARMDC Acrobat AV2 Acrobat BookMark Acrobat Classic Acrobat DC Acrobat Dialog Acrobat Distiller Acrobat Form Acrobat JS Acrobat Manifest Acrobat Menu Acrobat Open Acrobat Plugin Acrobat Preferences Acrobat Preflight Acrobat python Acrobat Reader Acrobat SCA Acrobat SCA Updater Acrobat Sequ Acrobat Sign Acrobat Stamps Acrobat Watermark Acrobat Windows Acrobat Windows Reader Admin Admin Account Admin Apachectl Admin configCode Admin Device Management Admin LaunchServices Admin Locationd Admin loginitem Admin Maintenance Admin Mobileconfig Admin Permission Admin Pkg Admin Power Management Admin Printer Admin SetUp Admin SMB Admin Support Admin System Information Admin Tools Admin Users Admin Volumes Adobe Adobe FDKO Adobe RemoteUpdateManager AppKit Apple AppleScript AppleScript do shell script AppleScript List AppleScript ObjC AppleScript Osax AppleScript PDF AppleScript Pictures AppleScript record AppleScript Script Editor AppleScript Script Menu AppleScript Shortcuts AppleScript Shortcuts Events AppleScript System Events AppleScript System Events Plist AppleScript Video Applications AppStore Archive Attributes Automator BackUp Barcode Barcode QR Barcode QR Decode Bash Basic Basic Path Bluetooth BOX Browser Calendar CD/DVD Choose Chrome CIImage CityCode CloudStorage Color com.apple.LaunchServices.OpenWith Console Contacts CotEditor CURL current application Date&Time delimiters Desktop Device Diff Disk Dock DropBox Droplet eMail Encode % Encode Decode Encode UTF8 Error EXIFData ffmpeg File Finder Firefox Folder FolderAction Fonts GIF github Guide HTML HTML Entity Icon Illustrator Image Events Image2PDF ImageOptim iPhone iWork Javascript Jedit Json Label Leading Zero List locationd LRC lsappinfo LSSharedFileList m3u8 Mail MakePDF Map Math Media Media AVAsset Media AVconvert Media AVFoundation Media AVURLAsset Media Movie Media Music Memo Messages Microsoft Microsoft Edge Microsoft Excel Mouse Music NetWork Notes NSArray NSArray Sort NSBezierPath NSBitmapImageRep NSBundle NSCFBoolean NSCharacterSet NSColor NSColorList NSData NSDecimalNumber NSDictionary NSError NSEvent NSFileAttributes NSFileManager NSFileManager enumeratorAtURL NSFont NSFontManager NSGraphicsContext NSImage NSIndex NSKeyedArchiver NSKeyedUnarchiver NSLocale NSMutableArray NSMutableDictionary NSMutableString NSNotFound NSNumber NSOpenPanel NSPasteboard NSpoint NSPredicate NSPrintOperation NSRange NSRect NSRegularExpression NSRunningApplication NSScreen NSSize NSString NSString stringByApplyingTransform NSStringCompareOptions NSTask NSTimeZone NSURL NSURL File NSURLBookmark NSURLComponents NSURLResourceKey NSURLSession NSUserDefaults NSUUID NSView NSWorkspace Numbers OAuth OneDrive PDF PDFAnnotation PDFAnnotationWidget PDFContext PDFDisplayBox PDFDocumentPermissions PDFImageRep PDFKit PDFnUP PDFOutline perl Photoshop PlistBuddy pluginkit postalcode PostScript prefPane Preview Python QuickLook QuickTime ReadMe Regular Expression Reminders ReName Repeat RTF Safari SaveFile ScreenCapture ScreenSaver SF Symbols character id SF Symbols Entity sips Skype Slack Sound Spotlight sqlite SRT StandardAdditions Swift System Settings TCC TemporaryItems Terminal Text Text CSV Text MD Text TSV TextEdit Tools Translate Trash Twitter Typography UI Unit Conversion UTType valueForKeyPath Video VisionKit Visual Studio Code VMware Fusion Wacom webarchive webp Wifi Windows XML XML EPUB XML OPML XML Plist XML RSS XML savedSearch XML SVG XML TTML XML webloc XML XMP YouTube zoom