【发布时间】:2020-10-14 02:32:00
【问题描述】:
我一直在尝试构建一个项目,其中 Flask 应用程序可以自动将选定数量的视频连接到“核心视频”。
用户可以上传一个视频,该视频被发送到 amazon s3 进行存储。 所有视频均由 Moviepy 预处理为 mp4 文件,以 24 fps 无音频运行,分辨率为 720p。 经过此预处理后,视频将上传到 amazon s3。
在 s3 中的所有新上传中,创建了一个队列,管理员可以批准或删除该队列。 所有已批准的视频最终都会出现在与当前“核心视频”连接的列表中。 这是通过使用 Pythons Moviepy 库完成的。
from moviepy.editor import VideoFileClip, concatenate_videoclips, AudioFileClip
videos_to_concat(VideoFileClip(core_video.s3_link))
for video in approved_videos:
videos_to_concat.append(VideoFileClip(video.s3_link))
result = concatenate_videoclips(videos_to_concat, method=compose)
稍后,在视频的完整时长下添加了一些音频。
result_with_audio = result.set_audio(some_audio.mp3)
但问题是,在连接成功后的前几帧之后,一些视频在没有引发任何错误的情况下被冻结。帧在原始剪辑的持续时间内保持静止。音频仍在播放。加载下一个剪辑时,该剪辑要么正常播放,要么在几帧后具有相同的冻结行为。似乎没有明显的模式。
最初我认为错误可能是 ffmpeg 没有从正常的 s3 链接正确下载视频,但这并不能解释为什么开始时最大的视频和其他一些视频被正确渲染,而其他一些则没有.
这可能是由编解码器的潜在差异引起的吗? (libx264 与 mpeg4)? 或者这种通过 URL 访问文件然后直接将其提供给 moviepy 的方式是否是潜在的麻烦原因? (视频文件剪辑(https://amazon.s3.link.to.file.here.mp4) 我应该尝试下载所有文件然后在本地连接它们,还是我认为当前的方法应该有效。
在检查文件时,文件名、文件类型、分辨率似乎没有什么明显的问题,预处理似乎做了它应该做的事情。
很想听听有关如何解释并希望解决生成的连接视频的损坏的任何想法。
【问题讨论】: