skip to content
Logo 三七の小站

ffmpeg将视频的每一帧导出图片

/ 4 min read

1. 导出图片

/output/943/
ffmpeg -i D:/相片/4.30/V20240430-113943.mp4 D:/output/943/%04d.png
#原视频 D:/相片/4.30/V20240430-113943.mp4

2. ps1脚本 10选1

Terminal window
$sourceFolder = "D:\output\943"
$destinationFolder = "D:\output\1\10"
$counter = 0
Get-ChildItem -Path $sourceFolder -Filter "*.png" | Sort-Object Name | ForEach-Object {
$counter++
if ($counter % 10 -eq 1) {
Copy-Item $_.FullName -Destination (Join-Path $destinationFolder $_.Name)
}
}

3. ps1脚本 重命名文件

Terminal window
# 设置要修改文件名的目录路径
$directoryPath = "D:\output\1\10"
# 自定义文件名前缀
$prefix = "10a"
# 获取目录中的所有文件(不包括子目录)
$files = Get-ChildItem -Path $directoryPath -File | Sort-Object Name # 确保按名称排序,以便于预测重命名顺序
# 初始化计数器
$count = 1
# 遍历文件并重命名
foreach ($file in $files) {
# 构建新文件名:前缀 + 递增数字 + 原文件扩展名
$newName = $prefix + $count.ToString().PadLeft(3, '0') + $file.Extension
$newFilePath = Join-Path -Path $file.Directory.FullName -ChildPath $newName
# 重命名文件
Rename-Item -Path $file.FullName -NewName $newFilePath
# 递增计数器
$count++
}

这个PowerShell脚本的功能是在指定的目录中对所有文件进行重命名。以下是脚本的逐行解释:

  1. 设置需要修改文件名的目录路径为 D:\output\1\10
  2. 定义一个前缀字符串 10a,该前缀将被添加到每个新文件名的开始。
  3. 使用 Get-ChildItem 命令获取指定目录 $directoryPath 下的所有文件(注意这里使用 -File 参数排除了子目录和目录本身)。结果通过管道传递给 Sort-Object Name 命令,确保文件按照名称排序,这样可以预测重命名的顺序。
  4. 初始化一个计数器变量 $count 为 1,用于在新文件名中生成递增的数字部分。
  5. 开始一个 foreach 循环,遍历之前获取到的文件列表。
  6. 在循环内部,首先构建新的文件名。新文件名由前缀、递增的数字(以三位数格式显示,不足三位前面补零)和原始文件的扩展名组成。例如,如果前缀是 10a,计数器值为 1,且文件的原始扩展名为 .txt,那么新文件名将是 10a001.txt
  7. 使用 Join-Path 命令构造包含新文件名的完整路径。
  8. 执行 Rename-Item 命令来重命名当前循环中的文件。它接收旧的完整文件路径作为 -Path 参数,并接收新文件的完整路径作为 -NewName 参数。
  9. 最后,在每次循环结束时,递增计数器 $count,为下一个文件准备新的编号。

这个脚本会按照定义的规则连续地重命名目录下的所有文件,使得文件名具有统一的前缀和递增的编号。