如何修复 "some_number bytes wanted, 0 bytes read error on moviepy vfx"

How to fix "some_number bytes wanted, 0 bytes read error on moviepy vfx"

我正在使用 moviepy 编写代码,让我可以对上传的视频文件应用各种 vfx 编辑(裁剪到特定的宽高比、覆盖静态图像以及使视频变亮或变暗)。该代码按照我的要求执行,但在最初几秒钟后,返回的视频冻结(尽管音频继续)。

我在互联网上四处寻找类似的问题,但没有找到太多。 https://groups.google.com/forum/#!topic/imageio/kx0R0JQ6RVA suggested that imageio sometimes has to estimate the number of frames and https://github.com/Zulko/moviepy/issues/86 建议 ffmpeg 无法读取某些帧(而且它更容易读取基于网络摄像头的视频 - 我的文件就是这样)。

我现在的错误:(我多次收到所以我用xxx、yyy和zzz来指定各种数字) WARNING:py.warnings: .../moviepy-1.0.0-py3.7.egg/moviepy/video/io/ffmpeg_reader.py:130: UserWarning: Warning: in file /codebase/my_video_file.mp4, xxx bytes wanted but 0 bytes read, at frame yyy/total, at time zzz/total sec. Using the last valid frame instead.

我成功地 cropping/lightening/darkening/overlaying 我的视频,但几秒钟后视频停止(大概前几秒后的每一帧都只是前一帧的副本)而音频继续,所以我知道视频文件正在继续播放。

编辑 (8/14):我处理了一个没有任何变化的视频(所以没有 gamma_corr 也没有 CompositeVideoClip)并且结果仍然相同 - 所以这不是帧大小错误。

(警告)我不知道这个错误总是由我到达的解决方案修复。

原来我将编辑后的视频保存到与输入视频相同的路径,覆盖了原始视频(我觉得很好)。通过添加一个临时位置,然后重命名,我能够在避免问题的同时使用相同的路径。我现在收到带有视频效果的完整视频。

vl_sans_mp4 = video_location[0:-4] temp_location = vl_sans_mp4 + "temp" + ".mp4" original_video.write_videofile(temp_location, fps=30, bitrate="90k", audio_bitrate="128k") os.rename(video_location, vl_sans_mp4 + "input" + '.mp4') os.rename(temp_location, video_location)