我目前正在做一个Django项目,我需要检查base64编码的视频文件的音频和视频编解码器。为了实现这一点,我实现了一个函数,它将base64字符串解码为二进制数据,然后尝试使用MoviePy加载视频剪辑。然而,我在尝试运行代码时遇到了一个AttributeError:'_io.BytesIO'对象没有属性'endswith'。
下面是代码的相关部分:
import base64
from io import BytesIO
from moviepy.editor import VideoFileClip
def get_video_codec_info(base64_data):
# Decode base64 string into binary data
_format, _file_str = base64_data.split(";base64,")
binary_data = base64.b64decode(_file_str)
# Load the video clip using MoviePy
clip = VideoFileClip(BytesIO(binary_data))
# Get information about the video codec
codec_info = {
'video_codec': clip.video_codec,
'audio_codec': clip.audio_codec,
}
return codec_info
字符串
错误发生在clip = VideoFileClip(BytesIO(binary_data))
行,似乎与BytesIO的使用有关。我试图找到解决方案,但目前卡住了。
任何关于如何解决这个问题的建议,或者在Django中检查base64编码视频文件的音频和视频编解码器的替代方法,都将非常感谢。谢谢!
2条答案
按热度按时间7ivaypg91#
您在
AttributeError: '_io.BytesIO' object has no attribute 'endswith'
中遇到的错误是因为MoviePy的VideoFileClip
需要文件路径或URL作为其参数,但您正在传递BytesIO
对象。要解决此问题,您可以从二进制数据创建临时文件,然后将该临时文件的路径提供给VideoFileClip
。以下是您的代码的更新版本:字符串
0ejtzxu12#
经过进一步的调查和考虑,我找到了一个替代解决方案。这个问题源于在原始实现中使用
MoviePy
和BytesIO
。为了解决这个问题,我建议使用一种不同的方法,将base64-decoded
二进制数据保存到一个临时文件中,然后使用ffprobe
收集视频codec
信息。字符串
这种方法使用ffprobe直接从视频文件中提取编解码器信息,绕过BytesIO和MoviePy遇到的问题。请确保系统上安装了FFmpeg,因为它是ffprobe的先决条件。