【发布时间】:2020-05-17 14:03:51
【问题描述】:
我有一个 HLS 流,想提取帧,因为它在 python 中使用 opencv 出现在计算机视觉中。我曾尝试探索 ffmpeg,但它似乎很容易阅读 .mp4 而不是 hls 流(m3u8)。 ffmpeg-python 是否有其他选项或其他 API 可以从 HLS 流中提取帧。
这是我想尝试但不适用于 VIDEO_URL 的示例代码
from imutils.video import VideoStream
import ffmpeg
import cv2
import numpy as np
import subprocess as sp
VIDEO_URL = "https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8"
VIDEO_FILE = "sampleStream.mp4"
process = (
ffmpeg
.input(VIDEO_FILE)
#.input(VIDEO_URL)
.output('pipe:', format='rawvideo', pix_fmt='rgb24')
.run_async(pipe_stdout=True)
)
tar = 200
val = 0
while True:
val = val + 1
in_bytes = process1.stdout.read(100 * 200 * 3)
if not in_bytes:
print('Breaking - No bytes found.')
break
in_frame = (
np
.frombuffer(in_bytes, np.uint8)
.reshape([100, 200, 3])
)
if val == tar:
print('Writing image...')
cv2.imwrite("sample.jpg", in_frame)
break
【问题讨论】:
-
你能说得更具体点吗? “不工作”没有获得足够的信息来诊断任何事情。
-
使用 video_url 作为参数时,从输出流读取代码时卡住了。我认为这不是使用此 API 的正确方法,但在互联网上进行了搜索,到目前为止还没有看到另一个示例。
标签: python opencv ffmpeg computer-vision