为什么 ffmpeg 没有响应自定义名称作为输出?

问题描述 投票:0回答:1

工作:

import ffmpeg
import os

path = "K://Delete//"
dir_list = os.listdir(path)

for i in dir_list:
        ffmpeg.input(path+i).output("K://t//new%d.png", vf='fps=1/10').run()
        os.remove(path+i)

不工作:

import ffmpeg
import os
from datetime import datetime

path = "K://Delete//"
dir_list = os.listdir(path)

for i in dir_list:
        dt_string=datetime.now().strftime("%d%m%Y%H%M%S%f")
        ffmpeg.input(path+i).output("K://t//"+i+"%s.png"%dt_string, vf='fps=1/10').run()
           *#%d or %s both not working.*

        os.remove(path+i)

我试图避免生成同名文件。因为这会在将来引发错误。

我尝试为所有文件提供唯一名称,将日期时间作为字符串附加到文件中。

但是 ffmpeg 显示错误“转换失败!”

为什么会发生这种情况以及如何解决?

python datetime ffmpeg operating-system frames
1个回答
0
投票

我认为您想为从视频文件中提取的每个帧附加一个唯一的时间戳。我发现使用 FFmpeg 构建文件名时使用

%s
%d
可能会出现问题,因为 FFmpeg 在生成输出文件时使用
%d
作为序列号的占位符。

为了避免这个问题,您可以先在 Python 中构造文件名,然后将其传递给 FFmpeg,而不使用任何

%
格式:

import ffmpeg
import os
from datetime import datetime

path = "K://Delete//"
dir_list = os.listdir(path)

for i in dir_list:
    dt_string = datetime.now().strftime("%d%m%Y%H%M%S%f")
    output_filename = "K://t//" + i + dt_string + ".png"
    ffmpeg.input(path+i).output(output_filename, vf='fps=1/10').run()
    os.remove(path+i)

这样,文件名在传递给 FFmpeg 之前就已确定,并且 FFmpeg 不必处理文件名本身中的任何格式或占位符。

© www.soinside.com 2019 - 2024. All rights reserved.