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
相关产品推荐
相关产品推荐

