(macOS/终端问题)
我正在渲染动画序列的帧,需要放慢整个过程以获得子帧模糊,并从四个合成帧中合成每个 final 帧。这意味着将帧数增加 400%。但是输出图片的软件只能按顺序输出文件名,不能指示分组。
最终将变成 2 帧的输出将如下所示(8 帧):
第 1 帧:
0001.png 0002.png 0003.png 0004.png
第 2 帧:
0005.png 0006.png 0007.png 0008.png
要在合成中“堆叠”这些,我需要将它们重新映射为“层”,我们称它们为 A、B、C、D:
第 1 帧:
a0001.png b0001.png c0001.png d0001.png
第 2 帧:
a0002.png b0002.png c0002.png d0002.png
然后可以很容易地将它们移动到文件夹中,并从那里合成:
合成器将根据文件名中的数字“步进”。所以只要ABCD对齐正确对应的帧号,问题就解决了
我还安装了一个名为 Transnomino 的批处理文件重命名应用程序,所以如果使用该应用程序更容易做到这一点,我也愿意这样做。或者通过在 Automator 中使用 AppleScript,想想看。谢谢。
我找到了一个解决方案。可能有更好的方法可以做到这一点,所以我仍然愿意接受其他答案。但这对我有用:
以下内容有效,因为我可以选择在渲染时跳过帧。所以我可以在渲染前将帧步设置为4,将输出设置为
/a/Image
它会在文件夹中给我
Image0001.png
,Image0005.png
等a
将起始帧增加
1
,并将输出路径更改为/b/Image
它将在文件夹中产生
Image0002.png
,Image0006.png
等b
在那之后,我可以使用一个名为 NameChanger 的应用程序按顺序重命名文件。 (与 Automator 不同,此应用程序允许控制文件顺序。)
文件扩展名在该步骤中被删除,但可以在后续步骤中轻松附加:
这应该完成您需要的两个部分。该脚本做出了一些基本假设,例如输入文件是问题中的名称,例如“0001.png”,但这很简单,可以根据需要进行更改。
首先,它在桌面上的“框架”文件夹内创建输出排序文件夹。它会在桌面上名为“inputs”的文件夹中查找您的源文件。它要求计算要处理的数量,但可以将其设置为只抓取文件夹中的每个文件。
接下来,它创建一些列表:帧(例如 0001、0002)、帧文件名(0001.png、0002.png)和前缀(a、b、c、d)。
然后它循环遍历每一帧并确定哪个字母应该放在其文件名前面,构建新文件名并重命名文件(使用系统事件)。最后,它循环遍历前缀并将所有匹配的文件移动到适当的排序文件夹(基于第一个字母)。
-- create frames destination folders
do shell script "cd ~/Desktop ; /bin/mkdir -p frames/{a,b,c,d}"
-- specify input and destination folders
set inputDir to (path to desktop) & "inputs:" as text
set frameDir to (path to desktop) & "frames:" as text
set padX to {"000", "00", "0"} -- pads out to 3 zeroes, e.g. 0001
set frameList to {}
set nameList to {}
set inputFrameCt to 4
set inpFr to display dialog "Enter number of input frames" default answer 4
set inputFrameCt to text returned of inpFr as integer
repeat with x from 1 to inputFrameCt
set y to x as string -- 1 to frame count
set zx to item (length of y) of padX & y -- 4 characters, e.g. 0005
set end of frameList to zx
set end of nameList to zx & ".png"
end repeat
frameList -- list of frame numbers, does not include extension
nameList -- list of frame file names, includes extension
set preList to {"d", "a", "b", "c"} -- letter to prepend to file name
set fNameList to {} -- list of resulting file names
tell application "System Events"
repeat with f in frameList -- cycle through frame numbers
set inFile to inputDir & item f of nameList -- frame's path and name
set pre to item (f mod 4 + 1) of preList -- get appropriate prefix
set preName to pre & item f of nameList -- frame's resulting file name
set end of fNameList to (pre & item f of nameList)
set name of file inFile to preName -- rename file, e.g. 0001.png > a0001.png
end repeat
set letterList to {"a", "b", "c", "d"}
repeat with l in letterList
set lFiles to (disk items of folder inputDir whose name begins with l)
move lFiles to folder l of folder frameDir -- move files based on prefix
end repeat
end tell
NB 该脚本使用
x mod 4
来确定将哪个字母用作前缀。由于每四个数字的结果都是 0,因此它会加 1 并将“d”移到列表的开头。
如果您以后想要更改脚本以考虑不同的帧率,您可以简单地更改各种字母列表并更改
mod
值以匹配。自动执行此操作很容易,因此您只需输入一个数字,其他所有内容都会随之而来。