diff --git a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c index d6ba35013..c2550905e 100644 --- a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c @@ -526,7 +526,14 @@ static void create_audio_stream(struct ffmpeg_mux *ffm, int idx) const char *name = ffm->params.acodec; int channels; - const AVCodecDescriptor *codec = avcodec_descriptor_get_by_name(name); + const AVCodecDescriptor *codec_desc = + avcodec_descriptor_get_by_name(name); + if (!codec_desc) { + fprintf(stderr, "Couldn't find codec descriptor '%s'\n", name); + return; + } + + const AVCodec *codec = avcodec_find_encoder(codec_desc->id); if (!codec) { fprintf(stderr, "Couldn't find codec '%s'\n", name); return; @@ -547,14 +554,17 @@ static void create_audio_stream(struct ffmpeg_mux *ffm, int idx) context = avcodec_alloc_context3(NULL); context->codec_type = codec->type; context->codec_id = codec->id; - context->bit_rate = (int64_t)ffm->audio[idx].abitrate * 1000; + if (!(codec_desc->props & AV_CODEC_PROP_LOSSLESS)) + context->bit_rate = (int64_t)ffm->audio[idx].abitrate * 1000; + channels = ffm->audio[idx].channels; #if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(57, 24, 100) context->channels = channels; #endif context->sample_rate = ffm->audio[idx].sample_rate; - context->frame_size = ffm->audio[idx].frame_size; - context->sample_fmt = AV_SAMPLE_FMT_S16; + if (!(codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) + context->frame_size = ffm->audio[idx].frame_size; + context->time_base = stream->time_base; context->extradata = extradata; context->extradata_size = ffm->audio_header[idx].size;