FFMPEG:如何使用SAME编解码器格式将输入摄像机流保存到文件中?

时间:2014-01-19 12:17:47

标签: ffmpeg video-capture

我有类似相机的设备,可以产生视频流并通过USB端口将其传递到我的基于Windows的机器。

使用命令:

ffmpeg -y -f vfwcap -i list

我看到(正如预期的那样)FFmpeg将输入流发现为流#0。

使用命令:

ffmpeg -y -f vfwcap -r 25 -i 0 c:\out.mp4

我可以将输入流成功保存到文件中。

从日志中我看到:

  

流#0:0:视频:rawvideo(UYVY / 0x59565955),uyvy422,240x320,25 tbr,1k tbn,25 tbc   没有指定像素格式,yuv422p用于选择H.264编码。

因此,我的输入格式已转码为yuv422p

我的问题:

  • 如何让FFmpeg将我的输入视频流保存到out.mp4而不进行转码 - 实际上,将输入流尽可能地复制到输出文件,格式相同?

1 个答案:

答案 0 :(得分:4)

  

如何让ffmpeg将我的输入视频流保存到out.mp4而不进行转码

你做不到。你可以从vfwcap stream copy原始视频,但MP4容器格式不支持rawvideo。您有几种选择:

  • 使用其他输出容器格式。
  • 将流复制到rawvideo然后进行编码。
  • 使用无损编码器(并可选择在捕获后对其进行重新编码)。

使用不同的输出容器格式

这符合您在不重新编码的情况下保存输入的要求。

ffmpeg -f vfwcap -i 0 -codec:v copy rawvideo.nut
  • rawvideo创建巨大的文件大小。

将流复制到rawvideo然后编码

这与上面相同,但是rawvideo然后被编码为更常见的格式。

ffmpeg -f vfwcap -i 0 -codec:v copy rawvideo.nut
ffmpeg -i rawvideo.nut -codec:v libx264 -crf 23 -preset medium -pix_fmt yuv420p -movflags +faststart output.mp4
  • 有关-crf-preset的更多信息以及有关创建H.264视频的其他详细信息,请参阅FFmpeg and x264 Encoding Guide

  • -pix_fmt yuv420p将使用与QuickTime等哑玩家兼容的像素格式。有关详细信息,请参阅colorspacechroma subsampling

  • -movflags +faststart重新定位moov原子,允许视频在客户端完全下载之前开始播放。如果您正在托管视频,并且用户将在其浏览器中查看该视频,则非常有用。

使用无损编码器

使用huffyuv:

ffmpeg -f vfwcap -i 0 -codec:v huffyuv lossless.mkv

使用无损H.264:

ffmpeg -f vfwcap -i 0 -codec:v libx264 -qp 0 lossless.mp4
  • 无损文件可以巨大,但不如rawvideo大。
  • 重新编码无损输出与重新编码rawvideo相同。