FFMPEG:有可能在新的API中获得编码宽度吗?
考虑以下代码(为简洁起见,不进行初始化) 在旧的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
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