Powershell 如何从使用ffmpeg的时间戳命名的帧创建视频
我有一个文件夹,里面装满了帧,帧的名称中有时间戳,格式如下 im_u%H_%M_%S_%MS.png 我尝试在windows中使用Powershell 如何从使用ffmpeg的时间戳命名的帧创建视频,powershell,video,ffmpeg,mp4,strftime,Powershell,Video,Ffmpeg,Mp4,Strftime,我有一个文件夹,里面装满了帧,帧的名称中有时间戳,格式如下 im_u%H_%M_%S_%MS.png 我尝试在windows中使用-pattern\u type glob,但它不起作用 ffmpeg.exe -framerate 10 -pattern_type glob -i im_*.png -c:v libx264 -r 30 -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -pix_fmt yuv420p $videoName 我明白了 后来我发现这在
-pattern\u type glob
,但它不起作用
ffmpeg.exe -framerate 10 -pattern_type glob -i im_*.png -c:v libx264 -r 30 -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -pix_fmt yuv420p $videoName
我明白了
后来我发现这在windows上不起作用,这就是我正在使用的
我也尝试
ffmpeg.exe -framerate 10 -pattern_type glob -i im_%02d_%02d_%02d_%06d.png -c:v libx264 -r 30 -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -pix_fmt yuv420p $videoName
我得到
我已经没有想法了。我拒绝相信在ffmpeg和powershell中没有办法做到这一点。
非常感谢您的帮助!您可以通过concat demuxer使用解决方案 按照文件名列表的顺序创建一个文本文件
file im_08_05_09_007324.png
file im_08_05_09_532857.png
file im_08_05_10_059340.png
file im_08_05_10_575862.png
file im_08_05_11_118361.png
然后跑
ffmpeg -f concat -r 10 -i list.txt -c:v libx264 ...
(这将产生关于无效DTS的警告,但您可以忽略它们)在Mulvya解决方案的基础上,我编写了一个powershell脚本,该脚本将创建文件名为建议格式的txt
$inFolder = "C:\my_folder_with_Png_frames\"
$inSearch = $inFolder+"*.png"
$outFile = $inFolder + "framenames.txt"
Get-childitem -path $inSearch -recurse -name | Out-File $outFile -Encoding ASCII
编码
,因为默认值是UTF-8-BOM
,并且ffmpeg
不喜欢它
$prependVar = "file "
$lines = get-content $outFile
$newlines = $lines | ForEach-Object{ "$prependVar$_"}
$newlines | Out-File $outFile -Encoding ASCII
cd $inFolder
C:/ffmpeg/bin.\ffmpeg.exe -f concat -r 10 -i $outFile -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
步骤1.和2.将不会生成包含完整路径名的txt文件。只有名称。这就是为什么我们需要将
cd
放入文件夹的原因。非常感谢!!很抱歉我迟了回答。那天我很忙,决定用斐济imageJ创建视频。但是,现在我需要创建很多视频,我发现有必要创建一个脚本。基于你的回答,我编写了我的完整解决方案。嘿,我正在尝试做一些类似于你这里所做的事情,它正在以某种方式读取我的文件名“myjpegile.jpg”。我收到一个错误“无法打开文件”dmyjpegile.jpg出于某种原因,它是在一个不存在的“D”上追加的。我猜这是一个格式问题,但我使用的是ASCII编码,所以我不确定是什么导致了它。
$inFolder = "C:\my_folder_with_Png_frames\"
$inSearch = $inFolder+"*.png"
$outFile = $inFolder + "framenames.txt"
Get-childitem -path $inSearch -recurse -name | Out-File $outFile -Encoding ASCII
$prependVar = "file "
$lines = get-content $outFile
$newlines = $lines | ForEach-Object{ "$prependVar$_"}
$newlines | Out-File $outFile -Encoding ASCII
cd $inFolder
C:/ffmpeg/bin.\ffmpeg.exe -f concat -r 10 -i $outFile -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4