【问题标题】:FFmpeg create video from images, insert images as frame from timestamp?FFmpeg 从图像创建视频,从时间戳插入图像作为帧?
【发布时间】:2019-02-03 22:14:17
【问题描述】:

所以我尝试提取视频的每一帧,然后使用 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 或类似解决方案在视频中的某些点插入帧。

【问题讨论】:

    标签: python batch-file video ffmpeg


    【解决方案1】:

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

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

    在这里你告诉它你想要获取令牌 1 到 4 并且分隔符是 ,

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

    【讨论】:

      猜你喜欢
      • 2012-08-21
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      相关资源
      最近更新 更多