工作:
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 显示错误“转换失败!”
为什么会发生这种情况以及如何解决?
我认为您想为从视频文件中提取的每个帧附加一个唯一的时间戳。我发现使用 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 不必处理文件名本身中的任何格式或占位符。