代码之家  ›  专栏  ›  技术社区  ›  Basj

以ffmpeg-i%04d.png模式重复图像

  •  0
  • Basj  · 技术社区  · 4 年前

    0000.png 0001.png , ..., 0499.png . 这样做有效:

    ffmpeg -framerate 25 -i images/%04d.png out.mp4
    

    只有一些变化 完全相同 .

    当我尝试上面的命令时 images/ 0000.png格式 , 0122.png 0288.png , 0312.png 0450.png 而不是其他495人 ,显然它失败了:

    [image2@00000000006d4040]无法打开文件:images/0001.png

    问:有没有办法告诉你 ffmpeg 使用时忽略丢失的帧并使用最新的可用帧而不是失败 -i images/%04d.png

    如果没有,有什么替代方法来生成只有这5个PNG的视频,应该到达一个精确的时间框架?

    0 回复  |  直到 4 年前
        1
  •  2
  •   llogan    4 年前

    方法1:concat过滤器

    -t 输入选项,然后与 concat filter .

    ffmpeg -loop 1 -framerate 25 -t 4.88 -i 0000.png -loop 1 -framerate 25 -t 6.64 -i 0122.png -loop 1 -framerate 25 -t 0.96 -i 0288.png -loop 1 -framerate 25 -t 00:00:05.52 -i 0312.png -filter_complex "[0][1][2][3]concat=n=4:v=1:a=0,format=yuv420p" output.mp4
    

    方法2:concat demuxer

    声明持续时间 duration 中的指令 concat demuxer

    这可能是最快的方法。

    1. 制造 input.txt 包含以下内容:

      file 0000.png
      duration 4.88
      file 0122.png
      duration 6.64
      file 0288.png
      duration 0.96
      file 0312.png
      duration 5.52
      
    2. 连接:

      ffmpeg -f concat -i input.txt -vf format=yuv420p output.mp4
      

    方法3:微调过滤器

    此方法允许您以帧(和/或通过使用时间值(如果愿意)来声明持续时间。

    使用帧作为持续时间的示例 trim filter concat过滤器 :

    ffmpeg -loop 1 -framerate 25 -i 0000.png -loop 1 -framerate 25 -i 0122.png -loop 1 -framerate 25 -i 0288.png -loop 1 -framerate 25 -i 0312.png -filter_complex "[0]trim=start_frame=0:end_frame=121,setpts=PTS-STARTPTS[v0];[1]trim=start_frame=122:end_frame=287,setpts=PTS-STARTPTS[v1];[2]trim=start_frame=288:end_frame=311,setpts=PTS-STARTPTS[v2];[3]trim=start_frame=312:end_frame=449,setpts=PTS-STARTPTS[v3];[v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p" output.mp4
    
        2
  •  0
  •   user14955023 user14955023    4 年前

    您好,我昨天尝试了循环方法,我发现它可能需要更长的时间来编码视频然后图像序列,如果你有一个过时的cpu(我还把笔记本电脑弄坏了)。 我认为这是因为即使有5幅图像,ffmpeg也总是要读取500帧来编码视频。 考虑到编码效率,请阅读本编码指南 https://trac.ffmpeg.org/wiki/Encode/H.264

    ffmpeg -y -f image2 -pattern_type sequence -i images/%04d.png -c:v h264 -crf 51 -preset 'ultrafast' out.mp4

    从理论上讲,“-f image2-pattern_type sequence”的声明应该可以节省探测文件的时间。

    最后但并非最不重要的是,减慢编码的是您使用的格式:PNG使用256x256x256色的巨大颜色空间,它们可以解压缩(1文件=30mb)。 如果你不需要alpha通道,试试jpeg,事情会发展得更快。

    推荐文章