【问题标题】:Python cv2 .mp4 codec unable to be displayed in browserPython cv2 .mp4 编解码器无法在浏览器中显示
【发布时间】:2021-07-17 12:26:30
【问题描述】:

当我使用以下 Python 代码录制网络摄像头时,它会将其保存到 webcam.mp4 中。
在我的本地计算机上,我可以观看视频,但是当我在浏览器中显示它时,它不起作用。看来,编解码器是错误的,但我不知道为什么,也不知道如何让它正确。

Python 代码

    global rec_bool
    rec_bool = False

    def timer(seconds):
        global rec_bool
        rec_bool = True
        time.sleep(seconds)
        rec_bool = False

    seconds = 3
    timer_thread = threading.Thread(target=timer, args=(seconds,)).start()
    vid_capture = cv2.VideoCapture(0)
    vid_cod = cv2.VideoWriter_fourcc(*'mp4v')
    output = cv2.VideoWriter("webcam.mp4", vid_cod, 20.0, (640,480))
    while(rec_bool == True):
        ret,frame = vid_capture.read()
        
        output.write(frame)

    vid_capture.release()
    output.release()
    cv2.destroyAllWindows()

HTML 代码

<iframe class="video" id="webcam_video" src="/static/videos/webcam.mp4" frameborder="0" allowfullscreen></iframe>

它只是显示一个加载符号。另一方面,当我使用 curl 下载它时,它工作得非常好。我已经尝试过使用其他 mp4 文件,它们可以正常工作。

【问题讨论】:

  • curl 和这里有什么关系?
  • 检查客户端是否可以接收。它可以工作,所以我看不出有问题,只有 cv2 的输出文件是奇怪的。
  • 什么客户?您是否对自己保留任何重要信息?
  • 对于客户端,我的意思是最终用户在他们的机器上使用网站:)
  • 你可能需要fourcc(*'mp4v')中的不同值

标签: python opencv cv2


【解决方案1】:

并非所有编解码器都可以在网络浏览器中使用。参见维基百科:HTML5 video

所有浏览器都应该使用编解码器H.264,所以你可以试试

vid_cod = cv2.VideoWriter_fourcc(*'H264')

如果这不起作用 - 即。当cv2 在没有此编解码器的情况下编译时 - 然后您可以使用ffmpeg 等外部工具对其进行转换

在系统控制台/shell中

ffmpeg -i webcam.mp4 -vcodec libx264 -f mp4 output.mp4

在代码中

os.system("ffmpeg -i webcam.mp4 -vcodec libx264 -f mp4 output.mp4")

import subproces

# with `shell=True`
subproces.run("ffmpeg -i webcam.mp4 -vcodec libx264 -f mp4 output.mp4", shell=True)

# without `shell=True`
subproces.run( ["ffmpeg", "-i", "webcam.mp4", "-vcodec", "libx264", "-f", "mp4", "output.mp4"] )

或使用 ffmpeg-pythonMoviePy 之类的模块,它们使用 ffmpeg


顺便说一句: ffmpeg 还会安装程序 ffprobe,它可能会显示有关文件中使用的编解码器的详细信息。

 ffprobe webcam.mp4

编辑:

您也可以使用ffmpegWebCam录制

对于 Linux(我使用)

ffmpeg -f v4l2 -i /dev/video0 -t 00:00:03 output.mp4

或通过一些设置

ffmpeg -f v4l2 -framerate 20 -video_size 640x480 -i /dev/video0 -t 00:00:03 output.mp4

3 seconds = -t 00:00:03-t 3

对于其他系统,您应该在文档WebCam中找到信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2020-03-25
    • 2018-08-15
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2015-04-15
    相关资源
    最近更新 更多