Mac:每 n 个文件批量重命名(和重新编号)文件

问题描述 投票:0回答:2

(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,想想看。谢谢。

macos unix terminal applescript batch-rename
2个回答
0
投票

我找到了一个解决方案。可能有更好的方法可以做到这一点,所以我仍然愿意接受其他答案。但这对我有用:

以下内容有效,因为我可以选择在渲染时跳过帧。所以我可以在渲染前将帧步设置为4,将输出设置为

/a/Image

它会在文件夹中给我

Image0001.png
Image0005.png
a

将起始帧增加

1
,并将输出路径更改为
/b/Image

它将在文件夹中产生

Image0002.png
Image0006.png
b

在那之后,我可以使用一个名为 NameChanger 的应用程序按顺序重命名文件。 (与 Automator 不同,此应用程序允许控制文件顺序。)

文件扩展名在该步骤中被删除,但可以在后续步骤中轻松附加:


0
投票

这应该完成您需要的两个部分。该脚本做出了一些基本假设,例如输入文件是问题中的名称,例如“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
值以匹配。自动执行此操作很容易,因此您只需输入一个数字,其他所有内容都会随之而来。

© www.soinside.com 2019 - 2024. All rights reserved.