这是奖励:此第3个PowerShell脚本生成马赛克缩略图图像
您将在每章视频中收到一张图像,这些图像看起来如下图所示。
### Options __________________________________________________________________________________________________________
$ffmpeg = ".\ffmpeg.exe" # Set path to your ffmpeg.exe; Build Version: git-45581ed (2014-02-16)
$folder = ".\Videos\*" # Set path to your video folder; '\*' must be appended
$x = 5 # Set how many images per x-axis
$y = 4 # Set how many images per y-axis
$w = 384 # Set thumbnail width in px (full image width: 384px x 5 = 1920px,)
### Main Program ______________________________________________________________________________________________________
foreach ($video in dir $folder -include "*_???.mp4" -r){
### get video length in frames, an ingenious method
$log = & $ffmpeg -i $video -vcodec copy -an -f null $video 2>&1
$frames = $log | Select-String '(?<=frame=.*)\S+(?=.*fps=)' | % { $_.Matches } | % { $_.Value }
$frame = [Math]::floor($frames / ($x * $y))
### put together the correct new picture name
$output = $video.directory.Fullname + "\" + $video.basename + ".jpg"
### use ffmpeg to create one mosaic png per video file
### Basic explanation for -vf options: http://trac.ffmpeg.org/wiki/FilteringGuide
#1 & $ffmpeg -y -i $video -vf "select=not(mod(n\,`"$frame`")),scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output
#2 & $ffmpeg -y -i $video -vf "yadif,select=not(mod(n\,`"$frame`")),scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output
& $ffmpeg -y -i $video -vf "mpdecimate,yadif,select=not(mod(n\,`"$frame`")),scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output
#4 & $ffmpeg -y -i $video -vf "select='gt(scene\,0.06)',scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 -vsync vfr $output
#5 & $ffmpeg -y -i $video -vf "yadif,select='gt(scene\,0.06)',scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 -vsync vfr $output
#6 & $ffmpeg -y -i $video -vf "mpdecimate,yadif,select='gt(scene\,0.06)',scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 -vsync vfr $output
#7 & $ffmpeg -y -i $video -vf "thumbnail,scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output
#8 & $ffmpeg -y -i $video -vf "yadif,thumbnail,scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output
#9 & $ffmpeg -y -i $video -vf "mpdecimate,yadif,thumbnail,scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output
}
主要思想是在整个视频上获得连续的图像流。我们用ffmpeg做到这一点 选择 选项。
首先,我们使用巧妙的方法(例如2000)检索总帧数,并将其除以我们的默认缩略图计数(例如5 x 4 = 20)。所以我们想要每100帧生成一个图像 2000 / 20 = 100
生成缩略图的结果ffmpeg命令可能如下所示
ffmpeg -y -i input.mp4 -vf "mpdecimate,yadif,select=not(mod(n\,100)),scale=384:-1,tile=5x4" -frames:v 1 output.png
在上面的代码中,您会看到9种不同的代码 -vf
组合 包含由...组成
select=not(mod(n\,XXX))
其中XXX是计算帧率
thumbnail
自动选择最具代表性的帧
select='gt(scene\,XXX)
+ -vsync vfr
其中XXX是你必须玩的门槛
mpdecimate
- 删除近似重复的帧。对黑场很好
yadif
- 对输入图像进行去交错。不知道为什么,但它的确有效
在我看来,版本3是最好的选择。所有其他人都被注释掉了,但你仍然可以尝试。我能够使用删除大多数模糊的缩略图 mpdecimate
, yadif
和 select=not(mod(n\,XXX))
。是啊!
为您 示例视频 我得到了这些预览
点击放大
点击放大
我上传了 所有缩略图 由这些版本创建。看看它们进行全面比较。