当前位置: 首页 > 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. 小范围测试后再全量执行

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

http://www.xdnf.cn/news/150535.html

相关文章:

  • 【Java开发规范及漏洞扫描】
  • 对比2款国产远控软件,贝锐向日葵更优
  • 嵌入式:Linux系统应用程序(APP)启动参数及其规则详解
  • 感知古今:探秘古代传感器的奇妙世界
  • STUN协议 与 TURN协议
  • 如何在SOLIDWORKS中高效管理文件属性?
  • 基于ssm的同城上门维修平台管理系统(源码+数据库)
  • 基于STM32、HAL库的ADS1220IPWR模数转换器ADC驱动程序设计
  • 什么是优质的静态IP?以及如何选择优质的静态IP?
  • redis 数据类型新手练习系列——Hash类型
  • script中async与defer区别
  • Java基本概念
  • C语言标准库函数setlocale用法详解
  • Prometheus中部署Alertmanager
  • 全面解析 Spring 依赖注入:@Autowired、@Inject 与 @Resource 深度剖析
  • CRI、CSI 和 CNI 是三大核心接口标准
  • 多层pcb工厂哪家好?
  • Java 后端开发环境安装
  • 【EDA】Placement(布局)
  • 安全性测试常规测试点全解析:从基础到高级的实战指南
  • AI智能SEO关键词优化策略
  • 人工智能(AI)对网络管理的影响
  • 13.ArkUI Navigation的介绍和使用
  • 队列基础和例题
  • Linux-05 半个月崩了三次 ubuntu 系统记录
  • Linux网络编程
  • 2025智能营销平台发展趋势
  • 消息唯一ID算法参考
  • DbCreateHelper数据库创建指南
  • 建筑节能成发展焦点,楼宇自控应用范围持续扩大