프로그래밍 방식으로 QuickTime 동영상 메타 데이터 속성을 한 종류에서 다른 종류로 뒤집는 방법


1

나는 약 1,700 개의 QuickTime 동영상 파일을 가지고 있습니다 (일부 확장자는 .mov이며 대부분은 그렇지 않습니다. 중요하지는 않습니다. 모두 시스템에 "QuickTime 동영상"으로 표시되어 있으며 이것이 그대로입니다).

QuickTime Pro 7을 사용하여 파일의 속성을보고 "Annotations"라고하는 메타 데이터 세트를 볼 수 있습니다. 이러한 주석 중 하나는 "작성자"태그입니다. 데이터를 보존하면서 해당 주석을 "아티스트"태그로 뒤집어 야합니다.

QuickTime Pro 속성

...이 1,700-odd 파일 각각에 대해.

이것을 자동화하는 가장 좋은 옵션과 구현은 무엇입니까?

직감은 AppleScript로 쉽게 그냥이 폴더 구조의 내용이 종류의 파일을 찾고, 다음 스위치를 만들기를 통과 있도록 설계 될 수 있지만, 내 애플 스크립트 - Fu는 더 좋은 없다는 것입니다.


변경 전후에 파일을 비교해 보셨습니까? 아마 직접 진 동영상 파일을 편집을 통해 수행하는 간단 ...
다니엘 벡

흠! 나는 그 전에 해본 적이 없다,하지만 첫 눈에의 대체 것으로 보인다 않습니다 autART바이너리 파일의 꼬리 끝에 바로.
NReilingh

이러한 파일을 모두 iTunes 보관함에 추가하고 메타 데이터 편집기를 사용하여 모든 파일을 한 번에 변경할 수도 있습니다.
다니엘 벡

@Daniel 좀 더 자세히 설명해 주시겠습니까? 이 파일에는 오디오 트랙 만 포함되어 있으므로 iTunes는 분명히 방정식의 일부입니다. 문제는 iTunes에서 Author 태그를 전혀 선택할 수 없다는 것입니다. 이 "메타 데이터 편집기"란 무엇입니까?
NReilingh

아니, 네 말이 맞아 불행히도, 지금은 이와 같은 파일이나 QT7 Pro를 사용할 수 없으므로 직접 실험 할 수 없습니다.
Daniel Beck

답변:


2

글쎄, 나는 내가 원하는 것을 성취하는 무언가 (읽기 : 더러운 핵)를 생각해 냈습니다. Sikuli를 통해 AppleScript 및 UI 스크립팅을 사용 했습니다 . 더 나은 오류 확인 및 내결함성과 같이 크게 향상 될 수 있으며 개선되어야합니다. 수십 개의 파일이 무언가를 질식시킬 수 있기 때문에 기본적으로 전체 프로세스를 거치면서 베이비 시팅해야했습니다. 즉, 그것은 나의 목적을 달성하고 나의 목표를 달성했습니다.

global theCount

set theCount to 0 as number

tell application "Finder"
    set theFolder to choose folder with prompt "Select a directory:"
    display dialog "This script will open each QuickTime movie file contained within this folder and its subfolders in QuickTime Player 7, and change the Author attribute to an Artist attribute using the Sikuli IDE. Proceed?"
    my processFiles(theFolder)
    display dialog (theCount as string) & " files processed."
end tell

on processFiles(theFolder)
    tell application "System Events"
        set theItems to get the name of every disk item of theFolder
    end tell
    set theFolder to theFolder as string --do this to concatenate with item name in loop
    repeat with i from 1 to length of theItems --this is the loop that works on each file in the current folder
        set theItem to item i of theItems
        set theItem to (theFolder & theItem) as alias --get a file object
        set itemInfo to info for theItem --get the file's info
        if visible of itemInfo is true then --only work on invisibles
            if folder of itemInfo is false then --and check for folders first or next line will fail
                if type identifier of itemInfo is "com.apple.quicktime-movie" then
                    try --makes this more fault-tolerant
                        tell application "QuickTime Player 7"
                            open theItem
                        end tell
                        set theCount to theCount + 1
                        do shell script "java -jar /Applications/Sikuli-IDE.app/Contents/Resources/Java/sikuli-script.jar /Users/username/Desktop/flip\\ to\\ artist\\ source.sikuli" --Sikuli has a better command line interface, but it wasn't working on the current build. This is connecting directly to its java executable, and is REALLY slow as a result.
                    end try
                end if
            else if folder of itemInfo is true then
                do shell script "touch \"" & POSIX path of theItem & "\"" --do this to track the progress of the script based on folder modification date
                my processFiles(theItem) --operate recursively until all files are processed
            end if
        end if
    end repeat
end processFiles

Sikuli 스크립트는 기본적으로 다음과 같습니다.

switchApp("QuickTime Player 7")
keyDown(Key.CMD)
type("j")
keyUp(Key.CMD)
click([Author annotation tag])
click([Artist option])
keyDown(Key.CMD)
type("s")
keyUp(Key.CMD)
keyDown(Key.CMD)
type("w")
keyUp(Key.CMD)
keyDown(Key.CMD)
type("w")
keyUp(Key.CMD)
waitVanish([a QuickTime window])

저는 숙련 된 Sikuli 개발자는 아니지만, UI 액션으로 AppleScript에 핵심적인 압박을 가해 야합니다. 그 부분은 어렵지 않습니다. 어려운 선택의 클릭입니다. AppleScript는 Author 속성도 확인할 수 있습니다. 그 내용은 AppleScript 사전에 설명되어 있지만 속성은 읽기 전용입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.