On Tue, Sep 5, 2017 at 12:25 PM Rafal Lalik <rafalla...@gmail.com> wrote:
> Hi guys!
>
> I am new here but would like to put my 5 cents into development of
> kdenlive and mlt.
>
>
Thanks for considering to help.
>
> What I was seriously missing in kdenlive is typewriter effect. I know
> there was simple implementation in kdenlive but now is completely
> commented out, and I know that also mlt have some support for it, which
> is not used at the moment at all.
>
> So I put it in my hands and I decided to implement a such feature in my
> own kdenlive and mlt installations. Now I would like to propose you to
> include it into official code.
>
> Here you can find short demo what is the final effect of my code:
>
> https://www.youtube.com/watch?v=I8oyiy3YzBI
>
> There are three main parts of the feature:
>
> 1) My own library used to render the text. It provides kind of control
> sequences and macros which control rendering of the text per each frame.
> This library is available on github here:
>
> https://github.com/rlalik/TypeWriter
>
> and is required for my modifications of mlt.
>
> 2) Mlt was modified to use with the TypeWriter library. It uses
> information provided by kdenlivetitle producer, though additional
> information must be passed there. This is handled by kdenlive.
>
> I had to do some modifications in the kdenlive_wrapper.cpp like
> introduce DynamicTextItem class which derives from PlainTextItem and
> make small modifications (private to protected) for a few variables in
> PlainTextItem to avoid to big overhead.
>
>
Kdenlive maintains the kdenlivetitle producer and will need to approve it.
> 3) In kdenlive I extended the the xml format by special patterns. Since
> use of the control sequences in the dynamic text, usualy the text to
> render is very messy. Instead putting the text directly into the scene,
> you put a placeholder which is then replaced by proper text (this is
> done in mlt). Therefore I added fourth tab in the Title Clip widget
> which allows to add, remove and edit patterns.
>
> Since I didn't want to mess up to much with the original code, at the
> moment I created inherited classes for TitleWidget and TitleDocument
> (TypeWriterWidget and TypeWriterDocument accordingly) which handle it
> all. I had to also set two functions in TitleWidget to be virtual, and
> small changes in the bin.cpp.
>
>
>
> I would however suggest to make it more clean and actually add the
> implementation directly to the base classes and get rid of derived
> classes in kdenlive. This feature can be built in into kdenlivetitle,
> does not interfere with the old format, so all old clips will work as
> until now. Since all the logic with replacing placeholders wit patterns
> is done in mlt, the feature is completely transparent for kdenlive.
>
> In mlt there are two solutions:
> 1) either TypeWrite is an external dependency and mlt uses
> HADE_TYPEWRITER flag to decide whether compile in the code, or
> 2) put the library directly into mlt (just four files) but this will
> prevent use of current development.
>
Since it is a new and very niche project, I would include the source in MLT
and not worry about getting distros and app bundlers to package it.
> Anyway, TypeWriter is an optional (--enable-tw) feature and will not
> interfere with regular installation.
>
>
> To implement fully the feature one needs both kdenlive and mlt teams to
> agree for it.
>
> How does it work
> ---------------------------------------
>
> Inside the xml document I implemented new nodes having following scheme,
> e.g.:
>
> <kdenlivetitle ...>
> ...
> <patterns version="1">
> <pattern name="aaa">
> <text>E,x,a,m,p,l,e</text>
> ... additional fields possible in further versions
> </pattern>
> </patterns>
> </kdenlivetitle>
>
> The item part then looks following:
> <item ...><content>@{aaa}@</content></item>
>
> which in case that TW is not supported by mlt, will display just @{aaa}@
> in the rendered scene.
>
> If mlt uses TW, then 'aaa' will be replaced in consecutive frames with
> 'Example', letter by letter.
>
> So the patterns part can be implemented in kdenlive, and will be
> transparent for mlt, it will eventually not use.
>
>
> Modified code of kdenlive available here:
>
> https://github.com/rlalik/kdenlive_tw/tree/typewriter
>
> and of mlt:
>
> https://github.com/rlalik/mlt_tw/tree/typewriter
>
>
The biggest problem to review and approve the code in the mlt fork above is
that this initial commit to kdenlivetitle_wrapper.cpp
https://github.com/rlalik/mlt_tw/commit/894a656bd4885a0a461276b006c3cc4fa8a8518f
It mixes meaningful behavior changes with heavy code reformatting. You need
to try to clean that up. Your existing commit history on that branch is not
interesting. I suggest to squash all the changes together, and then try to
manually revert the formatting changes.
> Please tell me your though about it and how would you like to proceed. I
> can then eventually merge the code of derived classes in kdenlive into
> basic classes and present as a pull request. The code for mlt actually
> is already in its final state, could be already present as a pull request.
>
> Regards,
> Rafal
>
>
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Mlt-devel mailing list
Mlt-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mlt-devel