python - FFmpeg 从图像创建视频,从时间戳插入图像作为帧?

标签 python batch-file video ffmpeg

因此,我尝试提取视频的每一帧,然后使用 ffprobe 查看视频中每一帧的播放时间,然后能够使用提取的图像和 ffprobe 输出将该视频拼接在一起。

现在,我有这个批处理文件:

for %%a in (*.mp4) do (
    mkdir "%%~na_images" > NUL
    ffmpeg.exe -hide_banner -i "%%a"  -t 100 "%%~na_images\image-%%d.png"
    ffprobe.exe "%%a" -hide_banner -show_entries frame=coded_picture_number,best_effort_timestamp_time -of csv > "%%~na_frames.txt"
)

首先,为图像创建一个目录。 然后 ffmpeg 将视频的所有帧提取到单独的 PNG 文件中,并进行适当编号。 最后,ffprobe 查看每个帧在该视频中首次显示的时间(即:第 1 帧在 0 秒处显示,但在 60fps 下,则第 2 帧在视频中的 0.016667 秒处播放)。输出如下所示:

frame,0.000000,0
frame,0.000000
frame,0.017000,1
frame,0.023220

其中第一个数字(IE 0.17000 是第二帧出现的时间)和第二个数字是帧编号。 现在我的问题是使用 ffmpeg 获取每一帧并将其放置在视频中的正确时间。我可以使用另一种语言(可能是Python)来完成此操作,但我最好的猜测是创建一个循环来迭代 ffprobe 输出文件,获取帧时间和图像编号,将该帧放置在它出现的点处,然后继续到下一帧和时间放置。看看我上面用作示例的帧数据,它会是这样的:

for line in lines:
    mySplit = line.split(',')
    # Get image number 0 and insert at time 0.000000

这是我不确定如何从编码角度进行的部分。我可以读入并解析 ffprobe 输出文本文件的行,但我不知道如何使用 ffmpeg 或类似解决方案在视频中的某些点插入帧。

最佳答案

您需要告诉系统有超过 1 个 token 。即

for /f "tokens=1-4 delims=," %%a in ...

在这里你告诉它你要抓取 token 1到4,分隔符是,

因此,对于包含 1,100,1000,10000 的文件示例,它将把 %%a 分配给第一个标记(即 1 >,以及 %%b 到第二个(即 100)等。

关于python - FFmpeg 从图像创建视频,从时间戳插入图像作为帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52072088/

相关文章:

Windows 批处理脚本 - 参数中的括号破坏程序输出到变量的分配

javascript - HTML5 和 Javascript 仅在可见时播放视频

python - 如何将 OrderedDict 的混合列表转换为 Dataframe?

python - 通过 Python shell 执行 Git 服务器命令

windows - 如何读取批处理文件中驱动器或卷的标签?

windows - 如何在Windows上设置多行环境变量?

python - 如何在分组字段集中显示多个 django modelformset 表单?

用于函数接口(interface)的 Python 库?

javascript - 两个全屏视频背景并排在一个窗口中

video - 如何从管道中获取接收器元素?