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