FFMPEG:有可能在新的API中获得编码宽度吗?

FFMPEG:有可能在新的API中获得编码宽度吗?,ffmpeg,libavcodec,libav,libavformat,Ffmpeg,Libavcodec,Libav,Libavformat,考虑以下代码(为简洁起见,不进行初始化) 在旧的API中,可以通过这种方式获得coded_宽度和coded_高度。目前它已被弃用。有AVCodecParametersstruct,但它只提供: int width int height 这可能与 int coded_width int coded_height 因此,是否可以在不使用不推荐的流[videoStreamIndex]->编解码器的情况下获取编码宽度?要获取编码宽度和编码高度,如果运行以下命令,您还可以使用ffprobe: ffpr

考虑以下代码(为简洁起见,不进行初始化)

在旧的API中,可以通过这种方式获得
coded_宽度
coded_高度
。目前它已被弃用。有
AVCodecParameters
struct,但它只提供:

int width
int height
这可能与

int coded_width
int coded_height

因此,是否可以在不使用不推荐的
流[videoStreamIndex]->编解码器的情况下获取编码宽度?

要获取编码宽度和编码高度,如果运行以下命令,您还可以使用
ffprobe

ffprobe -show_streams -i video.mp4
您将获得一个流对象,其中包括编码的\u宽度和编码的\u高度:

index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_time_base=9772827/468627200
codec_tag_string=avc1
codec_tag=0x31637661
width=1280
height=720
coded_width=1280
coded_height=720
has_b_frames=2

根据最新的doxygen文档,这些文件仍然有效,目前在ffmpeg中使用:

声明(不含
已弃用的
杂注):

用于:


希望这能有所帮助。

我为迟来的回复道歉。根据@theKamilz的响应,最好的解决方案似乎只是在头文件中隐藏这个警告。(我正在使用gcc编译器)

#pragma GCC诊断被忽略“-Wdeprecated声明”


问题在于API的使用,而不是命令行。引擎盖下方
ffprobe
显示了弃用结构的值。这正是询问者试图避免的。代码:formatCtx->streams[videoStreamIndex]->codec->coded\u width,类型:AVFormatContext->AVStream->AVCodecContext->int。我可以在没有警告的情况下声明或使用
AVCodecContext
struct等等。但是使用
formatCtx->streams[videoStreamIndex]->codec会调用警告。因此,通常可以使用
AVCodecContext
struct而不会出现任何问题,但不建议从AVStream获取此结构的信息。看一看,然后
AvcodeContext*codec
在新文档中不存在。我认为您应该使用pragmas来抑制不推荐警告,作为这种情况的一个例外,我刚刚用关键字
coded\u width
检查了ffmpeg源代码(github)。和您一样,Usign似乎非常合法,至少就最新版本而言是如此。
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_time_base=9772827/468627200
codec_tag_string=avc1
codec_tag=0x31637661
width=1280
height=720
coded_width=1280
coded_height=720
has_b_frames=2