如何用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);
}
您正在使用 -input_format h264
和 -vcodec copy
。对于 v4l2
输出格式,您必须将其更改为 -vcodec rawvideo
或完全忽略它。您可能还需要设置正确的像素格式。
我正在尝试使用 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);
}
您正在使用 -input_format h264
和 -vcodec copy
。对于 v4l2
输出格式,您必须将其更改为 -vcodec rawvideo
或完全忽略它。您可能还需要设置正确的像素格式。