【问题标题】:How to capture h264 with ffmpeg如何使用 ffmpeg 捕获 h264
【发布时间】:2015-05-02 00:41:40
【问题描述】:

我正在尝试使用 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

然后ffmpeg返回错误语句:

V4l2 输出设备仅支持单个原始视频流

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

【问题讨论】:

  • 输入视频是否有多个流?即音频和视频
  • 好的,不止一个流意味着它也捕获音频。谢谢你的澄清。我不知道它是否正在捕获音频和视频。这是一个罗技 C920,它有一个麦克风。所以我认为它最有可能在捕捉视频的同时捕捉声音。你知道我怎么把它变成一个单一的原始视频流吗?

标签: ffmpeg h.264 video4linux


【解决方案1】:

就像错误消息指出的那样,它需要单个原始视频流,而不是 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 或完全省略它。您可能还需要设置正确的像素格式。

【讨论】:

  • 好的,但是我将如何继续将 H.264 原始流转换为单个原始视频流?这是我需要使用“v4l2-ctl”更改相机设置的事情,还是只是使用 ffmpeg 命令的问题?
  • 更新了答案。如果您的输入是h264,则不能使用-vcodec copy
  • 链接您的相关 GStreamer/v4l2sink 解决方案以使读者受益:stackoverflow.com/questions/29991677/…
  • 正如我在另一篇文章中所说的那样。我现在无法让它工作。这可能是因为一个过时的 v4l2loopback 驱动程序。一旦我得到一些工作,我会在这里发布! :)
  • 试试 ffmpeg -i http://... -pix_fmt yuv420p -c:v rawvideo -f video4linux2 /dev/video1
猜你喜欢
  • 2021-12-24
  • 2015-08-27
  • 2012-03-07
  • 2012-05-11
  • 1970-01-01
  • 2013-10-21
  • 2013-04-20
  • 2017-12-24
  • 1970-01-01
相关资源
最近更新 更多