[FFmpeg-cvslog] avconv: allow -b to be used with streamcopy
Anton Khirnov
git at videolan.org
Tue Sep 26 21:45:20 EEST 2017
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Mon Jan 30 21:35:42 2017 +0100| [b420a27e74750b60d2e064236afb10be06a38ace] | committer: Anton Khirnov
avconv: allow -b to be used with streamcopy
In this mode it tells the muxer about the bitrate of the input stream.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b420a27e74750b60d2e064236afb10be06a38ace
---
avconv.c | 3 +++
avconv.h | 5 +++++
avconv_opt.c | 11 +++++++++++
doc/avconv.texi | 7 +++++++
4 files changed, 26 insertions(+)
diff --git a/avconv.c b/avconv.c
index fe606250fe..94b6da2a8b 100644
--- a/avconv.c
+++ b/avconv.c
@@ -1852,6 +1852,9 @@ static int init_output_stream_streamcopy(OutputStream *ost)
ost->st->time_base = ist->st->time_base;
+ if (ost->bitrate_override)
+ par_dst->bit_rate = ost->bitrate_override;
+
if (ist->st->nb_side_data) {
ost->st->side_data = av_realloc_array(NULL, ist->st->nb_side_data,
sizeof(*ist->st->side_data));
diff --git a/avconv.h b/avconv.h
index 6360f76c0b..3c3f0ef659 100644
--- a/avconv.h
+++ b/avconv.h
@@ -162,6 +162,8 @@ typedef struct OptionsContext {
int nb_sample_fmts;
SpecifierOpt *qscale;
int nb_qscale;
+ SpecifierOpt *bitrates;
+ int nb_bitrates;
SpecifierOpt *forced_key_frames;
int nb_forced_key_frames;
SpecifierOpt *force_fps;
@@ -382,6 +384,9 @@ typedef struct OutputStream {
int forced_kf_index;
char *forced_keyframes;
+ // the bitrate to send to the muxer for streamcopy
+ int bitrate_override;
+
char *logfile_prefix;
FILE *logfile;
diff --git a/avconv_opt.c b/avconv_opt.c
index 8b43f0f4e2..e078a0b89d 100644
--- a/avconv_opt.c
+++ b/avconv_opt.c
@@ -952,6 +952,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
const char *bsfs = NULL;
char *next, *codec_tag = NULL;
double qscale = -1;
+ int bitrate = 0;
if (!st) {
av_log(NULL, AV_LOG_FATAL, "Could not alloc stream.\n");
@@ -1091,6 +1092,14 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
ost->enc_ctx->global_quality = FF_QP2LAMBDA * qscale;
}
+ MATCH_PER_STREAM_OPT(bitrates, i, bitrate, oc, st);
+ if (bitrate > 0) {
+ if (ost->stream_copy)
+ ost->bitrate_override = bitrate;
+ else
+ ost->enc_ctx->bit_rate = bitrate;
+ }
+
ost->max_muxing_queue_size = 128;
MATCH_PER_STREAM_OPT(max_muxing_queue_size, i, ost->max_muxing_queue_size, oc, st);
ost->max_muxing_queue_size *= sizeof(AVPacket);
@@ -2570,6 +2579,8 @@ const OptionDef options[] = {
{ "qscale", HAS_ARG | OPT_EXPERT | OPT_DOUBLE |
OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(qscale) },
"use fixed quality scale (VBR)", "q" },
+ { "b", HAS_ARG | OPT_INT | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(bitrates) },
+ "set stream bitrate in bits/second", "bitrate" },
{ "filter", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(filters) },
"set stream filterchain", "filter_list" },
{ "filter_script", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(filter_scripts) },
diff --git a/doc/avconv.texi b/doc/avconv.texi
index 002dba3184..6f1fbc79b2 100644
--- a/doc/avconv.texi
+++ b/doc/avconv.texi
@@ -354,6 +354,13 @@ Stop writing to the stream after @var{framecount} frames.
Use fixed quality scale (VBR). The meaning of @var{q} is
codec-dependent.
+ at item -b[:@var{stream_specifier}] @var{bitrate} (@emph{output,per-stream})
+Set the stream bitrate in bits per second. When transcoding, this tells the
+encoder to use the specified bitrate for the encoded stream.
+
+For streamcopy, this provides a hint to the muxer about the bitrate of the input
+stream.
+
@item -filter[:@var{stream_specifier}] @var{filter_graph} (@emph{output,per-stream})
@var{filter_graph} is a description of the filter graph to apply to
the stream. Use @code{-filters} to show all the available filters
More information about the ffmpeg-cvslog
mailing list