pyav / ffmpeg / libav 在不解码视频的情况下访问端数据
pyav / ffmpeg / libav access side data without decoding the video
现在我通过以下方式访问运动矢量:
container = av.open(
rtsp_url, 'r',
options={
'rtsp_transport': 'tcp',
'stimeout': '5000000',
'max_delay': '5000000',
}
)
stream = container.streams.video[0]
codec_context = stream.codec_context
codec_context.export_mvs = True
for packet in container.demux(video=0):
for video_frame in packet.decode():
motion_vectors_raw = video_frame.side_data.get('MOTION_VECTORS')
在我看来,这确实解码了 video_frame。有没有办法在不必解码整个帧的情况下获得运动矢量?我的目标是降低 CPU 利用率。
首先,我只找到了关于此事的评论:
no solution available - Reddit
complicated, but not impossible - Whosebug
idea to implement this in ffmpeg back in 2016 - Mailing list
大多数(如果不是全部)工作方法都基于“ffmpeg”,这需要在辅助数据可用之前进行帧解码。
另一种方法可能是在编码硬件加速时获取运动矢量,例如在 Raspberry Pi:
Motion vectors via MMAL encoder
谷歌搜索 “h264 运动矢量压缩域” 提供了很多关于该主题的研究论文,其中提取运动矢量以提高某些分析目标的性能,例如:
2004, Babu, "Video Object Segmentation - A Compressed Domain Approach"
2014, Babu, "A survey on compressed domain video analysis techniques"
那里没有真正的解决方案或解码提示,只有概念和评估。
因此,如果您想使用 Python 自己解析压缩的 h264 视频来尝试获取运动矢量,您可以从:
开始
H.264 and MPEG4 Video Compression - Book
https://github.com/beardypig/pymp4
https://github.com/alastairmccormack/pymp4parse
https://github.com/halochou/py-h264-decoder
https://github.com/slhck/h26x-extractor
https://code.google.com/archive/p/py264/
我认为(目前)还没有现成的解决方案!
现在我通过以下方式访问运动矢量:
container = av.open(
rtsp_url, 'r',
options={
'rtsp_transport': 'tcp',
'stimeout': '5000000',
'max_delay': '5000000',
}
)
stream = container.streams.video[0]
codec_context = stream.codec_context
codec_context.export_mvs = True
for packet in container.demux(video=0):
for video_frame in packet.decode():
motion_vectors_raw = video_frame.side_data.get('MOTION_VECTORS')
在我看来,这确实解码了 video_frame。有没有办法在不必解码整个帧的情况下获得运动矢量?我的目标是降低 CPU 利用率。
首先,我只找到了关于此事的评论:
no solution available - Reddit
complicated, but not impossible - Whosebug
idea to implement this in ffmpeg back in 2016 - Mailing list
大多数(如果不是全部)工作方法都基于“ffmpeg”,这需要在辅助数据可用之前进行帧解码。
另一种方法可能是在编码硬件加速时获取运动矢量,例如在 Raspberry Pi:
Motion vectors via MMAL encoder
谷歌搜索 “h264 运动矢量压缩域” 提供了很多关于该主题的研究论文,其中提取运动矢量以提高某些分析目标的性能,例如:
2004, Babu, "Video Object Segmentation - A Compressed Domain Approach"
2014, Babu, "A survey on compressed domain video analysis techniques"
那里没有真正的解决方案或解码提示,只有概念和评估。
因此,如果您想使用 Python 自己解析压缩的 h264 视频来尝试获取运动矢量,您可以从:
开始H.264 and MPEG4 Video Compression - Book
https://github.com/beardypig/pymp4
https://github.com/alastairmccormack/pymp4parse
https://github.com/halochou/py-h264-decoder
https://github.com/slhck/h26x-extractor
https://code.google.com/archive/p/py264/
我认为(目前)还没有现成的解决方案!