зеркало из https://github.com/microsoft/opencv.git
Allow encoding with libx264 via ffmpeg to work
Add a call to avcodec_get_context_defaults3, this sets per-codec default values and in the case of libx264 will stop VideoWriter::open (with fourcc=x264) from failing due to libx264 complaining about broken ffmpeg default settings. Set some additional libx264 encoder parameters.
This commit is contained in:
Родитель
9e12b7c3c2
Коммит
52137ceed0
|
@ -59,6 +59,7 @@ extern "C" {
|
|||
|
||||
#include "ffmpeg_codecs.hpp"
|
||||
|
||||
#include <libavutil/opt.h>
|
||||
#include <libavutil/mathematics.h>
|
||||
|
||||
#ifdef WIN32
|
||||
|
@ -1114,6 +1115,12 @@ static AVStream *icv_add_video_stream_FFMPEG(AVFormatContext *oc,
|
|||
|
||||
c->codec_type = AVMEDIA_TYPE_VIDEO;
|
||||
|
||||
// Set per-codec defaults
|
||||
AVCodecID c_id = c->codec_id;
|
||||
avcodec_get_context_defaults3(c, codec);
|
||||
// avcodec_get_context_defaults3 erases codec_id for some reason
|
||||
c->codec_id = c_id;
|
||||
|
||||
/* put sample parameters */
|
||||
int64_t lbit_rate = (int64_t)bitrate;
|
||||
lbit_rate += (bitrate / 2);
|
||||
|
@ -1176,6 +1183,16 @@ static AVStream *icv_add_video_stream_FFMPEG(AVFormatContext *oc,
|
|||
/* avoid FFMPEG warning 'clipping 1 dct coefficients...' */
|
||||
c->mb_decision=2;
|
||||
}
|
||||
/* Some settings for libx264 encoding, restore dummy values for gop_size
|
||||
and qmin since they will be set to reasonable defaults by the libx264
|
||||
preset system. Also, use a crf encode with the default quality rating,
|
||||
this seems easier than finding an appropriate default bitrate. */
|
||||
if (c->codec_id == AV_CODEC_ID_H264) {
|
||||
c->gop_size = -1;
|
||||
c->qmin = -1;
|
||||
c->bit_rate = 0;
|
||||
av_opt_set(c->priv_data,"crf","23", 0);
|
||||
}
|
||||
#if LIBAVCODEC_VERSION_INT>0x000409
|
||||
// some formats want stream headers to be seperate
|
||||
if(oc->oformat->flags & AVFMT_GLOBALHEADER)
|
||||
|
|
Загрузка…
Ссылка в новой задаче