如何使用ffmpeg使用时间戳命名的帧创建视频

时间:2017-12-22 02:33:06

标签: powershell video ffmpeg mp4 strftime

我的文件夹中填充了以下列格式显示名称中时间戳的框架

  

im_%H_%M_%S_%MS.png

im_08_05_09_007324.png
im_08_05_09_532857.png
im_08_05_10_059340.png
im_08_05_10_575862.png
im_08_05_11_118361.png
im_08_05_11_596814.png
im_08_05_12_148340.png
im_08_05_12_665838.png

我尝试在Windows中使用-pattern_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 type 'glob' was selected but globbing is not supported by this libavformat build im_*.png: Function not implemented

后来我发现这不适用于Windows :(这就是我正在使用的。ffmpeg Error: Pattern type 'glob' was selected but globbing is not support ed by this libavformat build

我也试试

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

我得到了

im_%02d_%02d_%02d_%06d.png: No such file or directory

我的想法已经不多了。我拒绝相信在ffmpeg和powershell中没有办法做到这一点。 我真的很感激任何帮助!

2 个答案:

答案 0 :(得分:0)

您可以通过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的警告,但您可以忽略它们)

答案 1 :(得分:0)

在Mulvya解决方案的基础上,我写了一个powershell脚本,它将以建议的格式创建带文件名的文本。

  1. 创建包含目录png内容的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
    
  2. 我在Out-File cmdlet上添加了Encoding,因为默认值为UTF-8-BOMffmpeg不喜欢它。

    1. 将字符串“file”预先附加到txt文件的每一行。

      $prependVar = "file "
      $lines      = get-content $outFile
      $newlines   = $lines | ForEach-Object{ "$prependVar$_"}
      $newlines | Out-File $outFile -Encoding ASCII
      
    2. 致电FFMPEG

       cd $inFolder
       C:/ffmpeg/bin.\ffmpeg.exe -f concat -r 10 -i $outFile -c:v libx264 -r 30  -pix_fmt yuv420p out.mp4
      
    3. 步骤1.和2.不会生成带有完整路径名的txt文件。只有名字。这就是我们需要cd到文件夹的原因。