[theora-dev] Theora encoding in FFmpeg

Paul Richards paul.richards at gmail.com
Sat Dec 30 09:53:27 PST 2006


(Cross posted to theora-dev at xiph.org and ffmpeg-devel at mplayerhq.hu)

I am working towards adding Theora encoding support to libavcodec in
FFmpeg.  I am doing this by simply calling libtheora from libavcodec.

I am at the point where I can execute:
"./ffmpeg -v 100 -i test.wmv -f avi -an -vcodec theora -b 1000000 -y test.avi"
I get some whirring and an output file written.  My calls to libtheora
are succeeding, and I am copying the ogg_packet structures returned by
libtheora back to ffmpeg..  :)

When I attempt to decode my file with this command:
"./ffmpeg -v 100 -i test.avi -f avi -an -vcodec mjpeg -b 10000000 -y test2.avi"

I get output like so:

...
Input #0, avi, from 'test.avi':
  Duration: 00:00:07.4, start: 0.000000, bitrate: 694 kb/s
  Stream #0.0, 1/15: Video: theora, yuv420p, 320x240, 1/15, 15.00 fps(r)
Output #0, avi, to 'test2.avi':
  Stream #0.0, 1/90000: Video: mjpeg, yuvj420p, 320x240, 1/15, q=2-31,
10000 kb/s, 15.00 fps(c)
Stream mapping:
  Stream #0.0 -> #0.0
[theora @ 0x3c9554]Invalid extradata!
[theora @ 0x3c9554]Unknown Theora config packet: 50
[theora @ 0x3c9554]4376 bits left in packet 32
Press [q] to stop encoding
1656240 dezicycles in init_frame, 1 runs, 0 skips
1537800 dezicycles in unpack_superblocks, 1 runs, 0 skips
...

FFmpeg exits cleanly but test2.avi has nonsense.  Clearly the VP3
decoder (which ffmpeg uses for theora decoding) does not understand my
stream.  I am not sure if the problem is just my extradata, or if my
entire stream is borked.

To describe my ogg_packet conversion..  I first copied the code used
in oggvorbis.c which calls to av_xiphlacing etc to concatenate the
header ogg_packet structs to the extradata field.  This gives the
error above.  Next I tried concatenating just the raw contents of the
ogg_packet structs, and not performing any *xiph*() things.  This
failed just as miserably:

...
[theora @ 0x3c9554]Unknown Theora config packet: 50
[theora @ 0x3c9554]188016 bits left in packet B2
Press [q] to stop encoding
1636920 dezicycles in init_frame, 1 runs, 0 skips
1518600 dezicycles in unpack_superblocks, 1 runs, 0 skips
...


Can anyone help me with this problem?  I am happy to post source code
(currently < 200 lines), or my entire svn diff.  I am not sure if this
would be welcome on these mailing lists.


-- 
Paul Richards


More information about the theora-dev mailing list