教程:使用PowerShell截取视频帧并创建图像网格

在数字时代,视频内容越来越受欢迎,而在处理视频时,截取视频帧并创建图像网格是一个常见的需求。你可能希望制作视频预览图,创建视频摘要,或者仅仅想要展示视频的某些关键帧。无论你的用途是什么,本教程将向你展示如何使用PowerShell来截取视频帧,并将这些帧组合成一个漂亮的图像网格。

背景故事

在我们开始之前,让我为你讲一个故事。想象一下,你是一位视频制作爱好者,最近完成了一部精彩的短片。你想要在社交媒体上分享这个视频,并吸引更多观众。为了吸引人们的眼球,你决定制作一个有吸引力的视频封面,展示你的视频的精彩瞬间。然而,你发现市面上的封面制作工具无法满足你的需求。于是,你决定自己动手,使用PowerShell来截取视频帧并创建一个个性化的图像网格。让我们一起来完成这个任务吧!

准备工作

在开始之前,确保你已经安装了FFmpeg工具,因为它将用于视频帧的截取和图像的合并。你可以从FFmpeg官方网站下载并安装它。

此外,确保你的视频文件位于同一个目录下,并且它们的文件类型是.mp4.mkv。现在,让我们逐步进行操作。

步骤1:准备PowerShell脚本

首先,你需要创建一个名为extract_frames.ps1的PowerShell脚本文件。你可以使用任何文本编辑器,如Notepad,来创建这个文件。

$files = Get-ChildItem *.mp4,*.mkv
foreach ($file in $files) {
    # 定义函数以获取视频时长
    function Get-VideoDuration($file) {
        $ffmpegOutput = & ffmpeg -i $file 2>&1
        $durationMatch = [regex]::Match($ffmpegOutput, 'Duration: (\d+:\d+:\d+\.\d+)')
        if ($durationMatch.Success) {
            $duration = $durationMatch.Groups[1].Value
            $timeComponents = $duration -split ':'
            $durationInSeconds = [int]$timeComponents[0] * 3600 + [int]$timeComponents[1] * 60 + [math]::Round([double]$timeComponents[2])
            return $durationInSeconds
        }
        return 0
    }
    #文件
    $fileRootPath = $file.Name
    #$fileRootPath = Read-Host "名称带文件类型"
    #$fileRootPath = ""
    $time = Get-VideoDuration $fileRootPath
    #Write-Host "视频时长:$time 秒"

    # 获取视频时长
    $durationInSeconds = Get-VideoDuration $fileRootPath

    # 计算截取的时间点,从第10秒开始,平均分成9帧
    $frameTimes = @()
    for ($i = 0; $i -lt 9; $i++) {
        $frameTimes += [math]::Round(10 + $durationInSeconds / 9 * $i)
    }

    # 定义文件路径和参数
    $outputPath = "img"
    New-Item -Path ./$outputPath -ItemType Directory -Force
    # 生成创建图像的命令 -n 是跳过 -y是覆盖
    for ($i = 0; $i -lt 9; $i++) {
        $command = "ffmpeg -ss " + $frameTimes[$i] + " -i `"$fileRootPath`" -vframes 1 -q:v 2 " + $outputPath + "\frame_$i.jpg"
        Invoke-Expression $command
        Write-Host "已截取图像 $i"
    }

    # 合并截取的图像成图像网格
    # 获取文件大小
    $fileInfo = Get-Item $file.Name
    $fileSizeBytes = $fileInfo.Length
    $fileSizeGB = [math]::Round($fileSizeBytes / 1GB, 2)  # 转换为千兆字节

    # 转换时间
    $hours = [math]::floor($time / 3600)  # 计算小时
    $minutes = [math]::floor(($time % 3600) / 60)  # 计算分钟
    $seconds = $time % 60  # 计算剩余的秒数

    $名称 =$file.Name -replace ".mp4|.mkv", ""

    # 水印图像文件路径
    $watermarkImage = "D:/Software/O.png"
    #$watermarkImage = "E:/O.png"

    # 合并图像和水印
    $font = "D:/Software/ios.ttf"
    #$font = "E:/ios.ttf"
    $text = "名      称:$名称`n视频时长:$hours 小时 $minutes 分钟 $seconds 秒`n大      小:$fileSizeGB.GB"
    $标题 = "$名称"
    $视频时长 = "视频时长:$hours 小时 $minutes 分钟 $seconds 秒"
    $大小 = "大小:$fileSizeGB.GB"
    $outputFileName = "$fileRootPath.jpg"

    $mergeCommand = "ffmpeg -y -i `"$outputPath\frame_%d.jpg`" -i $watermarkImage -filter_complex `"
    [0:v]scale=-1:468,drawbox=x=0:y=0:w=iw:h=ih:c=white:t=10,tile=3x3,
    pad=iw:ih+155:0:155:white,drawtext=text='$text':fontfile='$font':fontsize=35:fontcolor=black:x=600:y=30[bg];
    [bg][1:v]overlay=10:10`" `"$outputFileName`""

    Invoke-Expression $mergeCommand

    Remove-Item -Path .\$outputPath -Recurse #删除图片
    Write-Host "图像网格创建完成。"
}

步骤2:执行PowerShell脚本

现在,打开PowerShell终端,导航到包含extract_frames.ps1脚本的目录,并运行以下命令来执行脚本:

.\extract_frames.ps1

脚本将开始运行,并在完成后生成图像网格。你可以在脚本中根据需要进行自定义设置,比如截取的帧数、截取的时间点等。

结果和进一步定制

一旦脚本运行完成,你将在同一目录下找到生成的图像网格文件,文件名为视频文件名加上.jpg扩展名。这个图像网格将包含9个图像帧,呈3x3的排列,并带有自定义的水印和视频信息。

你可以根据需要进一步定制脚本,比如更改水印图像、字体、字体大小等,以满足你的具体需求。

总结

通过这个教程,你学会了如何使用PowerShell脚本来截取视频帧并创建图像网格。这个技巧可以用于制作吸引人的视频封面、视频摘要或其他需要展示视频关键帧的场景。希望你能在自己的项目中成功应用这个技巧!

现在,你可以轻松地为你的视频内容制作引人注目的图像网格,让它们在社交媒体上脱颖而出。

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:教程:使用PowerShell截取视频帧并创建图像网格

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年10月16日
下一篇 2023年10月16日

相关推荐

  • 重启WSL:解决问题的得力工具

    你是否曾经在使用Windows Subsystem for Linux(WSL)时遇到过无法正常运行的应用程序或者需要实时更新的情况?别担心,WSL的重启可能是解决这些问题的有效方法。本教程将为你详细介绍如何重启WSL,以便顺利解决这…

    2023年9月19日
    00
  • 解锁FFmpeg的奇妙世界:部署与操作指南

    你是否曾经遇到过需要处理音视频文件的情况,但却感到手足无措?或者你想要搭建自己的流媒体服务器,但不知从何开始?别担心,今天我们将揭开一个神奇的工具的面纱,它就是FFmpeg。无论你是想进行音视频格式转换、…

    2023年9月26日
    00
  • 如何在Microsoft应用商店下载Windows应用

    你是否曾经在Windows平板电脑或计算机上寻找适合你的Windows应用程序?如果是的话,你来对地方了!Microsoft应用商店是一个绝佳的地方,提供了数以千计的免费和付费应用,以满足各种需求。无论你是需要办公工具、娱…

    2023年10月17日
    00
  • windows10/11如何查看ipv4优先还是ipv6优先

    在今天的数字世界中,网络连接是我们日常生活和工作中不可或缺的一部分。为了更好地管理网络连接,了解IPv4和IPv6的优先级是至关重要的。IPv6作为下一代互联网协议,被广泛采用,但在某些情况下,您可能希望了解它…

    2023年4月15日
    00
  • Windows运维指南:远程管理、容器化与PowerShell脚本 | 提升你的Windows系统维护技能

    在现代科技时代,操作系统扮演着至关重要的角色,Windows作为其中之一,广泛应用于各行各业。无论你是一名系统管理员、开发者,还是对Windows系统感兴趣的普通用户,都有必要了解Windows操作系统的管理和维护方法。…

    2023年8月30日
    00
  • 8个能提升你办公效率的人工智能网站

    在现代工作环境中,提高办公效率是至关重要的。随着人工智能技术的不断发展,越来越多的AI工具涌现出来,可以帮助你更加高效地完成工作任务。本文将介绍8个能够极大提升你办公效率的人工智能网站,无论你是需要自动…

    2023年5月4日
    00
  • 如何使用Python自动合并下载的音频和视频文件

    在数字时代,我们经常下载各种音频和视频文件,但有时候这些文件分别下载后需要手动合并。如果你希望简化这个过程,本教程将向你展示如何使用Python编写一个自动合并音频和视频文件的脚本,让你能够轻松完成这项任…

    2023年9月25日
    00
  • PowerShell的崭新世界:强大的对象处理和跨平台特性

    PowerShell,一个曾被低估的工具,如今正以令人瞩目的方式崭露头角。在这个技术快速发展的时代,PowerShell正在引领一场革命,将命令行操作和对象处理推向了一个全新的高度。 曾经的束缚 回顾过去,我们对于命令行…

    2023年8月27日
    00
  • FFmpeg多线程功能完成:开创视频处理新纪元

    在数字时代,视频已成为我们日常生活和工作中不可或缺的一部分。无论是在线视频流媒体、社交媒体分享,还是专业视频编辑,视频处理的需求越来越广泛。而FFmpeg,作为一款强大的开源多媒体处理工具,一直在为用户提…

    2023年12月26日
    00
  • 从Visio导出图像:使用PowerShell自动化批量操作

    有时候,在工作或项目中,你可能需要将Visio图表导出为图像文件以便与他人共享或在其他文档中使用。手动逐一导出每个图表可能会很繁琐,但是通过使用PowerShell,你可以轻松自动化这个过程。在这篇文章中,我将向你…

    2023年9月27日
    00

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注