为什么我不能创建视频或通过 Internet 发送视频数据?
Why can't I create videos or send video data over the internet?
信息
我一直非常希望能够使用 Python 中的套接字通过 Internet 发送图像和视频数据。但我不知道如何阅读视频和解码bytes
。
所以我今天有了一个想法并尝试了一下:
with open('VID_READ.mp4', 'rb') as vid_read:
# 'rb' to read the video data as bytes and avoid codec errors
byte_data = vid_read.read()
str_data = str(byte_data)[2:-1] # To avoid codec errors caused by byte decoding
vid_read.close()
with open('VID_WRITE.mp4', 'w') as vid_write:
vid_write.write(str_data)
上面的代码完成时没有任何错误,但是当我尝试使用视频播放器打开 VID_WRITE.mp4
时,出现读取错误。
问题
How do I read the byte data in a video, decode it, and write it into another video file without any errors?
套接字发送字节,因此无需转换为字符串。
并且不要转换为 image
或 video
之类的字符串文件,因为它会更改一些字节 (new line
) 并且会破坏数据。并且不要削减 [2:-1]
因为你创建了不完整的数据。
简单地读为字节 rb
并写为字节 wb
with open('VID_READ.mp4', 'rb') as vid_read:
byte_data = vid_read.read()
# ... send bytes using socket ...
with open('VID_WRITE.mp4', 'wb') as vid_write:
vid_write.write(byte_data)
顺便说一句: 如果你使用 with open(...) as ..
那么你不需要 close()
因为 with
关闭它。
顺便说一句:
如果你想转换或编辑 video
或 image
然后使用专门的模块,如 PIL
/ pillow / wand for images, MoviePy / ffmpeg-python 视频。你不能使用标准 open()
信息
我一直非常希望能够使用 Python 中的套接字通过 Internet 发送图像和视频数据。但我不知道如何阅读视频和解码bytes
。
所以我今天有了一个想法并尝试了一下:
with open('VID_READ.mp4', 'rb') as vid_read:
# 'rb' to read the video data as bytes and avoid codec errors
byte_data = vid_read.read()
str_data = str(byte_data)[2:-1] # To avoid codec errors caused by byte decoding
vid_read.close()
with open('VID_WRITE.mp4', 'w') as vid_write:
vid_write.write(str_data)
上面的代码完成时没有任何错误,但是当我尝试使用视频播放器打开 VID_WRITE.mp4
时,出现读取错误。
问题
How do I read the byte data in a video, decode it, and write it into another video file without any errors?
套接字发送字节,因此无需转换为字符串。
并且不要转换为 image
或 video
之类的字符串文件,因为它会更改一些字节 (new line
) 并且会破坏数据。并且不要削减 [2:-1]
因为你创建了不完整的数据。
简单地读为字节 rb
并写为字节 wb
with open('VID_READ.mp4', 'rb') as vid_read:
byte_data = vid_read.read()
# ... send bytes using socket ...
with open('VID_WRITE.mp4', 'wb') as vid_write:
vid_write.write(byte_data)
顺便说一句: 如果你使用 with open(...) as ..
那么你不需要 close()
因为 with
关闭它。
顺便说一句:
如果你想转换或编辑 video
或 image
然后使用专门的模块,如 PIL
/ pillow / wand for images, MoviePy / ffmpeg-python 视频。你不能使用标准 open()