[FFmpeg-devel] [PATCH 2/3] ffmpeg.c: refine picking default video stream

Michael Niedermayer michael at niedermayer.cc
Wed Oct 14 22:24:22 EEST 2020


On Wed, Oct 14, 2020 at 02:26:51PM -0300, James Almer wrote:
> On 10/14/2020 2:09 PM, Michael Niedermayer wrote:
> > On Wed, Oct 14, 2020 at 10:53:10AM +0200, Anton Khirnov wrote:
> >> Use a floating-point score value to take into account bitrate, when
> >> multiple streams with the same resolution are present.
> >>
> >> Stop accessing private AVStream.codec_info_nb_frames field, as the
> >> sample in question
> >> http://samples.ffmpeg.org/ffmpeg-bugs/trac/ticket2639/Thailand-Wave.wmv
> >> is now handled by the above change.
> >> ---
> >>  fftools/ffmpeg_opt.c | 23 ++++++++++++++++++-----
> >>  1 file changed, 18 insertions(+), 5 deletions(-)
> > 
> > Breaks:
> > -i tickets/4496/08_lect_01.rm  file.avi
> > 
> > as refernce here is what ffmpeg shows about the streams:
> >     Stream #0:0: Audio: sipr (sipr / 0x72706973), 8000 Hz, mono, flt, 4 kb/s
> >     Stream #0:1: Audio: sipr (sipr / 0x72706973), 8000 Hz, mono, flt, 8 kb/s
> >     Stream #0:2: Audio: cook (cook / 0x6B6F6F63), 22050 Hz, mono, fltp, 4 kb/s
> >     Stream #0:3: Audio: sipr (sipr / 0x72706973), 8000 Hz, mono, flt, 4 kb/s
> >     Stream #0:4: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 252 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
> >     Stream #0:5: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 252 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
> >     Stream #0:6: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 252 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
> >     Stream #0:7: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 252 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
> >     Stream #0:8: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 252 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
> >     Stream #0:9: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 252 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
> >     Stream #0:10: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 252 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
> >     Stream #0:11: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 252 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
> >     Stream #0:12: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 252 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
> >     Stream #0:13: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 252 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
> > 
> > sample should be here according to the ticket:
> > https://samples.ffmpeg.org/ffmpeg-bugs/trac/ticket2152/
> > 
> > I dont think you can reliably detect non empty streams from the header alone
> > in every case.
> > 
> > thx
> 
> This whole chunk of code is apparently done because
> av_find_best_stream() can't be used here (The list of input streams is
> in a custom struct InputStream instead of an AVFormatContext).
> codec_info_nb_frames is evidently needed to detect non-empty streams, so
> either making it or a replacement public or hand crafting a dummy
> AVFormatContext with the input streams then using av_find_best_stream()
> are two options for this.
> 
> I personally think the latter option is a good solution.
> av_find_best_stream() does not seem to care about its contents beyond
> nb_streams and the streams list.

or a av_multi_fmt_find_best_stream() which isnt limited to one AVFormatContext.

thx

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Opposition brings concord. Out of discord comes the fairest harmony.
-- Heraclitus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20201014/5eaf1c1f/attachment.sig>


More information about the ffmpeg-devel mailing list