Re: [LAU] [OT] a sorting problem with AVSynthesis and mencoder

From: Paul Winkler <pw_lists@email-addr-hidden>
Date: Tue Nov 27 2007 - 16:44:02 EET

On Tue, Nov 27, 2007 at 07:01:11AM -0500, Dave Phillips wrote:
> Greetings,
>
> I use the following command to invoke mencoder to compile a series of
> TGA image files into an animation :
>
> mencoder -ovc lavc -lavcopts vcodec=mpeg4:vme=1:keyint=30:vbitrate=1000
> -vf scale=800:600 -noskip -mf type=tga:fps=30 -o avs-001.avi mf://*.tga
>
>
> (Sorry about the line breaks.)
>
> The problem starts with the "mf://*.tga" part of the command. When the
> AVSynthesis program creates its TGA images it saves and labels them
> sequenctially, i.e. 1.tga, 2.tga, 3.tga and so on, as expected. The
> problem is that mencoder reads the files as they would be returned by a
> plain ls command, i.e. 1.tga, 10.tga, 100.tga, 1000.tga, 1001.tga
> ...101.tga, 1010.tga, thus interpolating frames out of their correct order.

sort(1) combined with xargs(1) should do the trick. Try this:

ls *tga | sort -n | xargs mencoder -ovc lavc -lavcopts vcodec=mpeg4:vme=1:keyint=30:vbitrate=1000 -vf scale=800:600 -noskip -mf type=tga:fps=30 -o avs-001.avi

> So, my question is, how do I get mencoder to read the TGA files by their
> time of creation ? That should do the trick, yes ?

To get most recent files last, you could do:

ls -rt *tga | xargs mencoder ...

but I'd stick with sort -n instead, because if you accidentally touch
a file in the middle, it will move to the end of the list...

> Otherwise I have to
> separate the single digit files from the double digit files and so
> forth, then I have to create and join separate AVIs. Not terribly
> difficult, just really annoying and time-consuming.

Or you could use rename(1). For example:

pw@email-addr-hidden namegunk $ ls
0.tga 11.tga 13.tga 15.tga 17.tga 19.tga 2.tga 4.tga 6.tga
8.tga
10.tga 12.tga 14.tga 16.tga 18.tga 1.tga 3.tga 5.tga 7.tga
9.tga
pw@email-addr-hidden namegunk $ rename "" 0 ?.tga
pw@email-addr-hidden namegunk $ ls
00.tga 02.tga 04.tga 06.tga 08.tga 10.tga 12.tga 14.tga 16.tga
18.tga
01.tga 03.tga 05.tga 07.tga 09.tga 11.tga 13.tga 15.tga 17.tga
19.tga
pw@email-addr-hidden namegunk $ rename "" 0 ??.tga
pw@email-addr-hidden namegunk $ ls
000.tga 003.tga 006.tga 009.tga 012.tga 015.tga 018.tga
001.tga 004.tga 007.tga 010.tga 013.tga 016.tga 019.tga
002.tga 005.tga 008.tga 011.tga 014.tga 017.tga

... repeat as necessary.

Having done that, your original comand should work.

-- 
Paul Winkler
http://www.slinkp.com
_______________________________________________
Linux-audio-user mailing list
Linux-audio-user@email-addr-hidden
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-user
Received on Tue Nov 27 20:15:02 2007

This archive was generated by hypermail 2.1.8 : Tue Nov 27 2007 - 20:15:02 EET