h264section: set min bit rate on target file size

This commit is contained in:
itsmattkc
2021-04-06 12:38:31 +10:00
parent 4066fcba90
commit 57ddae8920
4 changed files with 23 additions and 1 deletions
+12
View File
@@ -45,6 +45,7 @@ void Encoder::WriteAudio(AudioParams pcm_info, const QString &pcm_filename)
EncodingParams::EncodingParams() :
video_enabled_(false),
video_bit_rate_(0),
video_min_bit_rate_(0),
video_max_bit_rate_(0),
video_buffer_size_(0),
video_threads_(0),
@@ -82,6 +83,11 @@ void EncodingParams::set_video_bit_rate(const int64_t &rate)
video_bit_rate_ = rate;
}
void EncodingParams::set_video_min_bit_rate(const int64_t &rate)
{
video_min_bit_rate_ = rate;
}
void EncodingParams::set_video_max_bit_rate(const int64_t &rate)
{
video_max_bit_rate_ = rate;
@@ -132,6 +138,11 @@ const int64_t &EncodingParams::video_bit_rate() const
return video_bit_rate_;
}
const int64_t &EncodingParams::video_min_bit_rate() const
{
return video_min_bit_rate_;
}
const int64_t &EncodingParams::video_max_bit_rate() const
{
return video_max_bit_rate_;
@@ -193,6 +204,7 @@ void EncodingParams::Save(QXmlStreamWriter *writer) const
writer->writeTextElement(QStringLiteral("timebase"), video_params_.time_base().toString());
writer->writeTextElement(QStringLiteral("divider"), QString::number(video_params_.divider()));
writer->writeTextElement(QStringLiteral("bitrate"), QString::number(video_bit_rate_));
writer->writeTextElement(QStringLiteral("minbitrate"), QString::number(video_max_bit_rate_));
writer->writeTextElement(QStringLiteral("maxbitrate"), QString::number(video_max_bit_rate_));
writer->writeTextElement(QStringLiteral("bufsize"), QString::number(video_buffer_size_));
writer->writeTextElement(QStringLiteral("threads"), QString::number(video_threads_));
+3
View File
@@ -48,6 +48,7 @@ public:
void set_video_option(const QString& key, const QString& value);
void set_video_bit_rate(const int64_t& rate);
void set_video_min_bit_rate(const int64_t& rate);
void set_video_max_bit_rate(const int64_t& rate);
void set_video_buffer_size(const int64_t& sz);
void set_video_threads(const int& threads);
@@ -60,6 +61,7 @@ public:
const VideoParams& video_params() const;
const QHash<QString, QString>& video_opts() const;
const int64_t& video_bit_rate() const;
const int64_t& video_min_bit_rate() const;
const int64_t& video_max_bit_rate() const;
const int64_t& video_buffer_size() const;
const int& video_threads() const;
@@ -92,6 +94,7 @@ private:
VideoParams video_params_;
QHash<QString, QString> video_opts_;
int64_t video_bit_rate_;
int64_t video_min_bit_rate_;
int64_t video_max_bit_rate_;
int64_t video_buffer_size_;
int video_threads_;
+4
View File
@@ -517,6 +517,10 @@ bool FFmpegEncoder::InitializeStream(AVMediaType type, AVStream** stream_ptr, AV
codec_ctx->bit_rate = params().video_bit_rate();
}
if (params().video_min_bit_rate() > 0) {
codec_ctx->rc_min_rate = params().video_min_bit_rate();
}
if (params().video_max_bit_rate() > 0) {
codec_ctx->rc_max_rate = params().video_max_bit_rate();
}
+4 -1
View File
@@ -82,15 +82,17 @@ void H264Section::AddOpts(EncodingParams *params)
} else {
int64_t target_rate, max_rate;
int64_t target_rate, max_rate, min_rate;
if (method == kTargetBitRate) {
// Use user-supplied values for the bit rate
target_rate = bitrate_section_->GetTargetBitRate();
min_rate = 0;
max_rate = bitrate_section_->GetMaximumBitRate();
} else {
// Calculate the bit rate from the file size divided by the sequence length in seconds (bits per second)
target_rate = qRound64(static_cast<double>(filesize_section_->GetFileSize()) / params->GetExportLength().toDouble());
min_rate = target_rate;
max_rate = target_rate;
}
@@ -98,6 +100,7 @@ void H264Section::AddOpts(EncodingParams *params)
params->set_video_option(QStringLiteral("crf"), QStringLiteral("-1"));
params->set_video_bit_rate(target_rate);
params->set_video_min_bit_rate(min_rate);
params->set_video_max_bit_rate(max_rate);
params->set_video_buffer_size(2000000);