如何用ffmpeg抓取h264

How to capture h264 with ffmpeg

我正在尝试使用 ffmpeg 捕获 h264 并将其发送到我的虚拟设备。 我可以捕获 YUYV 并使用此命令发送它:

ffmpeg -f video4linux2 -s 1920x1080 -i /dev/video0 -vcodec copy -f v4l2 /dev/video3

然后我尝试用这个来捕获 h264 而不是 YUYV:

ffmpeg -f video4linux2 -input_format h264 -s 1920x1080 -i /dev/video0 -vcodec copy -f v4l2 /dev/video3

然后ffmpegreturns报错语句:

V4l2 output device supports only a single raw video stream

有人知道正确的命令吗?有什么问题吗?

如错误消息所述,它需要单个原始视频流而不是 H.264 原始流:

if (s1->nb_streams != 1 ||
       s1->streams[0]->codec->codec_type != AVMEDIA_TYPE_VIDEO ||
       s1->streams[0]->codec->codec_id   != AV_CODEC_ID_RAWVIDEO) {
       av_log(s1, AV_LOG_ERROR,
               "V4L2 output device supports only a single raw video stream\n");
       return AVERROR(EINVAL);
}

FFmpeg/v4l2enc.c on GitHub

您正在使用 -input_format h264-vcodec copy。对于 v4l2 输出格式,您必须将其更改为 -vcodec rawvideo 或完全忽略它。您可能还需要设置正确的像素格式。