[Libav-user] [Audacity-devel] Requesting help to port Audacity to recent FFmpeg

Michael Niedermayer michaelni at gmx.at
Tue May 20 19:17:07 CEST 2014


On Tue, May 20, 2014 at 09:14:33AM +0100, Richard Ash wrote:
> On Wed, 14 May 2014 19:27:38 +0200
> Michael Niedermayer <michaelni at gmx.at> wrote:
> > On Sun, May 11, 2014 at 09:16:29PM +0200, Benjamin Drung wrote:
> > > That's why I send this mail to this mailing list to request help. Is
> > > there anyone who has the time and skill to help porting Audacity to
> > > the latest FFmpeg API version?
> > > 
> > > [1] http://bugzilla.audacityteam.org/show_bug.cgi?id=606
> I think I'm right in saying that no-one on the audacity-devel list was
> specifically aware of this work/request (or I might have said something
> earlier).
> As a result of this problem, one of the Audacity contributors, Leyland
> Lucius, has been perusing the use of Gstreamer as an abstraction layer
> for ffmpeg. This work has recently arrived in Audacity SVN, so you
> should be able to see where it is at (it isn't working for me, but I
> don't think it's Leyland's fault).

I wasnt aware of that, but still is there no interrest in directly
supporting FFmpeg ?
Also i just fixed planar export & put the disabled options back so
my github should contain a audacity that fully works with latest
ffmpeg, of course there will be bugs but iam happy to fix them if
they get reported to me ...

> The rationale for doing this is that the Gstreamer 1.0 API is much more
> stable than the libAV one, and there is an (actively maintained)
> gst-plugin-libav which provides the functionality of libAV through that
> API. Thus the problem of providing up-to-date builds of libAV is
> reduced, and an abstraction layer is provided.

Iam quite aware of the API stability issues in our API.
Its a result of FFmpeg supporting all features and bugfixes as well
as to be API compatible to the fork (libav) and that changing the API
all the time.

One question here would be if there would be interrest if FFmpeg would
provide a seperate simple API which isnt designed to be as efficient
as possible and which makes no attempt to be compatible with libav.
such API could then be long term stable
This idea did come up already a few times IIRC. Just noone imlpemented
it yet, but the more people support the idea the more likely someone
will sit down and write it ...

> This also has the benefit of allowing (in principal) any other codecs
> which are supported in Gstreamer (or by plugins for it) to be added to
> Audacity relatively easily. This is something we hope to make modular,
> so that it doesn't need a complete new build of audacity to use new
> gstreamer plug-ins, and every download of Audacity doesn't have to ship
> with every possible codec library.

hmm, i dont know exactly which codecs gstreamer supports but ffmpeg
also supports quite a few external libs as codecs, the ones ive enabled
on my local build:

 A....D libfdk_aac           Fraunhofer FDK AAC (codec aac)
 A....D libopencore_amrnb    OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band) (codec amr_nb)
 A....D libopencore_amrwb    OpenCORE AMR-WB (Adaptive Multi-Rate Wide-Band) (codec amr_wb)
 A....D libgsm               libgsm GSM (codec gsm)
 A....D libgsm_ms            libgsm GSM Microsoft variant (codec gsm_ms)
 A....D libilbc              iLBC (Internet Low Bitrate Codec) (codec ilbc)
 A....D libopus              libopus Opus (codec opus)
 A....D libspeex             libspeex Speex (codec speex)
 A..... libvorbis            libvorbis (codec vorbis)

 A..... libfaac              libfaac AAC (Advanced Audio Coding) (codec aac)
 A..... libfdk_aac           Fraunhofer FDK AAC (codec aac)
 A..... libvo_aacenc         Android VisualOn AAC (Advanced Audio Coding) (codec aac)
 A..... libaacplus           libaacplus AAC+ (Advanced Audio Codec with SBR+PS) (codec aac)
 A..... libopencore_amrnb    OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band) (codec amr_nb)
 A..... libvo_amrwbenc       Android VisualOn AMR-WB (Adaptive Multi-Rate Wide-Band) (codec amr_wb)
 A..... libgsm               libgsm GSM (codec gsm)
 A..... libgsm_ms            libgsm GSM Microsoft variant (codec gsm_ms)
 A..... libilbc              iLBC (Internet Low Bitrate Codec) (codec ilbc)
 A..... libmp3lame           libmp3lame MP3 (MPEG audio layer 3) (codec mp3)
 A..... libopus              libopus Opus (codec opus)
 A..... libspeex             libspeex Speex (codec speex)
 A..... libvorbis            libvorbis (codec vorbis)

changing these would generally require a rebuild of libavcodec though
but not audacity.
Also if someone wants to change ffmpegs external lib support to use
dlopen for some or all cases, i surely wouldnt mind ...

Also according to:
./ffmpeg -filters | egrep '\->A|A\-' | wc
there are 58 audio filters in ffmpegs libavfilter (not counting ones
that arent enabled in my local build)
So maybe libavfilter support might be interresting to audacity too ?

And the codecs in ffmpeg support quite a few more options than what
is available to be set from audacity currently. It should be fairly
easy to add generic option support for someone who knows the
audacity API.
random example:
./ffmpeg -help encoder=libopus
Encoder libopus [libopus Opus]:
    Threading capabilities: no
    Supported sample rates: 48000 24000 16000 12000 8000
    Supported sample formats: s16 flt
    Supported channel layouts: mono stereo 3.0 quad 5.0 5.1 6.1 7.1
libopus AVOptions:
  -application       <int>        E...A... Intended application type (from 2048 to 2051) (default 2049)
     voip                         E...A... Favor improved speech intelligibility
     audio                        E...A... Favor faithfulness to the input
     lowdelay                     E...A... Restrict to only the lowest delay modes
  -frame_duration    <float>      E...A... Duration of a frame in milliseconds (from 2.5 to 60) (default 20)
  -packet_loss       <int>        E...A... Expected packet loss percentage (from 0 to 100) (default 0)
  -vbr               <int>        E...A... Variable bit rate mode (from 0 to 2) (default 1)
     off                          E...A... Use constant bit rate
     on                           E...A... Use variable bit rate
     constrained                  E...A... Use constrained VBR


Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The real ebay dictionary, page 2
"100% positive feedback" - "All either got their money back or didnt complain"
"Best seller ever, very honest" - "Seller refunded buyer after failed scam"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20140520/ad40afde/attachment.asc>

More information about the Libav-user mailing list