【发布时间】:2021-08-09 15:17:31
【问题描述】:
我想在我的 django-channels 项目中上传视频/音频文件。所以我从 websocket 连接上传了视频(base64 编码的 url)。它工作正常。但现在解码 base64 视频数据后,我想使用 ffmpeg 压缩该视频。但它显示这样的错误。 ''原始:没有这样的文件或目录'' 我在 consumer.py 文件中使用了“AsyncJsonWebsocketConsumer”。这是我的代码: 消费者.py:
async def send_file_to_room(self, room_id, dataUrl, filename):
# decoding base64 data
format, datastr = dataUrl.split(';base64,')
ext = format.split('/')[-1]
file = ContentFile(base64.b64decode(datastr), name=filename)
print(f'file: {file}')
# It prints 'Raw content'
output_file_name = filename + '_temp.' + ext
ff = f'ffmpeg -i {file} -vf "scale=iw/5:ih/5" {output_file_name}'
subprocess.run(ff,shell=True)
可能这里ffmpeg无法识别要压缩的文件。我也尝试使用 post_save 信号解决这个问题。
signals.py:
@receiver(post_save, sender=ChatRoomMessage)
def compress_video_or_audio(sender, instance, created, **kwargs):
print("Inside signal")
if created:
if instance.id is None:
print("Instance is not present")
else:
video_full_path = f'{instance.document.path}'
print(video_full_path)
// E:\..\..\..\Personal Chat Room\media\PersonalChatRoom\file\VID_20181219_134306_w5ow8F7.mp4
output_file_name = filename + '_temp.' + extension
ff = f'ffmpeg -i {filename} -vf "scale=iw/5:ih/5" {output_file_name}'
subprocess.run(ff,shell=True)
instance.document = output_file_name
instance.save()
这也导致“E:..\Django\New_Projects\Personal: No such file or directory”。 我该如何解决这个问题?任何建议。如果可以在将对象保存到数据库之前对其进行压缩,将会更有帮助。提前致谢。
【问题讨论】:
-
检查文件系统。文件在那里吗?
-
在 post_save 信号的情况下它存在,因为对象已保存完毕。
-
你能看到文件吗?该错误表明它找不到该文件,因此请务必检查该文件是否确实存在于您希望保存它的文件系统中
-
是的,文件保存在确切的位置。我手动检查了它。我认为问题在于查找文件的路径。
-
这意味着它没有保存在存储在数据库中的路径中。因此,这可能是您如何在模型中指定路径的问题。发布您的型号代码
标签: python django ffmpeg django-channels