[FFmpeg-devel] [PATCH][RFC] variable frame sizes

Eric Buehl eric.buehl
Wed May 20 21:17:22 CEST 2009


On Wed, May 20, 2009 at 6:12 AM, Michael Niedermayer <michaelni at gmx.at>wrote:

> On Sat, May 16, 2009 at 11:07:58PM -0700, Eric Buehl wrote:
> > On Sat, May 16, 2009 at 9:40 PM, Eric Buehl <eric.buehl at gmail.com>
> wrote:
> >
> > > On Sat, May 16, 2009 at 2:40 AM, Michael Niedermayer <michaelni at gmx.at
> >wrote:
> > >
> > >> On Fri, May 15, 2009 at 09:47:00PM -0700, Eric Buehl wrote:
> > >> > On Fri, May 15, 2009 at 7:46 PM, Michael Niedermayer <
> michaelni at gmx.at
> > >> >wrote:
> > >> >
> > >> > > On Fri, May 15, 2009 at 04:44:14PM -0700, Eric Buehl wrote:
> > >> > > > On Fri, May 15, 2009 at 3:49 AM, Michael Niedermayer <
> > >> michaelni at gmx.at
> > >> > > >wrote:
> > >> > > >
> > >> > > > > On Thu, May 14, 2009 at 04:04:57PM -0700, Eric Buehl wrote:
> > >> > > > > > Hello,
> > >> > > > > >
> > >> > > > > > I submitted a bug a while back describing ffmpeg's failure
> to
> > >> account
> > >> > > for
> > >> > > > > > varying frame sizes in a single file.
> > >> > > > > > http://roundup.ffmpeg.org/roundup/ffmpeg/issue879  I have
> > >> confirmed
> > >> > > that
> > >> > > > > the
> > >> > > > > > sample referenced works as expected in mplayer so I do not
> > >> believe it
> > >> > > is
> > >> > > > > a
> > >> > > > > > problem with lavc/lavf.
> > >> > > > >
> > >> > > > > >  Attached is a patch that works for frames of
> > >> > > > > > varying height (possible if interlacing options are
> mis-used)
> > >> but it
> > >> > > does
> > >> > > > > > not account for changes in width.
> > >> > > > >
> > >> > > > > so its incomplete ...
> > >> > > > >
> > >> > > > > [...]
> > >> > > > >
> > >> > > > > >  ffmpeg.c |   20 ++++++++++++++++++++
> > >> > > > > >  1 file changed, 20 insertions(+)
> > >> > > > > > 726f5c891ba925ffb00806f43c935696105872ef
> > >> > > > >  dynamic_frame_height_adjust.patch
> > >> > > > > > Index: ffmpeg.c
> > >> > > > > >
> > >> ===================================================================
> > >> > > > > > --- ffmpeg.c  (revision 18831)
> > >> > > > > > +++ ffmpeg.c  (working copy)
> > >> > > > > > @@ -923,6 +923,26 @@
> > >> > > > > >      if (ost->video_resample) {
> > >> > > > > >          padding_src = NULL;
> > >> > > > > >          final_picture = &ost->pict_tmp;
> > >> > > > > > +     if(ost->resample_height != ist->st->codec->height)
> > >> > > > >
> > >> > > > > tabs and as this is under if (ost->video_resample)
> > >> > > > > i wonder if it works if thats false to begin with ...
> > >> > > > >
> > >> > > > >
> > >> > > > > > +        {
> > >> > > > >
> > >> > > > > inconsistant { placement
> > >> > > > >
> > >> > > > > [...]
> > >> > > > > --
> > >> > > > > Michael     GnuPG fingerprint:
> > >> 9FF2128B147EF6730BADF133611EC787040B0FAB
> > >> > > > >
> > >> > > > > Frequently ignored awnser#1 FFmpeg bugs should be sent to our
> > >> > > bugtracker.
> > >> > > > > User
> > >> > > > > questions about the command line tools should be sent to the
> > >> > > ffmpeg-user
> > >> > > > > ML.
> > >> > > > > And questions about how to use libav* should be sent to the
> > >> libav-user
> > >> > > ML.
> > >> > > > >
> > >> > > > > -----BEGIN PGP SIGNATURE-----
> > >> > > > > Version: GnuPG v1.4.9 (GNU/Linux)
> > >> > > > >
> > >> > > > >
> iD8DBQFKDUioYR7HhwQLD6sRAr9nAJ45hYRJiRqxjsz1xAAP+Svzqp+3EgCaA8pO
> > >> > > > > /DWK54Yie4eBCADbqVumAJM=
> > >> > > > > =R+EA
> > >> > > > > -----END PGP SIGNATURE-----
> > >> > > >
> > >> > > >
> > >> > > > > _______________________________________________
> > >> > > > > ffmpeg-devel mailing list
> > >> > > > > ffmpeg-devel at mplayerhq.hu
> > >> > > > > https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel
> > >> > > > >
> > >> > > >
> > >> > > >
> > >> > > > Here is an updated patch.  I have add a more correct comparison
> > >> (which
> > >> > > > includes frame top/bottom bands) as well as formatting clean-up.
>  It
> > >> also
> > >> > > > checks for changes in width in the same fashion.
> > >> > >
> > >> > > i tried it with a 100x100 + 200x200 mpg concatenated, but it did
> not
> > >> work
> > >> > > just heavy artifacts
> > >> > >
> > >> > > [...]
> > >> > > --
> > >> > > Michael     GnuPG fingerprint:
> > >> 9FF2128B147EF6730BADF133611EC787040B0FAB
> > >> > >
> > >> > > Democracy is the form of government in which you can choose your
> > >> dictator
> > >> > >
> > >> > > -----BEGIN PGP SIGNATURE-----
> > >> > > Version: GnuPG v1.4.9 (GNU/Linux)
> > >> > >
> > >> > > iD8DBQFKDij0YR7HhwQLD6sRAuwRAJ4ycSjn8ajfMyHg7vXdC7fDg+U8lACeI5Pf
> > >> > > AeEgbvYibsIkk5TCybRYU9I=
> > >> > > =H+W4
> > >> > > -----END PGP SIGNATURE-----
> > >> > >
> > >> > > _______________________________________________
> > >> > > ffmpeg-devel mailing list
> > >> > > ffmpeg-devel at mplayerhq.hu
> > >> > > https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel
> > >> > >
> > >> >
> > >> > I was not able to reproduce this as you describe with a 100x100 mpg
> > >> catted
> > >> > with a 200x200 mpg.  Can you send me your test file and/or the steps
> to
> > >> > produce it?
> > >>
> > >> ./ffmpeg -i matrixbench_mpeg2.mpg -s 100x100 -t 1 m100100.mpg
> > >> ./ffmpeg -i matrixbench_mpeg2.mpg -s 200x200 -t 1 m200200.mpg
> > >> cat m100100.mpg m200200.mpg >m.mpg
> > >> ./ffmpeg -i m.mpg n.mpg
> > >>
> > >> [...]
> > >> --
> > >> Michael     GnuPG fingerprint:
> 9FF2128B147EF6730BADF133611EC787040B0FAB
> > >>
> > >> it is not once nor twice but times without number that the same ideas
> make
> > >> their appearance in the world. -- Aristotle
> > >>
> > >> -----BEGIN PGP SIGNATURE-----
> > >> Version: GnuPG v1.4.9 (GNU/Linux)
> > >>
> > >> iD8DBQFKDooGYR7HhwQLD6sRAkmKAKCHsxSw7rmBFAV+/aPZWNWd3tOOFACfeep/
> > >> M28rhl94MsvtPESLjNyDLgY=
> > >> =oNWX
> > >> -----END PGP SIGNATURE-----
> > >>
> > >> _______________________________________________
> > >> ffmpeg-devel mailing list
> > >> ffmpeg-devel at mplayerhq.hu
> > >> https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel
> > >>
> > >
> > >
> > > I understand now.  Correct, this does not touch the code path for the
> patch
> > > I have written because resampling is not explicitly requested by using
> the
> > > -s option.  However, the intent of this patch is only to ensure that
> when
> > > resamping is requested, the output meets the requested frame size.  The
> > > example you have given does not request resizing and I am not sure what
> the
> > > correct functionality should be in this case.  Is this suitable for
> > > integration as is?
> > >
> > > Eric
> > >
> > >
> > Here is another update to account for left and right banding.
>
> does the code also work if there are 2 or more video streams?
>
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Many that live deserve death. And some that die deserve life. Can you give
> it to them? Then do not be too eager to deal out death in judgement. For
> even the very wise cannot see all ends. -- Gandalf
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
>
> iD8DBQFKFAGhYR7HhwQLD6sRAi6SAJ4pky6gV+7YpthNyOTcJzBuTx1UMwCePGCg
> r8M9k0WCo8cwWcexraZ0DQg=
> =NSvj
> -----END PGP SIGNATURE-----
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at mplayerhq.hu
> https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel
>


Yes.

$ ./ffmpeg -i last30x2.mov -s 200x200 out.mp4 -newvideo
FFmpeg version SVN-r18828, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --enable-pthreads --enable-libfaac --enable-libx264
--enable-decoders --enable-gpl --enable-libfaad --enable-nonfree
  libavutil     50. 3. 0 / 50. 3. 0
  libavcodec    52.29. 0 / 52.29. 0
  libavformat   52.32. 0 / 52.32. 0
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0. 7. 1 /  0. 7. 1
  built on May 20 2009 12:08:25, gcc: 4.3.2 20081105 (Red Hat 4.3.2-7)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'last30x2.mov':
  Duration: 00:00:22.10, start: 0.000000, bitrate: 9506 kb/s
    Stream #0.0(eng): Video: mjpeg, yuvj422p, 640x360 [PAR 72:72 DAR 16:9],
23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0.1(eng): Video: mjpeg, yuvj422p, 640x360 [PAR 72:72 DAR 16:9],
23.98 tbr, 23.98 tbn, 23.98 tbc
File 'out.mp4' already exists. Overwrite ? [y/N] y
Output #0, mp4, to 'out.mp4':
    Stream #0.0(eng): Video: mpeg4, yuv420p, 200x200 [PAR 16:9 DAR 16:9],
q=2-31, 200 kb/s, 2997 tbn, 23.98 tbc
    Stream #0.1(eng): Video: mpeg4, yuv420p, 200x200 [PAR 16:9 DAR 16:9],
q=2-31, 200 kb/s, 2997 tbn, 23.98 tbc
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
frame=  291 fps=152 q=2.0 Lq=2.0 size=     864kB time=12.14 bitrate=
583.1kbits/s


In this sample, each input stream changes frame size at a different time
while the other is correctly left unaffected.



More information about the ffmpeg-devel mailing list