我有几千个Quicktime.mov文件,它们的"moov";原子在其资源叉中,而不是在文件本身中。
这使得这些Quicktime文件只能在Mac上播放,并且只能在Quicktime播放器上播放。
我可以使用QT7打开每个文件并保存它";作为一部独立的电影";。这似乎将资源分支合并回新文件中,然后可以在其他工具和其他系统上正常使用该文件。
但由于我有数千个文件要转换,我需要用一些脚本或特定工具以编程方式进行转换。
Developer工具中的RezWack
实用程序看起来就是这样,所以我尝试了
RezWack -d myfile.mov -r myfile.mov/..namedfork/rsrc -o newfile.mov
这似乎确实将它合并到了新文件中。我可以看到";moov";执行hexdump时,文件末尾的atom。但是,生成的QT文件对Quicktime无效。我尝试过的其他工具(ffmpeg、mediainfo和VLC(仍然像以前一样抱怨,没有看到";moov";原子
我发现,为这些Quicktime电影合并回资源分支和数据分支的最好方法是确实使用Quicktime 7,但要通过AppleScript来实现,这样它就可以自动化。
最后,我围绕它制作了一个完整的Bash脚本,我将其命名为qt-unfork
:https://github.com/mivk/qt-unfork/
它的本质是这个AppleScript位,在这里使用osascript
:从Bash调用
# variables $in and $out were defined earlier
osascript - <<END
tell application "QuickTime Player 7"
open POSIX file "$in"
tell front document
save self contained in ("$out" as POSIX file)
close
end tell
end tell
END
这将实际打开QT7,您可以看到它正在处理文件。
请注意,由于这需要Quicktime 7,这是一个32位的应用程序,它当然不能在Mojave(10.14(之后的MacOS版本上运行。以后的版本只支持64位的应用。