[FFmpeg-devel] Rendering text-based subtitles

JULIAN GARDNER joolzg at btinternet.com
Sat Jun 4 15:13:03 CEST 2011





----- Original Message -----
> From: JULIAN GARDNER <joolzg at btinternet.com>
> To: FFmpeg development discussions and patches <ffmpeg-devel at ffmpeg.org>
> Cc: 
> Sent: Saturday, 28 May 2011, 2:55
> Subject: Re: [FFmpeg-devel] Rendering text-based subtitles
> 
> 
> 
> 
>> ________________________________
>> From: Chris Burel <chrisburel at gmail.com>
>> To: ffmpeg-devel at ffmpeg.org
>> Sent: Saturday, 28 May 2011, 2:51
>> Subject: [FFmpeg-devel] Rendering text-based subtitles
>> 
>> I'm interested in getting support for rendering text based subtitles, 
> like
>> ass and srt.  This would be useful for encoding text-based subtitles to
>> xsub.  I've hacked in a patch to get this to work using libass, but I 
> had to
>> do some things that seem wrong to get it to work.  I'm writing this to 
> start
>> the process of cleaning up this patch so it can be merged in.
>> 
>> Here's some of the problems I faced:
>> Since I'm mainly concerned with playing the result of this process on 
> the
>> PS3, I was mainly concerned with getting the xsub encoder to work.  On my
>> first pass, I put the rendering code into the xsub encoder.  This proved to
>> be problematic for a couple of reasons.  #1, it seemed wrong to have the
>> xsub encoder know about how to render ass subtitles.  #2, ass allows 
> events'
>> timecodes to overlap, but the PS3 doesn't.  So for example, let's 
> say two
>> ass events overlap.  xsub encode needs to adjust the end time of the first
>> event to be just before the begin time of the next one.  But the encoder
>> doesn't have access to the next event yet, so it can't do that.  To 
> solve
>> these issues, I moved the rendering code into the decoder of the ass
>> subtitles.  The first problem I encountered here is that the decoder 
> doesn't
>> know the output resolution (which libass needs to know).  So right now I
>> have a resolution hard-coded in the decoder, which is terrible.  But less
>> terrible than not having subtitles if they're timecodes overlap.
>> 
>> Another problem is that I had to make an addition to a struct in the libass
>> library that breaks its ABI.  The author of that library didn't want to
>> include my patch because of this.  The change is relatively small, but still
>> requires adding some fields to a struct.  I created a bug/issue report for
>> this on the libass google code page:
>> http://code.google.com/p/libass/issues/detail?id=31
>> 
>> A couple questions:
>> Is this a feature that the maintainers of ffmpeg would like to see merged
>> in?
>> Where does the rendering code really belong?  In the ass decoder?  In the
>> ass encoder?  Somewhere else entirely?
>> Is linking in libass a problem?
>> 
>> I wasn't planning on posting the patch yet, because this is my first 
> time
>> coding in ffmpeg and I don't want to embarrass myself :-).  But if none 
> of
>> my questions make sense without seeing some code, then I'll post it.
>> 
>> Thanks,
>> -Chris
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>> 
>> 
> I would be happy to help on this but im looking to render dvbsubs as hard 
> subtitles.
> 
> I have a similar problem to you but in my case i get a start time and timeout, 
> in case of a loss of stream or corruption.
> 
> I fixed the decoder/encoder and now can make a ts with dvbsubs that work so was 
> looking at now adding in hard subs,
> 
> Let me know if your interested in joining forces to get this working for all 
> streams.
> 
> To the ffmpeg guys is there a way or an idea how to do something along the lines 
> of "decode ass/xsub/srt" subtitles and "encode dvbsubs", as 
> we only have -scodec
> 
> joolz
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

Any more info, code Chris?

Also can anyone tell me of a "good" way of stopping the teletext being passed on to the output system once i have rendered them to the video.

At the moment the code would put the subs on the screen AND then still be added to the outgoing stream, so how do i stop this from happening?

joolz


More information about the ffmpeg-devel mailing list