当前位置: 首页 > 知识库问答 >
问题:

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

贲凌
2023-03-14

因此,我尝试提取视频的每一帧,然后使用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)来做这件事,但是我最好的猜测是做一个循环来迭代ff探测输出文件,获得帧时间和图像编号,将帧放在它出现的点,然后继续下一个框架和时间放置。看看我上面作为例子使用的帧数据,它会是这样的:

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

这是我不确定在编码意义上如何做的部分。我可以读入和解析ff探针输出文本文件的行,但是我不知道如何使用ffmpeg或类似的解决方案在视频的某些点插入帧。

共有1个答案

皮骏
2023-03-14

您需要告诉系统有多个令牌。即

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

在这里,您告诉它您想要获取令牌1到4,delimeter是

因此,对于包含1100100010000的文件示例,它将%%a分配给第一个令牌(即1,而%%b分配给第二个令牌(即100)等。

 类似资料:
  • 这行工作良好,但我想创建一个视频文件从图像在另一个文件夹。“我的文件夹”中的映像名称为: 我如何从不同的文件夹输入图像文件?示例: 我尝试了这个命令,但是只生成了第一个图像(img001.jpg)的视频。

  • 问题内容: 我现在可以编译ffmpeg并将其添加到项目创建的Android.mk文件的jni文件夹中,我想使用ffmpeg从存储在静态arraylist中的图像创建视频文件 我已经搜索了很多,但找不到任何教程,对此表示感谢。 问题答案: 我也有类似的需求,并且达到了相同的目的。您可以通过两种方式执行此操作。我想先分享一个简单的例子。 在Android内部创建一个临时文件夹。 将图像复制到新文件夹中

  • 我试图创建一个视频从jpeg图像使用ffmpeg。生成的视频应为x264或x265格式。 我有一个36张图片的目录。每个图像大小约为60像素。它们的名称如下: 第00000帧。jpg 框架00001。jps 框架00002。jpg 框架00035。jpg 我阅读了SO中的文档和几篇文章,并编写了一个批处理文件来调用ffmpeg,如下所示: 当我运行这个命令时,我从ffmpeg得到了这个输出,这很奇

  • 如何使用ffmpeg生成一部电影,使用一个特定分辨率的图像(image1.png)持续15秒,这样当我播放视频时,图像将在屏幕上显示15秒。

  • 正在尝试从图像(1080p.png)音乐(320kbmp3)为youtube制作视频。 但转化是缓慢的。有什么想法吗,它是如何使优化的<代码>E:\U测试

  • 我试图创建缩略图图像上传视频与FFMPEG在ASP. NET核心如下: 它没有显示任何错误,但也没有生成缩略图。请问我遗漏了什么吗? 注意:如果我从命令行执行上面的配置,它就会工作!