[FFmpeg-user] Duplicates frames when converting interlaced h264 to png frames and double length when converting interlaced .png to interlaced mp4

Mark Himsley mark at mdsh.com
Sun Nov 20 22:56:33 CET 2011


On 18/11/2011 21:39, Lionel Trésaugues wrote:
> Dear FFmpeg users,
>
> I am currently encountering two major problems during my video-editing
> process (I am running the 64bits edition of Ubuntu Linux 11.10). My
> camcorder (Panasonic HDC-SD60) shots 1080/50i (AVCHD in a mts
> container).
>
> First problem)
>
> I want, in a first step, to convert the .mts into a sequence of .png
> frames while preserving the interlacing.
>
> To do so, I used the following FFmpeg command-line:
>
> ffmpeg -i 00030.MTS -an -vcodec png -r 50 -flags +ilme+ildct+mv4+aic
> -top 1 -qscale 1 -s 1920x1080 -sameq 00030%05d.png
>
> Then for a 2min21sec long .mts movie, ffmpeg produces 7080 frames each
> of them clearly showing signs of interlacing (which was the expected
> result) (and 7080/50=2min21sec).
>
> But, indeed, two consecutive frames are absolutely identical (e.g
> frames 1 and 2 are identical, 3 and 4 are identical, 5 and 6, etc..)

I suspect you are mistaken in your thinking of what 1080/50i means.
Unless I am very much mistaken, and your description backs me up on 
this, your camera is actually shooting 25 interlaced frames per second. 
That is 50 interlaced fields per second, which is why some manufacturers 
write 50i. And since 50 is twice as many as 25 it's got to be better.

This really gets my goat. To quote Wikipedia, so it must be right:

The European Broadcasting Union (EBU) prefers to use the resolution and 
frame rate (not field rate) separated by a slash, as in 1080i/30 and 
1080i/25, likewise 480i/30 and 576i/25.[1] Resolutions of 1080i60 or 
1080i50 often refers to 1080i/30 or 1080i/25 in EBU notation.


http://en.wikipedia.org/wiki/1080i

So, try -r 25. I think that will give you 25 interlaced frames, each 
being unique.

HTH.


> When I try to do the same process using avisynth and VirtualDub (on
> windows), while using this avisynth script :
> DirectShowSource("E:\00030.MTS").AssumeTFF().DoubleWeave()
> I, then obtain once again 7080 interlaced png frames but this time
> they all are different.
>
> So, first question, how would I be able to produce the same results
> with ffmpeg ?
>
> Second problem)
>
> Then, I want to convert the interlaced png frames (ideally after
> processing in Blender) and merge them with an audio track into a mp4
> container and still want to preserve the interlacing.
>
> I used the following command-line :
>
> ffmpeg -threads 2 -i %05d.png -i audio.aac -qscale 1 -vcodec mpeg4
> -acodec copy -minrate 0 -b 50000k -mbd 2 -trellis 2 -cmp 2 -subcmp 2
> -g 300 -r 50 -flags +ilme+ildct+mv4+aic -top 1 -f mp4 00030.mp4
>
> And I obtain a slow-motion interlaced movie which lasts twice the
> duration of the initial footage. The problem is the same whether I use
> the 7080 frames produced by ffmpeg (containing duplicates) or the 7080
> frames (without duplicates) produced by VirtualDub.
>
> How would I be able to use the sequence of .png frames to produce an
> interlaced movie (50i) in a mp4 container correctly ?
>
> Thanks a lot for your suggestions
>
[...]

-- 
Mark


More information about the ffmpeg-user mailing list