当前位置: 首页 > news >正文

PowerShell脚本实现|从文件夹动画序列中均匀选取关键帧(保留首尾帧)

在这里插入图片描述

文章目录

    • 1. 问题概述
    • 2. 两种实现方案
      • 方案一:自动计算法(推荐)
      • 方案二:手动列表法
    • 3. 操作流程对比
    • 4. 注意事项
    • 5. 常见问题解决
    • 6. 总结建议


1. 问题概述

我们经常需要从动画序列中选取关键帧,例如:

  • 文件名:进度条_00000-min.png进度条_00099-min.png(共100帧)
  • 需求:保留首尾帧,并均匀选取中间帧,总共保留32张
    **实现效果: **
    开始效果
    在这里插入图片描述
    实现效果
    在这里插入图片描述

2. 两种实现方案

方案一:自动计算法(推荐)

计算原理

  1. 总帧数 = 结束帧 - 开始帧 + 1 = 100
  2. 需保留帧数 = 32(首尾+中间30帧)
  3. 计算间隔 = (100-2)/30 ≈ 3.266 → 取整为3

PowerShell脚本

cd "C:\动画文件夹"# 计算保留帧号
$keepFrames = @(0) + (3..96 | Where-Object { $_ % 3 -eq 0 }) + 99# 生成文件名
$keepFiles = $keepFrames | ForEach-Object { "进度条_{0:D5}-min.png" -f $_ }# 安全检查
$keepFiles | Sort-Object
"保留文件数:" + $keepFiles.Count# 预览待删除文件
Get-ChildItem "进度条_*-min.png" | Where-Object { $keepFiles -notcontains $_.Name } | Select-Object Name# 执行删除(取消注释)
# Get-ChildItem "进度条_*-min.png" | Where-Object { $keepFiles -notcontains $_.Name } | Remove-Item -Verbose

优点

  • 自动计算间隔,确保均匀分布
  • 适用于任意帧数的动画序列
  • 可灵活调整间隔值

方案二:手动列表法

适用场景

  • 文件名格式不规律时
  • 需要精确控制保留的特定帧

PowerShell脚本

cd "C:\动画文件夹"# 明确列出要保留的32个文件名
$keepFiles = @("进度条_00000-min.png","进度条_00003-min.png","进度条_00006-min.png",# ...中间省略..."进度条_00099-min.png"
)# 直接删除不在列表中的文件
Get-ChildItem -File | Where-Object { $keepFiles -notcontains $_.Name } | Remove-Item -Verbose

优点

  • 完全掌控保留的每一帧
  • 适合有特殊帧选取需求的场景

3. 操作流程对比

步骤自动计算法手动列表法
1计算总帧数列出所有要保留的文件名
2计算间隔值检查文件名是否正确
3生成帧号列表直接执行删除
4转换为文件名
5安全检查
6执行删除

4. 注意事项

  1. 必做备份:操作前复制整个文件夹(备份,以防出现bug)
  2. 文件名验证
    • 检查扩展名(.png/.jpg)
    • 确认前缀(“进度条_”)
  3. 间隔调整
    • 动作快的部分可减小间隔
    • 静止部分可增大间隔
  4. 特殊处理
    # 保留特定关键帧(如00050)
    $keepFiles += "进度条_00050-min.png"
    

5. 常见问题解决

Q:执行后帧数不对怎么办?
A:检查:

  1. 文件名是否匹配
  2. 总帧数计算是否正确
  3. 间隔值是否合适

Q:如何保留更多关键帧?
A:减小间隔值:

# 改为每隔2帧
$keepFrames = @(0) + (2..97 | Where-Object { $_ % 2 -eq 0 }) + 99

6. 总结建议

  • 常规情况:使用自动计算法,高效可靠
  • 特殊需求:使用手动列表法,精准控制
  • 最佳实践
    1. 先备份
    2. 用Select-Object预览
    3. 小范围测试后再全量执行

您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

相关文章:

  • redis 数据类型新手练习系列——string类型
  • 【QQMusic项目复习笔记——音乐管理模块详解】第四章
  • Doris vs ClickHouse:深入对比MPP数据库聚合操作的核心区别
  • 重读《人件》Peopleware -(9-1)Ⅱ办公环境Ⅱ“你在这儿从早上9点到下午5点之间什么都做不成.“(上)
  • 2025 年导游证报考条件新政策解读与应对策略
  • 同样机身尺寸下伺服电机比无刷电机扭矩更大的原因
  • LangChain LCEL表达式语言简介
  • IP SSL证书常见问题助您快速实现HTTPS加密
  • ElementUi的tabs样式太难修改,自定义tabs标签页
  • Leetcode 2845 题解
  • Android WindowManagerService(WMS)框架深度解析
  • LibAI Lab闪耀AI出海峰会:技术深耕与全球化增长的双重奏
  • RabbitMQ 复习总结
  • Android 使用支付接口,需要进行的加密逻辑:MD5、HMAC-SHA256以及RSA
  • 实时数据驱动未来:谷云科技CDC实时数据集成平台新版本发布
  • Kubernetes 节点 Not Ready 时 Pod 驱逐机制深度解析(上)
  • Flutter 环境搭建 (Android)
  • C++23中if consteval / if not consteval (P1938R3) 详解
  • Java 类加载过程中的ClassLoaderValue 类详解
  • BGE-M3模型深度技术分析
  • 伊朗港口爆炸事件已致195人受伤
  • 应勇:以法治力量服务黄河流域生态保护和高质量发展
  • 文旅部副部长饶权出任国家文物局局长
  • 饶权已任国家文物局局长
  • 蜀道考古调查阶段性成果发布,新发现文物遗存297处
  • 最高法知识产权法庭:6年来新收涉外案件年均增长23.2%