beets/beetsplug
Zsin Skri c3af5b3763 replaygain: add ffmpeg backend
Add replaygain backend using ffmpeg's ebur128 filter.

The album gain is calculated as the mean of all BS.1770 gating block powers.
Besides differences in gating block offset, this should be equivalent to a
BS.1770 analysis of a proper concatenation of all tracks.

Just calculating the mean of all track gains (as implemented by the bs1770gain
backend) yields incorrect results as that would:
- completely ignore track lengths
  - just using length in seconds won't work either (e.g. BS.1770 ignores
    passages below a threshold)
- take the mean of track loudness, not power

When using the ffmpeg replaygain backend to create R128_*_GAIN tags, the
targetlevel will be set to -23 LUFS. GitHub PullRequest #3065 will make this
configurable.
It will also skip peak calculation, as there is no R128_*_PEAK tag.

It is checked if the libavfilter library supports replaygain calculation. Before
version 6.67.100 that did require the `--enable-libebur128` compile-time-option,
after that the ebur128 library is included in libavfilter itself. Thus we
require either a recent enough libavfilter version or the `--enable-libebur128`
option.
2019-07-19 21:54:47 +02:00
..
bpd Replace a couple URLs that don't point to anything 2019-06-05 23:08:18 +02:00
lastgenre - Improved doc and changelog 2019-04-21 18:32:41 +02:00
metasync confit: replace with confuse in plugins 2019-06-01 10:03:41 +10:00
web Update a lot of URLs to use HTTPS 2019-06-05 03:11:49 +02:00
__init__.py Standardize __future__ imports without parentheses 2016-02-28 15:03:51 -08:00
absubmit.py util.command_output: return stderr, too 2019-07-14 18:32:59 +02:00
acousticbrainz.py Formatting 2019-04-27 17:58:48 +02:00
badfiles.py confit: replace with confuse in plugins 2019-06-01 10:03:41 +10:00
beatport.py removing print log 2019-06-30 14:34:13 +02:00
bench.py Allow multiple MB ids to be passed to the importer 2016-01-19 21:43:32 +01:00
bpm.py Merge pull request #1992 from jackwilsdon/add-write-bpm 2017-01-01 23:09:41 -05:00
bucket.py Resolve W605: invalid escape sequence 2018-08-13 10:41:01 -04:00
chroma.py confit: replace with confuse in plugins 2019-06-01 10:03:41 +10:00
convert.py confit: replace with confuse in plugins 2019-06-01 10:03:41 +10:00
cue.py wrap 2 results in a list in cue and random plugin 2016-09-14 00:40:53 -04:00
discogs.py Merge pull request #3322 from thedevilisinthedetails/master 2019-07-01 17:22:50 -04:00
duplicates.py util.command_output: return stderr, too 2019-07-14 18:32:59 +02:00
edit.py Replace more instances of unsafe calls to yaml.load 2019-04-20 01:14:15 +02:00
embedart.py Fixed docstring typo. 2018-12-20 18:19:00 +01:00
embyupdate.py A little fiddling with embyupdate 2017-01-07 17:07:01 -05:00
export.py mediafile: import from standalone module 2019-05-29 09:35:14 +10:00
fetchart.py Update a lot of URLs to use HTTPS 2019-06-05 03:11:49 +02:00
filefilter.py Fix incorrect indentation 2019-01-31 00:15:42 +00:00
freedesktop.py Standardize __future__ imports without parentheses 2016-02-28 15:03:51 -08:00
fromfilename.py Fix "line too long" Travis CI error 2017-12-21 15:18:25 +01:00
ftintitle.py Fix #2817: drop in configuration was ignored 2018-02-23 18:18:32 -05:00
fuzzy.py Use new as_str method 2016-06-25 19:16:14 -07:00
gmusic.py gmusic: Fix compatibility with gmusicapi>=12.0.0 2019-05-18 16:32:56 -04:00
hook.py Always use custom formatter for formatting hook commands 2019-02-25 14:41:59 +00:00
ihate.py Standardize __future__ imports without parentheses 2016-02-28 15:03:51 -08:00
importadded.py beetsplug/importadded: Add missing path kwarg to update_after_write_time() 2019-06-07 14:17:39 +02:00
importfeeds.py Fix importfeeds plugin on Python 3. 2017-08-12 16:45:13 +01:00
info.py mediafile: import from standalone module 2019-05-29 09:35:14 +10:00
inline.py inline: Fix a ridiculously subtle flexattr bug 2019-06-01 12:28:47 -04:00
ipfs.py util.command_output: return stderr, too 2019-07-14 18:32:59 +02:00
keyfinder.py util.command_output: return stderr, too 2019-07-14 18:32:59 +02:00
kodiupdate.py Make error handling and logging more detailed 2017-08-20 14:51:03 -07:00
lastimport.py Update a lot of URLs to use HTTPS 2019-06-05 03:11:49 +02:00
loadext.py Add loadext plugin 2019-04-21 15:10:28 +01:00
lyrics.py Use https for lyrics.wikia.com, when supported 2019-06-05 23:00:52 +02:00
mbcollection.py mbcollection: Make sure missing albums are removed from collections correctly. 2018-02-23 12:34:33 +00:00
mbsubmit.py Update a lot of URLs to use HTTPS 2019-06-05 03:11:49 +02:00
mbsync.py Tiny style fix for #3028 2018-09-16 20:56:06 -04:00
missing.py beetsplug: implement missing -a -t 2017-03-18 19:05:46 -04:00
mpdstats.py mpdstats: use MPD_PORT env variable 2019-04-19 17:35:42 +10:00
mpdupdate.py mpdupdate: use MPD_PORT env variable 2019-04-19 17:35:42 +10:00
parentwork.py Nicer string wrap 2019-06-08 21:35:56 -04:00
permissions.py replace deprecated log.warn() with log.warning() 2016-08-09 00:33:38 -04:00
play.py Add ability for play plugin to emit utf8 BOM 2018-06-08 23:26:48 -06:00
playlist.py Merge pull request #3151 from Holzhaus/playlist-plugin-additions 2019-02-18 08:40:55 -05:00
plexupdate.py PlexUpdate: token redacted 2018-01-31 00:49:55 -06:00
random.py random: beets.util.random -> beets.random 2019-04-07 18:46:11 +10:00
replaygain.py replaygain: add ffmpeg backend 2019-07-19 21:54:47 +02:00
rewrite.py Use new as_str method 2016-06-25 19:16:14 -07:00
scrub.py mediafile: import from standalone module 2019-05-29 09:35:14 +10:00
smartplaylist.py Fix miscellaneous typos 2018-10-09 01:11:06 +01:00
sonosupdate.py Remove unused import. 2018-04-20 08:25:08 +02:00
spotify.py Update a few more http URLs to https that I missed 2019-06-05 23:07:11 +02:00
subsonicupdate.py Use "==" when comparing strings 2019-01-31 00:15:55 +00:00
the.py the: log a debug only when text is changed 2019-03-31 18:19:09 +11:00
thumbnails.py Update a lot of URLs to use HTTPS 2019-06-05 03:11:49 +02:00
types.py confit: replace with confuse in plugins 2019-06-01 10:03:41 +10:00
zero.py confit: replace with confuse in plugins 2019-06-01 10:03:41 +10:00