我正在进行视频实验,并想知道如何从MPEG-TS容器中包含的H264中提取I帧。我的目的是从视频流中生成预览图像。由于I帧���该是完整的图片,P帧和B帧是从其中派生出来的,所以是否有可能只提取图片的数据而无需使用编解码器进行解码?
我已经在MPEG-TS容器格式上做了一些工作,但并不太专注于编解码器。
我更在寻找信息。
非常感谢。
我已经在MPEG-TS容器格式上做了一些工作,但并不太专注于编解码器。
我更在寻找信息。
非常感谢。
正如其他人所指出的,解码h.264是很复杂的。你可以编写自己的解码器,但这需要大量的工作。为什么不使用现有的解码器呢?
英特尔的IPP库具有解码器的基本构建块和一个示例解码器:
还有libavcodec:
我也不是这个领域的专家,但我曾经尝试过解码。使用以下GStreamer管道从video.mp4中提取预览:
gst-launch -v filesrc location=./video.mp4 ! qtdemux name=demux demux.video_00 ! ffdec_h264 ! videorate ! 'video/x-raw-yuv,framerate=1/1' ! jpegenc ! multifilesink location=image-%05d.jpeg
如果您想编写一些代码,请将videorate替换为appsrc/appsink元素。编写控制程序到管道中(参见示例):
filesrc location=./video.mp4 ! qtdemux name=demux demux.video_00 ! ffdec_h264 ! appsink
appsrc ! 'video/x-raw-yuv,framerate=1/1' ! jpegenc ! multifilesink location=image-%05d.jpeg
x264
和ffmpeg
是一个选择,但我不知道如何强制只使用I帧。 - Karoly Horvath