首页 > 解决方案 > 在 pngs 上循环运行 ffmpeg 以提高效率?

问题描述

我正在使用 ffmpeg 将生产数据作为文本覆盖嵌入到保存为 png 文件的单独动画帧中。

目前它的效率非常低,因为我需要从动画场景中采样值,例如当前帧和相机焦距,所以我有一个循环对每帧的信息进行采样,运行 ffmpeg 嵌入该帧的文本,然后关闭ffmpeg 并重复直到完成。

如果我有两个给定的字符串列表数组(例如帧号和焦距),有没有办法让 ffmpeg 运行一个实例,但是对于给定列表中的每个 png,它还引用数组中的下一个项目来打印文本,因此只操作一次整个框架集?

标签: arrayslistloopsffmpeg

解决方案


使用concat demuxer

  1. 制作input.txt

    file '01.png'
    file_packet_metadata length=50mm
    duration 0.04
    file '02.png'
    file_packet_metadata length=35mm
    duration 0.04
    file '03.png'
    file_packet_metadata length=18mm
    duration 0.04
    
  2. 编码,使用drawtext过滤器添加文本:

    ffmpeg -f concat -i input.txt -vf "drawtext=text='%{metadata\:length}':fontsize=22:fontcolor=white:x=w-tw-10:y=h-th-10,format=yuv420p" output.mp4
    

    有关定位,请参见如何定位 drawtext 文本


推荐阅读