报错内容:
OSError: MoviePy error: failed to read the duration of file /mnt/data/test/monitor/videos/new_video/1652063723941.mkv.
Here are the file infos returned by ffmpeg:
ffmpeg version 4.2.2-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, matroska,webm, from '/mnt/data/test/monitor/videos/new_video/1652063723941.mkv':
Metadata:
ENCODER : Lavf58.29.100
Duration: N/A, start: 0.240000, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1920x1080, 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
At least one output file must be specified
内容大概是没有获取到视频时长
我这边的原因是,监控获取视频是mkv格式,每个视频文件保存30分钟的视频,中途中断程序,视频保存的时长按中断时的进度保存(中断时保存了十分钟,视频文件就存在十分钟的视频)。但此时如果按照
cap = VideoFileClip(new_save_path + '/' + str(video_new_list),audio=False)
的方法去读取,就会出现上述情况。
我目前想到的方法只能是
sorted(os.listdir(new_save_path))
取出视频名称后,取索引的方式,去掉未满30分钟的视频(也可以加判断,稍微复杂,因为我的是监控视频,不会出现大量的中断的视频)
满足30分钟的视频可以zhenchang取,然后合并。
如果有更好的解决方法可以留言!!!