好日子,
我已经编写了一个应用程序,它使用V4L2驱动程序从C920捕获H264原始帧。字节被输出到stdout中,并可以通过管道传输到文件或任何程序
我想做的是:
/捕获|ffmpeg-f h264-i-b 500000-vcodec复制输出.mp4
这个想法是捕捉一个原始视频,并将其转换为mp4文件。它工作得很好,但是,从未应用过比特率压缩。它最终得到了一个与原始文件大小相同的文件(因为相机输出的是压缩的h264文件,但已经在原始帧中了)
然而,如果我改为
/cature>input.raw
ffmpeg -i out.mp4 -b 500000 output.mp4
现在,它将文件压缩到合理的大小。这是有原因的吗?我目前唯一的解决方案是使用gstreamer这样的替代方案(它有h264的问题),或者找出ffmpeg API,看看我是否可以添加一些代码,使其对帧进行动态压缩。
我想问题是你使用了-vcodec copy
,它说不要触摸视频编解码器。为了进行全面的重新编码,我会省略这个论点。
来自ffmpeg文档:
流复制是通过向"-codec"选项提供复制参数来选择的模式。它使ffmpeg省略了对指定流的解码和编码步骤,因此它只进行解复用和复用。它对于更改容器格式或修改容器级元数据非常有用。
请注意,-vcodec
是-codec:v
的别名,这也是-codec
回答您问题的原因。