You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用FFmpeg批量转图片为视频时出现文件找不到错误

问题:Python调用FFmpeg批量转图片为视频时找不到文件

我用以下Python代码把不同文件夹里的图片转成视频:

counter = 0
list_of_videos = os.listdir('./Pending/')

# 获取已完成视频列表并去除扩展名 
completed_mp4s = os.listdir('./outputvideos/')
completed_mp4s = [x[:len(x) - 4] for x in completed_mp4s]

# 仅为未创建的视频生成视频,已存在则跳过
framerate = 30


for video in list_of_videos:
    if video not in completed_mp4s:
        counter += 1
        inputos = "ffmpeg -framerate " + str(framerate) + " -pattern_type sequence -i ./Pending/" + video + "/" + video + ".%d.png -c:v libx264 -pix_fmt yuv420p ./outputvideos/" + video + ".mp4"
        os.system(inputos)

print(counter)

遇到了FFmpeg找不到文件的错误,错误信息如下:

ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 10.2.1 (GCC) 20200726
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-librav1e --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
[image2 @ 000001dbf1f854c0] Could find no file with path './Pending/WYZCW_Colored_Lights_Left/WYZCW_Colored_Lights_Left.%d.png' and index in the range 0-4
./Pending/WYZCW_Colored_Lights_Left/WYZCW_Colored_Lights_Left.%d.png: No such file or directory

我的图片命名格式是:前缀+_0001.png、_0002.png这样的4位数字序号(比如WYZCW_Colored_Lights_Left_0001.png),文件夹结构是:

  • 根目录下有Pending和outputvideos文件夹
  • Pending里每个子文件夹对应一个视频任务,子文件夹名称和图片前缀一致,子文件夹里是对应序号的图片

试过把%d改成%04d或%4d,还是不行,怎么解决?


解决方案

1. 核心问题:路径模板匹配错误

你的图片命名是前缀_0001.png,但代码里写的是前缀.%d.png,少了前缀和序号之间的下划线,这才是匹配失败的关键。正确的路径模板应该是./Pending/{video}/{video}_%04d.png。

2. 修正后的Python代码

import os

counter = 0
list_of_videos = os.listdir('./Pending/')

# 获取已完成视频列表并去除扩展名 
completed_mp4s = os.listdir('./outputvideos/')
completed_mp4s = [x[:-4] for x in completed_mp4s]

# 仅为未创建的视频生成视频,已存在则跳过
framerate = 30

for video in list_of_videos:
    # 跳过Pending目录下的非文件夹项,避免无效处理
    if not os.path.isdir(os.path.join('./Pending', video)):
        continue
    if video not in completed_mp4s:
        counter += 1
        # 修正路径模板,加上下划线,用%04d匹配4位补零的序号
        inputos = f"ffmpeg -framerate {framerate} -pattern_type sequence -i ./Pending/{video}/{video}_%04d.png -c:v libx264 -pix_fmt yuv420p ./outputvideos/{video}.mp4"
        os.system(inputos)

print(counter)

3. 额外优化建议

  • 使用f-string拼接命令,比字符串相加更清晰,不容易出错
  • 增加os.path.isdir判断,避免Pending目录下的非文件夹文件干扰流程
  • 如果图片序号不是从1开始(比如从0开始),或者中间有缺失,可以加上-start_number参数指定起始序号,例如:-start_number 0

内容的提问来源于stack exchange,提问作者Megan Darcy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 03:44:58