我正在尝试使用ffmpeg从设备和文件中提取原始流。我注意到关键的帧信息(视频:宽度、高度、像素格式、颜色空间、音频:示例格式)都存储在AVCodecContext和AVFrame中。这意味着我可以在播放流之前访问它,也可以访问每个帧。
我需要多少钱来解释这些值的变化帧对帧?我发现了source.html#l00081,它表明至少宽度、高度和像素格式可能会改变帧到帧。
基本问题是:如何解决这个API的灵活性,限制原始流(我的输出)不能指定流属性的变化。我想我需要预测最具描述性的属性来给出流,或者在属性发生变化时提供一个新的流。哪些选择取决于这些值是会迅速变化,还是会保持相对稳定。
发布于 2015-09-08 12:19:01
因此,要添加到@szatmary says中,流参数更改的典型用例是自适应流:
FFmpeg之所以这样做,是因为该API本质上是为了适应公共分母。在电话上拍摄的视频永远不会改变分辨率。大多数视频也不会从视频编辑软件中导出。即使是youtube-dl的视频通常也不会改变分辨率,这是一个客户端的决定,youtube-dl根本不会这样做。那你该怎么办?我只需使用来自第一个帧的流信息,并重新确定该分辨率的所有后续帧。这将适用于99.99%的案件。你是否想把你的服务安排到剩下的0.01%,取决于你认为人们会上传什么类型的视频,以及在这种情况下分辨率的改变是否有任何意义。
色彩空间变化吗?他们可以(理论上)在将屏幕记录和视频片段混合的软件中使用,但这是极不可能的(实际上)。样例格式的变化与视频分辨率一样频繁:在自适应场景中很常见,但是您是否关心取决于您的服务和您希望得到的视频类型。
发布于 2015-09-07 19:57:57
通常不经常,或者永远不会。但是,这是基于编解码器,是在编码时选择的选项。为了以防万一,我把解码后的帧通过swscale。
https://stackoverflow.com/questions/32437717
复制相似问题