【问题标题】:Moviepy freezes after first couple of frames after concatenationMoviepy 在连接后的前几帧后冻结
【发布时间】: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) 我应该尝试下载所有文件然后在本地连接它们,还是我认为当前的方法应该有效。

在检查文件时,文件名、文件类型、分辨率似乎没有什么明显的问题,预处理似乎做了它应该做的事情。

很想听听有关如何解释并希望解决生成的连接视频的损坏的任何想法。

【问题讨论】:

    标签: python amazon-s3 moviepy


    【解决方案1】:

    好的,最后我确实设法弄清楚了。通过使用 amazon s3 为 Python 提供的 boto3 客户端下载所有视频,问题得以解决。将所有视频下载到网络服务器的本地存储后,连接工作没有任何问题。

    我猜这可能与 s3 没有通过链接立即提供整个视频文件有关。最后,在使用 moviepy 执行任何编辑之前,仅使用提供的 s3 客户端下载存储视频似乎是很合乎逻辑的。

    【讨论】:

      猜你喜欢
      • 2012-11-12
      • 2011-03-27
      • 2014-01-24
      • 2018-07-06
      • 2016-06-17
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      相关资源
      最近更新 更多