aichiyu 发表于 2023-10-14 22:35

power shell ffmpeg视频截图九宫格缩图预览

$files = Get-ChildItem *.mp4,*.mkv
foreach ($file in $files) {
    # 定义函数以获取视频时长
    function Get-VideoDuration($file) {
      $ffmpegOutput = & ffmpeg -i $file 2>&1
      $durationMatch = ::Match($ffmpegOutput, 'Duration: (\d+:\d+:\d+\.\d+)')
      if ($durationMatch.Success) {
            $duration = $durationMatch.Groups.Value
            $timeComponents = $duration -split ':'
            $durationInSeconds = $timeComponents * 3600 + $timeComponents * 60 + ::Round($timeComponents)
            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 += ::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 = ::Round($fileSizeBytes / 1GB, 2)# 转换为千兆字节

    # 转换时间
    $hours = ::floor($time / 3600)# 计算小时
    $minutes = ::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 `"
    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;
    overlay=10:10`" `"$outputFileName`""
    Invoke-Expression $mergeCommand


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

鸡肋

liqingjun38 发表于 2023-10-15 00:02

感谢分享~

quanyuhai 发表于 2023-10-15 07:42

感谢分享,顶一下

jxncyk 发表于 2023-10-15 08:08

谢谢谢谢

igo9go 发表于 2023-10-15 08:51

楼主 我想要你预览的那个视频可以吗? {:1_918:}

ysjd22 发表于 2023-10-15 09:15

太厉害了。。

ck1001CK 发表于 2023-10-15 09:21

居然是,柯南耶,画质不错哦

langbi 发表于 2023-10-15 09:30

感谢分享,顶一下

zx52 发表于 2023-10-15 10:42

感谢分享,有成品吗,类似exe的最好

liyitong 发表于 2023-10-15 11:04

好家伙。视频网站预览图,的小编,一下自动化了。
页: [1] 2
查看完整版本: power shell ffmpeg视频截图九宫格缩图预览