Small FFmpeg Tasks
This page contains ideas for small, relatively simple tasks for the FFmpeg project. People who might be interested in trying one of these tasks:
- Someone who wants to contribute to FFmpeg and needs to find a well-defined task to start with
- Someone who wishes to qualify for one of FFmpeg's coveted Summer of Code project slots
- An existing FFmpeg developer who has been away from the project for a while and needs a smaller task as motivation for re-learning the codebase
For other tasks of varying difficulty, see the Interesting Patches page.
If you would like to work on one of these tasks, please take these steps:
- Subscribe to the FFmpeg development mailing list and indicate your interest
- Ask Multimedia Mike for a Wiki account so you can claim your task on this Wiki
If you would like to add to this list, please be prepared to explain some useful details about the task. Excessively vague tasks with no supporting details will be ruthlessly deleted.
The FFmpeg project always needs people to do the following tasks:
- Review bugs on the FFmpeg bug tracker
- verifying bugreports are complete with 'ffmpeg -i' output
- making sure samples are mirrored/available
- verifying bugs against current git master
- Review patches posted to ffmpeg-devel mailing list
- also test to make sure they compile against git master and dont break 'make fate' / compilation
- Review documentation and update examples in documentation.
- updating and adding more information to the howto and api documents
- make a guide how to embed ffmpeg into various programming languages, be it c++, java, mono, c#, etc
Finish up a previous incomplete SoC project
Several SoC projects from previous years have not yet made it into FFmpeg. Taking any of them and finishing them up to the point that they can be included should make for a good qualification task. Check out the FFmpeg Summer Of Code overview page and look for the unfinished projects, like the TS muxer.
Add code to validate get_buffer usage of decoders
Change the default_get_buffer etc. functions to enforce the minimum guarantees the decoder requests. E.g. if a decoder does not set FF_BUFFER_HINTS_READABLE, return a buffer without read permissions (using e.g. mprotect). If the decoder does not use reget_buffer, always return a buffer initialized with random data. If the decoder does not set FF_BUFFER_HINTS_PRESERVE, always destroy the buffer contents as soon as possible. Make reget_buffer always fail if FF_BUFFER_HINTS_REUSABLE was not used. Probably more things that could be done.
Generic Colorspace system
This task involves adding support more than 8 bits per component (Y on 10 bits, U on 10 bits, V on 10 bits for example) and generic simple conversion to other colorspaces.
Does this have to do with revising FFmpeg's infrastructure? If so, then it doesn't feel like a qualification task. If it's something simpler, then the vague description does not convey that simplicity. Please expound. --Multimedia Mike 12:56, 25 February 2008 (EST)
I don't think so, extending PixFmt to extended structure with finegrained description like depth, range values, colorspace, sample period, and write generic simple conversion from all formats to all others, like suggested by Michael on the mailing list. Conversion routine can be a good qualification task for video encoders/decoders. What do you think ? --Baptiste Coudurier 00:30, 29 February 2008 (EST)
Extend GIF Encoder and Decoder to support Animated GIFs
Implement a Vivo demuxer
This task corresponds to ticket 132: https://avcodec.org/trac/ffmpeg/ticket/132
I am ready to help out with understanding MPlayer's demuxer, esp. MPlayer API stuff if necessary. --Reimar 15:46, 1 March 2008 (EST)
Port missing demuxers from MPlayer
MPlayer supports a few container formats in libmpdemux that are not yet present in libavformat. Porting them over and gettting them relicensed as LGPL or reimplementing them from scratch should make reasonable small tasks.
- TiVo --
- VIVO -- Daniel Verkamp has a patch for this
- SL support for MPEG-TS (anyone got samples?)
- MNG -- Paul B Mahol is working on this
Optimal Huffman tables for (M)JPEG
M95 Playback System
This task is to implement a playback subsystem for M95 files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which should be fairly easy by FFmpeg standards. The M95 page contains the specs necessary to complete this task and points to downloadable samples.
BRP Playback System
This task is to implement a playback subsystem for BRP files. This will entail writing a new file demuxer as well as a video decoder that can handle at least 2 variations of format data. Further, write an audio decoder for the custom DPCM format in the file. All of these tasks are considered fairly easy by FFmpeg standards. The BRP page contains the specs necessary to complete this task and points to downloadable samples for both known variations.
16-bit VQA Video Decoder
Westwood VQA files are already supported. However, there are three variations of its custom video codec, only the first two of which are supported. This task involves implementing support for the third variation. Visit the VQA samples repository: http://samples.multimedia.cx/game-formats/vqa/ -- The files in the directories Tiberian Sun VQAs/, bladerunner/, and dune2000/ use the 3rd variation of this codec. The VQA page should link to all the details you need to support this format.
HNM4 Playback System
This task is to implement a playback subsystem for HNM4 variant of the HNM format. This will entail writing a new file demuxer and video decoder, both of which are considered fairly easy by FFmpeg standards. The HNM4 page contains the specs necessary to complete this task and links to downloadable samples.
Apple RPZA encoder
A patch was once sent to the ffmpeg-devel mailing list to include an encoder for the Apple RPZA video codec. That code can be found on the "Interesting Patches" page. This qualification task involves applying that patch so that it can compile with current HEAD and then cleaning it up per the standards of the project. Engage the mailing list to learn more about what to do.
QuickTime Edit List Support
Implement edit list support in the QuickTime demuxer (libavformat/mov.c). This involves parsing the 'elst' atom in a QuickTime file. For a demonstration of how this is a problem, download the file menace00.mov from http://samples.mplayerhq.hu/mov/editlist/ and play it with ffplay or transcode it with ffmpeg. Notice that the audio and video are ever so slightly out of sync. Proper edit list support will solve that. Other samples in that directory also presumably exhibit edit list-related bugs. The Xine demuxer has support for this, it might be useful for hints.
(patch was submitted to ffmpeg-devel , around 14 March 2009)
Add wma fixed point decoder back into libavcodec
http://svn.rockbox.org/viewvc.cgi/trunk/apps/codecs/libwma/ Rockbox's fixed-point WMA decoder was adapted from the decoder in libavcodec.
VC1 timestamps in m2ts
Codec copy of VC1 from m2ts currently doesn't work. Either extend the VC1 parser to output/fix timestamps, or fix the timestamps from m2ts demuxing.
flip flag for upside-down codecs
about the flip, a patch that decodes images fliped when codec_tag == ff_get_fourcc("GEOX") is welcome. its a metter of 2lines manipulating data/linesize of imgages after get_buffer() or something similar [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
lavf-based concatenation tool
It would be nice to have some libavformat-based tool that would extract frames from multiple files (possible different containers as well) and put them into single one.
According to this: http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-February/063555.html vcr1 encoder is disabled, and won't compile if enabled. Michael would prefer to keep it around, and have someone grow it into full encoder.
implement some colorspace fourcc/codecs
some colorspace formats were uploaded to http://samples.mplayerhq.hu/V-codecs/ including:
a12v.avi is 4:2:2:4 10 Bit Interleaved auv2.avi is 4:2:2:4 8 Bit Interleaved
it might decode with current pixfmts, a sample commit is 9853bbb21a19d540850de60d3e9cf7c6ef9da7dc
a sample commit for adding new input formats to swscale is 4884b9e50d416f84e64bfaf546a03e490cb83a2f
the hunks 3 and 5 you do not need, they are optional special converters also the change to isSupportedOut() you do not need above will add a new input format
another example for adding an input format is a43fb6b37efa5b01f2c9bdc414570691229bcfab
Implement Phantom Cine demuxer and Bayer format support for swscale
The format is described here: http://wiki.multimedia.cx/index.php?title=Phantom_Cine It will need support for Bayer -> RGB conversion in swscale to make the demuxer useful though.
support for YCoCg/RGB colorspace in FFV1
This would add a free lossless intra-frame RGB codec for all supported platforms (most important OS X + Windows) which is often asked for video editing in video forums (e.g. slashcam.de)
IFF ANIM decoder
Modify libavformat/iff.c to handle this chunk and write a decoder for the format. The wiki page at IFF ANIM has links to more information and source code. Samples can be found at http://www-user.tu-chemnitz.de/~womar/projects/iffanim/iffanim_samplepack.zip .
port missing decoders/demuxers from other open source projects.
Paris Audio File PAF IRCAM SF GNU Octave 2.0 MAT4 GNU Octave 2.1 MAT5 Portable Voice Format PVFSound Designer II SD2
samples are here: http://www.mega-nerd.com/tmp/SoundFileCollection-20050711-0902.tgz
HVDI_VOICE_DATA- packet GSM LPC CELP LPC10
many image formats not supported yet.
MPEG-4 BIFS 3GPP DIMS LASeR SAF SVG SMIL VRML X3D XMT
many OPL2/OPL3 audio formats not supported yet.
many music pattern formats not supported yet.
AY GBS GYM HES KSS NSF, NSFE SAP SNES-SPC700 Sound Format VGM, VGZ
libswscale PAL8 output
See the thread: "[RFC] libswscale palette output implementation": http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/101397
vloopback output support
vloopback is a linux kernel device which allows to create a virtual video device where programs can write, and can be accessed as a normal video device: http://www.lavrsen.dk/twiki/bin/view/Motion/VideoFourLinuxLoopbackDevice
This would allow to write the ffmpeg output to a vloopdevice and be displayed by some a program reading from such device (e.g. skype, a voip client etc.).
An example of a program which uses vloopback: http://www.ws4gl.org/
Port video filters from MPlayer/VLC/Mjpegtools/Effectv/etc etc to libavfilter
There are plenty programs providing their own filters, many of them may be easily ported to the superior ;-) framework of libavfilter. Also may be possible to create wrappers around other libraries (e.g. opencv, libgimp, libshowphoto, libaa).
rar/zip/gz/bz2 etc demuxer
there are still compressed files out there (zipped raw wav, multi-rar'ed videos etc). create a decompression demuxer for them.
Less common AAC decoder features
Add support to the AAC decoder for object type ER AAC LC or AAC LC 960.
arithmetic decoding (and encoding) for mjpeg
Following marker codes are not supported by our mjpeg decoder: DAC, SOF9, SOF10, SOF11, SOF13, SOF14 and SOF15.
Enhanced Variable Rate Codec decoder
samples and specs available.
adobe http f4f segmented fragmentation dynamic streaming format
sample streams on http://www.fox.com . command line instructions for creating such files: http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html . spec is available under adobe NDA. not to be confused with freely available F4V specification. open source php to convert f4f to flv: https://github.com/svnpenn/dotfiles/blob/master/etc/AdobeHDS.php
get 3IV1 decoder working and benchmark
we have a decoder for 3IV1. its currently if 0'd in the mpeg4 decoder. your task is to test if it still builds and works, and fix it so that it does not slow down mpeg4 decoder if enabled. the end goal is to enable it by default.
rewrite realmedia demuxer
our real media demuxer is very old code and could use a cleanup or rewrite. please get more details on what needs to be done before starting.
rewrite asf demuxer
our windows media video (wmv) demuxer is very old code and could use a cleanup or rewrite. please get more details on what needs to be done before starting.
add support for very old rm files
there are a few samples that ffmpeg rm demuxer cannot handle. http://ffmpeg.org/trac/ffmpeg/ticket/1557
Reverse Engineering Tasks
Demuxer for csf format and video codec
This is partially analyzed in http://ffmpeg.org/trac/ffmpeg/ticket/1060
realplayer's ivr format and create a demuxer for it
samples on IVR page.
pick a random binary codec from mplayer
MPlayer has over 100 binary codecs which have no opensource decoder. pick one, find a sample and try to reverse engineer it. note that some work has been done on some codecs, and its a good idea to ask on the mailing list before starting.
screen capture codec
screen capture codecs are usually very simple and based on zlib.
emblaze demuxer/decoder from java code
samples and java decoder: http://samples.mplayerhq.hu/internets/emblaze/
audio sample suite
check and add support for these old audio formats: http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/index.html
Check Linux distributions for patches to ffmpeg
check various distros like Fedora, Ubuntu, Debian, Mint, Arch, Suse etc for patches to ffmpeg. write down location of patches so it can be checked on an annual basis. if patches are found , report to ffmpeg-devel mailing list or bug trac.
improve layout and accessability of ffmpeg website
test ffmpeg.org with various browsers, including screen readers and get it optimized and available to people with poor vision. check wording and general ease of use. for example putting large download links for users like vlc and firefox have.
restore and update compatability page on ffmpeg website
we used to have a page that detailed how to create files for other software players and operating systems. restore this page from git history and update it for new devices and standardized codecs (h264 is the preferred codec now).
contact large ffmpeg users for broken / unplayable samples
contact the largest users of ffmpeg, like youtube, facebook, archive.org, blip.tv and others and ask them for access to samples that do not decode correctly.
review sample request error messages
ffmpeg has an av_log_ask_for_sample generic log message to ask the user for a sample when there is a problem. your task is to review ffmpeg decoders and demuxers (and possibly other inputs) and replace regular av_log messages requesting samples with it. example commit here: http://ffmpeg.org/pipermail/ffmpeg-cvslog/2011-April/036509.html
write bluray and 3d howtos
write a document or wiki article or just link to some info on how to play + encode + rip bluray using ffmpeg/mplayer and the various bluray libs required. also a guide on how to use ffmpeg/mplayer/vlc to encode and play various 3D formats. including maybe some supported hardware screens/video cards w/ examples. includes updating this wiki page Blu Ray and HD-DVD Playback Status How to make a 3d movie with ffmpeg
write fate breakage notification bot
script up a bot to scan http://fate.ffmpeg.org that tells #ffmpeg-devel when something breaks compilation in fate.
write ipad/iphone/ios howto
write up some documentation on how to compile ffmpeg/ffplay/ffserver for iOS. exact tool versions, command lines, library requirements. both native compilation on the device and cross-compile using OS X. an android howto for various devices would be useful too.
talk to downstream
talk to the big projects that use ffmpeg. see if there is anything ffmpeg can do to make things easier, be it api stabilization, backwards compatability, or turning private functions into public headers.
examples include videolan, perian, mplayer, xbmc, ffdshow-tryouts, gstreamer.
migrate bugs from other projects
many projects that use ffmpeg or libavcodec have bugs that are meant for ffmpeg. some of these projects dont have time to send them to us, so they rot on bugzillas.
review any local patches
some projects may patch ffmpeg. collect these patches and compare them with other projects. see if there is anything we can do to reduce external patches.