desbma / r128gain

Fast audio loudness scanner & tagger (ReplayGain v2 / R128)
GNU Lesser General Public License v2.1
172 stars 9 forks source link

"Failed to analyze files" for opus format in 0.8.0+ #9

Closed alexmbird closed 5 years ago

alexmbird commented 5 years ago

It appears something in r128gain's opus handling has broken between release 0.7.1 and the latest. For example the command r128gain -r -a -o . previously ran without error on a directory of .opus files (freshly written by ffmpeg+libopus) in 0.7.1, but on a fresh install I see the following:

$ ~/.local/bin/r128gain -r -a -o .
Analyzing loudness of files './10 - Vision Incision.opus', './02 - Kool Roc Bass.opus', './04 - Blisters on My Brain.opus', './08 - Lazer Sheep Dip Funk.opus', './11 - Nightime Story.opus', './06 - I Used to Fall in Love.opus', './07 - Battle Flag (feat. Pigeonhed).opus', './09 - Will I Get Out of Jail?.opus', './05 - How to Operate With a Blown Mind.opus', './01 - Warming Up the Brain Farm.opus', './03 - Kasparov's Revenge.opus'...
Analyzing loudness of file './10 - Vision Incision.opus'...
Analyzing loudness of file './02 - Kool Roc Bass.opus'...
Analyzing loudness of file './04 - Blisters on My Brain.opus'...
Analyzing loudness of file './08 - Lazer Sheep Dip Funk.opus'...
Analyzing loudness of file './11 - Nightime Story.opus'...
Analyzing loudness of file './06 - I Used to Fall in Love.opus'...
Analyzing loudness of file './07 - Battle Flag (feat. Pigeonhed).opus'...
Analyzing loudness of file './09 - Will I Get Out of Jail?.opus'...
Analyzing loudness of file './05 - How to Operate With a Blown Mind.opus'...
Analyzing loudness of file './01 - Warming Up the Brain Farm.opus'...
Analyzing loudness of file './03 - Kasparov's Revenge.opus'...
Failed to analyze files './10 - Vision Incision.opus', './02 - Kool Roc Bass.opus', './04 - Blisters on My Brain.opus', './08 - Lazer Sheep Dip Funk.opus', './11 - Nightime Story.opus', './06 - I Used to Fall in Love.opus', './07 - Battle Flag (feat. Pigeonhed).opus', './09 - Will I Get Out of Jail?.opus', './05 - How to Operate With a Blown Mind.opus', './01 - Warming Up the Brain Farm.opus', './03 - Kasparov's Revenge.opus': CalledProcessError Command '['/usr/bin/ffmpeg', '-hide_banner', '-nostats', '-threads:0', '1', '-i', './10 - Vision Incision.opus', '-threads:1', '1', '-i', './02 - Kool Roc Bass.opus', '-threads:2', '1', '-i', './04 - Blisters on My Brain.opus', '-threads:3', '1', '-i', './08 - Lazer Sheep Dip Funk.opus', '-threads:4', '1', '-i', './11 - Nightime Story.opus', '-threads:5', '1', '-i', './06 - I Used to Fall in Love.opus', '-threads:6', '1', '-i', './07 - Battle Flag (feat. Pigeonhed).opus', '-threads:7', '1', '-i', './09 - Will I Get Out of Jail?.opus', '-threads:8', '1', '-i', './05 - How to Operate With a Blown Mind.opus', '-threads:9', '1', '-i', './01 - Warming Up the Brain Farm.opus', '-threads:10', '1', '-i', "./03 - Kasparov's Revenge.opus", '-filter_threads', '1', '-map', 'a', '-filter_complex', '[0:a]anul[a_r128_in_0]; [a_r128_in_0]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_0]; [1:a]anul[a_r128_in_1]; [a_r128_in_1]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_1]; [2:a]anul[a_r128_in_2]; [a_r128_in_2]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_2]; [3:a]anul[a_r128_in_3]; [a_r128_in_3]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_3]; [4:a]anul[a_r128_in_4]; [a_r128_in_4]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_4]; [5:a]anul[a_r128_in_5]; [a_r128_in_5]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_5]; [6:a]anul[a_r128_in_6]; [a_r128_in_6]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_6]; [7:a]anul[a_r128_in_7]; [a_r128_in_7]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_7]; [8:a]anul[a_r128_in_8]; [a_r128_in_8]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_8]; [9:a]anul[a_r128_in_9]; [a_r128_in_9]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_9]; [10:a]anul[a_r128_in_10]; [a_r128_in_10]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_10]; [a_r128_in_fmt_0][a_r128_in_fmt_1][a_r128_in_fmt_2][a_r128_in_fmt_3][a_r128_in_fmt_4][a_r128_in_fmt_5][a_r128_in_fmt_6][a_r128_in_fmt_7][a_r128_in_fmt_8][a_r128_in_fmt_9][a_r128_in_fmt_10]concat=n=11:v=0:a=1[a_r128_in_concat]; [a_r128_in_concat]ebur128=framelog=verbose', '-f', 'null', '/dev/null']' returned non-zero exit status 1.
File './10 - Vision Incision.opus': loudness = -23.0 LUFS, sample peak = -
File './02 - Kool Roc Bass.opus': loudness = -23.0 LUFS, sample peak = -
File './04 - Blisters on My Brain.opus': loudness = -23.0 LUFS, sample peak = -
File './08 - Lazer Sheep Dip Funk.opus': loudness = -23.0 LUFS, sample peak = -
File './11 - Nightime Story.opus': loudness = -23.0 LUFS, sample peak = -
File './06 - I Used to Fall in Love.opus': loudness = -23.0 LUFS, sample peak = -
File './07 - Battle Flag (feat. Pigeonhed).opus': loudness = -23.0 LUFS, sample peak = -
File './09 - Will I Get Out of Jail?.opus': loudness = -23.0 LUFS, sample peak = -
File './05 - How to Operate With a Blown Mind.opus': loudness = -23.0 LUFS, sample peak = -
File './01 - Warming Up the Brain Farm.opus': loudness = -23.0 LUFS, sample peak = -
File './03 - Kasparov's Revenge.opus': loudness = -23.0 LUFS, sample peak = -
Album '.': loudness = SKIPPED, sample peak = SKIPPED
Tagging file './10 - Vision Incision.opus'
Tagging file './02 - Kool Roc Bass.opus'
Tagging file './04 - Blisters on My Brain.opus'
Tagging file './08 - Lazer Sheep Dip Funk.opus'
Tagging file './11 - Nightime Story.opus'
Tagging file './06 - I Used to Fall in Love.opus'
Tagging file './07 - Battle Flag (feat. Pigeonhed).opus'
Tagging file './09 - Will I Get Out of Jail?.opus'
Tagging file './05 - How to Operate With a Blown Mind.opus'
Tagging file './01 - Warming Up the Brain Farm.opus'
Tagging file './03 - Kasparov's Revenge.opus'

Pinning my local install to r128gain==0.7.1 is a workaround.

desbma commented 5 years ago

Which version of ffmpeg are you using (ffmpeg -version)?

alexmbird commented 5 years ago
$ ffmpeg -version
ffmpeg version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil      55. 78.100 / 55. 78.100
libavcodec     57.107.100 / 57.107.100
libavformat    57. 83.100 / 57. 83.100
libavdevice    57. 10.100 / 57. 10.100
libavfilter     6.107.100 /  6.107.100
libavresample   3.  7.  0 /  3.  7.  0
libswscale      4.  8.100 /  4.  8.100
libswresample   2.  9.100 /  2.  9.100
libpostproc    54.  7.100 / 54.  7.100

Getting the same experience with a recent build of ffmpeg's master branch, too.

desbma commented 5 years ago

Can you post the output of:

alexmbird commented 5 years ago
$ ffmpeg -filters
ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
  configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
Filters:
  T.. = Timeline support
  .S. = Slice threading
  ..C = Command support
  A = Audio input/output
  V = Video input/output
  N = Dynamic number and/or type of input/output
  | = Source or sink filter
 ... abench            A->A       Benchmark part of a filtergraph.
 ... acompressor       A->A       Audio compressor.
 ... acopy             A->A       Copy the input audio unchanged to the output.
 ... acrossfade        AA->A      Cross fade two input audio streams.
 ... acrusher          A->A       Reduce audio bit resolution.
 T.. adelay            A->A       Delay one or more audio channels.
 ... aecho             A->A       Add echoing to the audio.
 ... aemphasis         A->A       Audio emphasis.
 ... aeval             A->A       Filter audio signal according to a specified expression.
 T.. afade             A->A       Fade in/out input audio.
 ... afftfilt          A->A       Apply arbitrary expressions to samples in frequency domain.
 .S. afir              AA->A      Apply Finite Impulse Response filter with supplied coefficients in 2nd stream.
 ... aformat           A->A       Convert the input audio to one of the specified formats.
 ... agate             A->A       Audio gate.
 ... ainterleave       N->A       Temporally interleave audio inputs.
 ... alimiter          A->A       Audio lookahead limiter.
 ... allpass           A->A       Apply a two-pole all-pass filter.
 ... aloop             A->A       Loop audio samples.
 ... amerge            N->A       Merge two or more audio streams into a single multi-channel stream.
 T.. ametadata         A->A       Manipulate audio frame metadata.
 ... amix              N->A       Audio mixing.
 ..C anequalizer       A->N       Apply high-order audio parametric multi band equalizer.
 ... anull             A->A       Pass the source unchanged to the output.
 T.. apad              A->A       Pad audio with silence.
 ... aperms            A->A       Set permissions for the output audio frame.
 ... aphaser           A->A       Add a phasing effect to the audio.
 ... apulsator         A->A       Audio pulsator.
 ... arealtime         A->A       Slow down filtering to match realtime.
 ... aresample         A->A       Resample audio data.
 ... areverse          A->A       Reverse an audio clip.
 ... aselect           A->N       Select audio frames to pass in output.
 ... asendcmd          A->A       Send commands to filters.
 ... asetnsamples      A->A       Set the number of samples for each output audio frames.
 ... asetpts           A->A       Set PTS for the output audio frame.
 ... asetrate          A->A       Change the sample rate without altering the data.
 ... asettb            A->A       Set timebase for the audio output link.
 ... ashowinfo         A->A       Show textual information for each audio frame.
 T.. asidedata         A->A       Manipulate audio frame side data.
 ... asplit            A->N       Pass on the audio input to N audio outputs.
 ... astats            A->A       Show time domain statistics about audio frames.
 ..C astreamselect     N->N       Select audio streams
 ..C atempo            A->A       Adjust audio tempo.
 ... atrim             A->A       Pick one continuous section from the input, drop the rest.
 ... azmq              A->A       Receive commands through ZMQ and broker them to filters.
 ... bandpass          A->A       Apply a two-pole Butterworth band-pass filter.
 ... bandreject        A->A       Apply a two-pole Butterworth band-reject filter.
 ... bass              A->A       Boost or cut lower frequencies.
 ... biquad            A->A       Apply a biquad IIR filter with the given coefficients.
 ... bs2b              A->A       Bauer stereo-to-binaural filter.
 ... channelmap        A->A       Remap audio channels.
 ... channelsplit      A->N       Split audio into per-channel streams.
 ... chorus            A->A       Add a chorus effect to the audio.
 ... compand           A->A       Compress or expand audio dynamic range.
 ... compensationdelay A->A       Audio Compensation Delay Line.
 ... crossfeed         A->A       Apply headphone crossfeed filter.
 ... crystalizer       A->A       Simple expand audio dynamic range filter.
 T.. dcshift           A->A       Apply a DC shift to the audio.
 ... dynaudnorm        A->A       Dynamic Audio Normalizer.
 ... earwax            A->A       Widen the stereo image.
 ... ebur128           A->N       EBU R128 scanner.
 ... equalizer         A->A       Apply two-pole peaking equalization (EQ) filter.
 ... extrastereo       A->A       Increase difference between stereo audio channels.
 ..C firequalizer      A->A       Finite Impulse Response Equalizer.
 ... flanger           A->A       Apply a flanging effect to the audio.
 ... haas              A->A       Apply Haas Stereo Enhancer.
 ... hdcd              A->A       Apply High Definition Compatible Digital (HDCD) decoding.
 .S. headphone         N->A       Apply headphone binaural spatialization with HRTFs in additional streams.
 ... highpass          A->A       Apply a high-pass filter with 3dB point frequency.
 ... join              N->A       Join multiple audio streams into multi-channel output.
 ..C ladspa            N->A       Apply LADSPA effect.
 ... loudnorm          A->A       EBU R128 loudness normalization
 ... lowpass           A->A       Apply a low-pass filter with 3dB point frequency.
 ... pan               A->A       Remix channels with coefficients (panning).
 ... replaygain        A->A       ReplayGain scanner.
 ... resample          A->A       Audio resampling and conversion.
 ..C rubberband        A->A       Apply time-stretching and pitch-shifting.
 ... sidechaincompress AA->A      Sidechain compressor.
 ... sidechaingate     AA->A      Audio sidechain gate.
 ... silencedetect     A->A       Detect silence.
 ... silenceremove     A->A       Remove silence.
 .S. sofalizer         A->A       SOFAlizer (Spatially Oriented Format for Acoustics).
 ... stereotools       A->A       Apply various stereo tools.
 ... stereowiden       A->A       Apply stereo widening effect.
 ... superequalizer    A->A       Apply 18 band equalization filter.
 .S. surround          A->A       Apply audio surround upmix filter.
 ... treble            A->A       Boost or cut upper frequencies.
 ... tremolo           A->A       Apply tremolo effect.
 ... vibrato           A->A       Apply vibrato effect.
 T.C volume            A->A       Change input volume.
 ... volumedetect      A->A       Detect audio volume.
 ... aevalsrc          |->A       Generate an audio signal generated by an expression.
 ... anoisesrc         |->A       Generate a noise audio signal.
 ... anullsrc          |->A       Null audio source, return empty audio frames.
 ... flite             |->A       Synthesize voice from text using libflite.
 ... sine              |->A       Generate sine wave audio signal.
 ... anullsink         A->|       Do absolutely nothing with the input audio.
 ... alphaextract      V->N       Extract an alpha channel as a grayscale image component.
 ... alphamerge        VV->V      Copy the luma value of the second input into the alpha channel of the first input.
 ... ass               V->V       Render ASS subtitles onto input video using the libass library.
 TS. atadenoise        V->V       Apply an Adaptive Temporal Averaging Denoiser.
 TS. avgblur           V->V       Apply Average Blur filter.
 T.. bbox              V->V       Compute bounding box for each frame.
 ... bench             V->V       Benchmark part of a filtergraph.
 T.. bitplanenoise     V->V       Measure bit plane noise.
 ... blackdetect       V->V       Detect video intervals that are (almost) black.
 ... blackframe        V->V       Detect frames that are (almost) black.
 TS. blend             VV->V      Blend two video frames into each other.
 T.. boxblur           V->V       Blur the input.
 TS. bwdif             V->V       Deinterlace the input image.
 TS. chromakey         V->V       Turns a certain color into transparency. Operates on YUV colors.
 ... ciescope          V->V       Video CIE scope.
 T.. codecview         V->V       Visualize information about some codecs.
 T.. colorbalance      V->V       Adjust the color balance.
 T.. colorchannelmixer V->V       Adjust colors by mixing color channels.
 TS. colorkey          V->V       Turns a certain color into transparency. Operates on RGB colors.
 T.. colorlevels       V->V       Adjust the color levels.
 TS. colormatrix       V->V       Convert color matrix.
 TS. colorspace        V->V       Convert between colorspaces.
 TS. convolution       V->V       Apply convolution filter.
 T.. convolve          VV->V      Convolve first video stream with second video stream.
 ... copy              V->V       Copy the input video unchanged to the output.
 ... cover_rect        V->V       Find and cover a user specified object.
 ..C crop              V->V       Crop the input video.
 T.. cropdetect        V->V       Auto-detect crop size.
 TS. curves            V->V       Adjust components curves.
 .S. datascope         V->V       Video data analysis.
 TS. dctdnoiz          V->V       Denoise frames using 2D DCT.
 TS. deband            V->V       Debands video.
 ... decimate          N->V       Decimate frames (post field matching filter).
 T.. deflate           V->V       Apply deflate effect.
 ... deflicker         V->V       Remove temporal frame luminance variations.
 ... deinterlace_vaapi V->V       Deinterlacing of VAAPI surfaces
 ... dejudder          V->V       Remove judder produced by pullup.
 T.. delogo            V->V       Remove logo from input video.
 ... deshake           V->V       Stabilize shaky video.
 TS. despill           V->V       Despill video.
 ... detelecine        V->V       Apply an inverse telecine pattern.
 T.. dilation          V->V       Apply dilation effect.
 T.. displace          VVV->V     Displace pixels.
 ... doubleweave       V->V       Weave input video fields into double number of frames.
 T.. drawbox           V->V       Draw a colored box on the input video.
 ... drawgraph         V->V       Draw a graph using input video metadata.
 T.. drawgrid          V->V       Draw a colored grid on the input video.
 T.C drawtext          V->V       Draw text on top of video frames using libfreetype library.
 T.. edgedetect        V->V       Detect and draw edge.
 ... elbg              V->V       Apply posterize effect, using the ELBG algorithm.
 T.C eq                V->V       Adjust brightness, contrast, gamma, and saturation.
 T.. erosion           V->V       Apply erosion effect.
 ... extractplanes     V->N       Extract planes as grayscale frames.
 .S. fade              V->V       Fade in/out input video.
 T.. fftfilt           V->V       Apply arbitrary expressions to pixels in frequency domain.
 ... field             V->V       Extract a field from the input video.
 ... fieldhint         V->V       Field matching using hints.
 ... fieldmatch        N->V       Field matching for inverse telecine.
 T.. fieldorder        V->V       Set the field order.
 ... find_rect         V->V       Find a user specified object.
 T.. floodfill         V->V       Fill area with same color with another color.
 ... format            V->V       Convert the input video to one of the specified pixel formats.
 ... fps               V->V       Force constant framerate.
 ... framepack         VV->V      Generate a frame packed stereoscopic video.
 ... framerate         V->V       Upsamples or downsamples progressive source between specified frame rates.
 T.. framestep         V->V       Select one frame every N frames.
 ... frei0r            V->V       Apply a frei0r effect.
 T.. fspp              V->V       Apply Fast Simple Post-processing filter.
 TS. gblur             V->V       Apply Gaussian Blur filter.
 T.. geq               V->V       Apply generic equation to each pixel.
 T.. gradfun           V->V       Debands video quickly using gradients.
 TS. haldclut          VV->V      Adjust colors using a Hald CLUT.
 TS. hflip             V->V       Horizontally flip the input video.
 T.. histeq            V->V       Apply global color histogram equalization.
 ... histogram         V->V       Compute and draw a histogram.
 T.. hqdn3d            V->V       Apply a High Quality 3D Denoiser.
 .S. hqx               V->V       Scale the input by 2, 3 or 4 using the hq*x magnification algorithm.
 ... hstack            N->V       Stack video inputs horizontally.
 T.C hue               V->V       Adjust the hue and saturation of the input video.
 ... hwdownload        V->V       Download a hardware frame to a normal frame
 ... hwmap             V->V       Map hardware frames
 ... hwupload          V->V       Upload a normal frame to a hardware frame
 ... hwupload_cuda     V->V       Upload a system memory frame to a CUDA device.
 T.. hysteresis        VV->V      Grow first stream into second stream by connecting components.
 ... idet              V->V       Interlace detect Filter.
 T.. il                V->V       Deinterleave or interleave fields.
 T.. inflate           V->V       Apply inflate effect.
 ... interlace         V->V       Convert progressive video into interlaced.
 ... interleave        N->V       Temporally interleave video inputs.
 ... kerndeint         V->V       Apply kernel deinterlacing to the input.
 .S. lenscorrection    V->V       Rectify the image by correcting for lens distortion.
 T.. limiter           V->V       Limit pixels components to the specified range.
 ... loop              V->V       Loop video frames.
 TS. lumakey           V->V       Turns a certain luma into transparency.
 T.. lut               V->V       Compute and apply a lookup table to the RGB/YUV input video.
 T.. lut2              VV->V      Compute and apply a lookup table from two video inputs.
 TS. lut3d             V->V       Adjust colors using a 3D LUT.
 T.. lutrgb            V->V       Compute and apply a lookup table to the RGB input video.
 T.. lutyuv            V->V       Compute and apply a lookup table to the YUV input video.
 T.. maskedclamp       VVV->V     Clamp first stream with second stream and third stream.
 T.. maskedmerge       VVV->V     Merge first stream with second stream using third stream as mask.
 ... mcdeint           V->V       Apply motion compensating deinterlacing.
 ... mergeplanes       N->V       Merge planes.
 ... mestimate         V->V       Generate motion vectors.
 T.. metadata          V->V       Manipulate video frame metadata.
 T.. midequalizer      VV->V      Apply Midway Equalization.
 ... minterpolate      V->V       Frame rate conversion using Motion Interpolation.
 ... mpdecimate        V->V       Remove near-duplicate frames.
 T.. negate            V->V       Negate input video.
 TS. nlmeans           V->V       Non-local means denoiser.
 T.. nnedi             V->V       Apply neural network edge directed interpolation intra-only deinterlacer.
 ... noformat          V->V       Force libavfilter not to use any of the specified pixel formats for the input to the next filter.
 TS. noise             V->V       Add noise.
 ... null              V->V       Pass the source unchanged to the output.
 T.. oscilloscope      V->V       2D Video Oscilloscope.
 T.C overlay           VV->V      Overlay a video source on top of the input.
 T.. owdenoise         V->V       Denoise using wavelets.
 ... pad               V->V       Pad the input video.
 ... palettegen        V->V       Find the optimal palette for a given stream.
 ... paletteuse        VV->V      Use a palette to downsample an input video stream.
 ... perms             V->V       Set permissions for the output video frame.
 TS. perspective       V->V       Correct the perspective of video.
 T.. phase             V->V       Phase shift fields.
 ... pixdesctest       V->V       Test pixel format definitions.
 T.. pixscope          V->V       Pixel data analysis.
 T.C pp                V->V       Filter video using libpostproc.
 T.. pp7               V->V       Apply Postprocessing 7 filter.
 T.. premultiply       N->V       PreMultiply first stream with first plane of second stream.
 TS. prewitt           V->V       Apply prewitt operator.
 T.. pseudocolor       V->V       Make pseudocolored video frames.
 ... psnr              VV->V      Calculate the PSNR between two video streams.
 ... pullup            V->V       Pullup from field sequence to frames.
 T.. qp                V->V       Change video quantization parameters.
 ... random            V->V       Return random frames.
 T.. readeia608        V->V       Read EIA-608 Closed Caption codes from input video and write them to frame metadata.
 ... readvitc          V->V       Read vertical interval timecode and write it to frame metadata.
 ... realtime          V->V       Slow down filtering to match realtime.
 T.. remap             VVV->V     Remap pixels.
 TS. removegrain       V->V       Remove grain.
 T.. removelogo        V->V       Remove a TV logo based on a mask image.
 ... repeatfields      V->V       Hard repeat fields based on MPEG repeat field flag.
 ... reverse           V->V       Reverse a clip.
 TS. roberts           V->V       Apply roberts cross operator.
 TSC rotate            V->V       Rotate the input image.
 T.. sab               V->V       Apply shape adaptive blur.
 ..C scale             V->V       Scale the input video size and/or convert the image format.
 ... scale_vaapi       V->V       Scale to/from VAAPI surfaces.
 ..C scale2ref         VV->VV     Scale the input video size and/or convert the image format to the given reference.
 ... select            V->N       Select video frames to pass in output.
 TS. selectivecolor    V->V       Apply CMYK adjustments to specific color ranges.
 ... sendcmd           V->V       Send commands to filters.
 ... separatefields    V->V       Split input video frames into fields.
 ... setdar            V->V       Set the frame display aspect ratio.
 ... setfield          V->V       Force field for the output video frame.
 ... setpts            V->V       Set PTS for the output video frame.
 ... setsar            V->V       Set the pixel sample aspect ratio.
 ... settb             V->V       Set timebase for the video output link.
 ... showinfo          V->V       Show textual information for each video frame.
 T.. showpalette       V->V       Display frame palette.
 T.. shuffleframes     V->V       Shuffle video frames.
 ... shuffleplanes     V->V       Shuffle video planes.
 T.. sidedata          V->V       Manipulate video frame side data.
 .S. signalstats       V->V       Generate statistics from video analysis.
 ... signature         N->V       Calculate the MPEG-7 video signature
 T.. smartblur         V->V       Blur the input video without impacting the outlines.
 TS. sobel             V->V       Apply sobel operator.
 ... split             V->N       Pass on the input to N video outputs.
 T.C spp               V->V       Apply a simple post processing filter.
 ... ssim              VV->V      Calculate the SSIM between two video streams.
 .S. stereo3d          V->V       Convert video stereoscopic 3D view.
 ..C streamselect      N->N       Select video streams
 ... subtitles         V->V       Render text subtitles onto input video using the libass library.
 ... super2xsai        V->V       Scale the input by 2x using the Super2xSaI pixel art algorithm.
 T.. swaprect          V->V       Swap 2 rectangular objects in video.
 T.. swapuv            V->V       Swap U and V components.
 .S. tblend            V->V       Blend successive frames.
 ... telecine          V->V       Apply a telecine pattern.
 T.. threshold         VVVV->V    Threshold first video stream using other video streams.
 ... thumbnail         V->V       Select the most representative frame in a given sequence of consecutive frames.
 ... tile              V->V       Tile several successive frames together.
 ... tinterlace        V->V       Perform temporal field interlacing.
 ... tlut2             V->V       Compute and apply a lookup table from two successive frames.
 ... tonemap           V->V       Conversion to/from different dynamic ranges.
 .S. transpose         V->V       Transpose input video.
 ... trim              V->V       Pick one continuous section from the input, drop the rest.
 T.. unpremultiply     N->V       UnPreMultiply first stream with first plane of second stream.
 T.. unsharp           V->V       Sharpen or blur the input video.
 T.. uspp              V->V       Apply Ultra Simple / Slow Post-processing filter.
 T.. vaguedenoiser     V->V       Apply a Wavelet based Denoiser.
 ... vectorscope       V->V       Video vectorscope.
 T.. vflip             V->V       Flip the input video vertically.
 T.. vignette          V->V       Make or reverse a vignette effect.
 ... vmafmotion        V->V       Calculate the VMAF Motion score.
 ... vstack            N->V       Stack video inputs vertically.
 TS. w3fdif            V->V       Apply Martin Weston three field deinterlace.
 ... waveform          V->V       Video waveform monitor.
 ... weave             V->V       Weave input video fields into frames.
 .S. xbr               V->V       Scale the input using xBR algorithm.
 TS. yadif             V->V       Deinterlace the input image.
 ... zmq               V->V       Receive commands through ZMQ and broker them to filters.
 ... zoompan           V->V       Apply Zoom & Pan effect.
 ... allrgb            |->V       Generate all RGB colors.
 ... allyuv            |->V       Generate all yuv colors.
 ... cellauto          |->V       Create pattern generated by an elementary cellular automaton.
 ..C color             |->V       Provide an uniformly colored input.
 ... frei0r_src        |->V       Generate a frei0r source.
 ... haldclutsrc       |->V       Provide an identity Hald CLUT.
 ... life              |->V       Create life.
 ... mandelbrot        |->V       Render a Mandelbrot fractal.
 ... mptestsrc         |->V       Generate various test pattern.
 ... nullsrc           |->V       Null video source, return unprocessed video frames.
 ... rgbtestsrc        |->V       Generate RGB test pattern.
 ... smptebars         |->V       Generate SMPTE color bars.
 ... smptehdbars       |->V       Generate SMPTE HD color bars.
 ... testsrc           |->V       Generate test pattern.
 ... testsrc2          |->V       Generate another test pattern.
 ... yuvtestsrc        |->V       Generate YUV test pattern.
 ... nullsink          V->|       Do absolutely nothing with the input video.
 ... abitscope         A->V       Convert input audio to audio bit scope video output.
 ... adrawgraph        A->V       Draw a graph using input audio metadata.
 ... ahistogram        A->V       Convert input audio to histogram video output.
 ... aphasemeter       A->N       Convert input audio to phase meter video output.
 ... avectorscope      A->V       Convert input audio to vectorscope video output.
 ... concat            N->N       Concatenate audio and video streams.
 ... showcqt           A->V       Convert input audio to a CQT (Constant/Clamped Q Transform) spectrum video output.
 ... showfreqs         A->V       Convert input audio to a frequencies video output.
 .S. showspectrum      A->V       Convert input audio to a spectrum video output.
 .S. showspectrumpic   A->V       Convert input audio to a spectrum video output single picture.
 ... showvolume        A->V       Convert input audio volume to video output.
 ... showwaves         A->V       Convert input audio to a video output.
 ... showwavespic      A->V       Convert input audio to a video output single picture.
 ... spectrumsynth     VV->A      Convert input spectrum videos to audio output.
 ..C amovie            |->N       Read audio from a movie source.
 ..C movie             |->N       Read from a movie source.
 ... abuffer           |->A       Buffer audio frames, and make them accessible to the filterchain.
 ... buffer            |->V       Buffer video frames, and make them accessible to the filterchain.
 ... abuffersink       A->|       Buffer audio frames, and make them available to the end of the filter graph.
 ... buffersink        V->|       Buffer video frames, and make them available to the end of the filter graph.
 ... afifo             A->A       Buffer input frames and send them when they are requested.
 ... fifo              V->V       Buffer input images and send them when they are requested.
$ r128gain -r -a -o -v debug .
2019-05-07 14:17:04,535 MainThread: Detected FFmpeg lib versions: libavutil: 55.78.100, libavcodec: 57.107.100, libavformat: 57.83.100, libavdevice: 57.10.100, libavfilter: 6.107.100, libavresample: 3.7.0, libswscale: 4.8.100, libswresample: 2.9.100, libpostproc: 54.7.100
2019-05-07 14:17:04,770 ThreadPoolExecutor-0_0: Analyzing loudness of files './10 - Vision Incision.opus', './02 - Kool Roc Bass.opus', './04 - Blisters on My Brain.opus', './08 - Lazer Sheep Dip Funk.opus', './11 - Nightime Story.opus', './06 - I Used to Fall in Love.opus', './07 - Battle Flag (feat. Pigeonhed).opus', './09 - Will I Get Out of Jail?.opus', './05 - How to Operate With a Blown Mind.opus', './01 - Warming Up the Brain Farm.opus', './03 - Kasparov's Revenge.opus'...
2019-05-07 14:17:04,795 ThreadPoolExecutor-0_1: Analyzing loudness of file './10 - Vision Incision.opus'...
2019-05-07 14:17:04,955 ThreadPoolExecutor-0_0: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./10 - Vision Incision.opus" -threads:1 1 -i "./02 - Kool Roc Bass.opus" -threads:2 1 -i "./04 - Blisters on My Brain.opus" -threads:3 1 -i "./08 - Lazer Sheep Dip Funk.opus" -threads:4 1 -i "./11 - Nightime Story.opus" -threads:5 1 -i "./06 - I Used to Fall in Love.opus" -threads:6 1 -i "./07 - Battle Flag (feat. Pigeonhed).opus" -threads:7 1 -i "./09 - Will I Get Out of Jail?.opus" -threads:8 1 -i "./05 - How to Operate With a Blown Mind.opus" -threads:9 1 -i "./01 - Warming Up the Brain Farm.opus" -threads:10 1 -i "./03 - Kasparov's Revenge.opus" -filter_threads 1 -map a -filter_complex "[0:a]anul[a_r128_in_0]; [a_r128_in_0]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_0]; [1:a]anul[a_r128_in_1]; [a_r128_in_1]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_1]; [2:a]anul[a_r128_in_2]; [a_r128_in_2]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_2]; [3:a]anul[a_r128_in_3]; [a_r128_in_3]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_3]; [4:a]anul[a_r128_in_4]; [a_r128_in_4]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_4]; [5:a]anul[a_r128_in_5]; [a_r128_in_5]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_5]; [6:a]anul[a_r128_in_6]; [a_r128_in_6]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_6]; [7:a]anul[a_r128_in_7]; [a_r128_in_7]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_7]; [8:a]anul[a_r128_in_8]; [a_r128_in_8]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_8]; [9:a]anul[a_r128_in_9]; [a_r128_in_9]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_9]; [10:a]anul[a_r128_in_10]; [a_r128_in_10]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_10]; [a_r128_in_fmt_0][a_r128_in_fmt_1][a_r128_in_fmt_2][a_r128_in_fmt_3][a_r128_in_fmt_4][a_r128_in_fmt_5][a_r128_in_fmt_6][a_r128_in_fmt_7][a_r128_in_fmt_8][a_r128_in_fmt_9][a_r128_in_fmt_10]concat=n=11:v=0:a=1[a_r128_in_concat]; [a_r128_in_concat]ebur128=framelog=verbose" -f null /dev/null
2019-05-07 14:17:05,044 ThreadPoolExecutor-0_1: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./10 - Vision Incision.opus" -filter_threads 1 -map a -filter:a ebur128=framelog=verbose -f null /dev/null
2019-05-07 14:17:05,220 ThreadPoolExecutor-0_0: Analyzing loudness of file './02 - Kool Roc Bass.opus'...
2019-05-07 14:17:05,220 ThreadPoolExecutor-0_0: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./02 - Kool Roc Bass.opus" -filter_threads 1 -map a -filter:a ebur128=framelog=verbose -f null /dev/null
2019-05-07 14:17:13,350 ThreadPoolExecutor-0_0: Analyzing loudness of file './04 - Blisters on My Brain.opus'...
2019-05-07 14:17:13,350 ThreadPoolExecutor-0_0: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./04 - Blisters on My Brain.opus" -filter_threads 1 -map a -filter:a ebur128=framelog=verbose -f null /dev/null
2019-05-07 14:17:16,117 ThreadPoolExecutor-0_1: Analyzing loudness of file './08 - Lazer Sheep Dip Funk.opus'...
2019-05-07 14:17:16,118 ThreadPoolExecutor-0_1: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./08 - Lazer Sheep Dip Funk.opus" -filter_threads 1 -map a -filter:a ebur128=framelog=verbose -f null /dev/null
2019-05-07 14:17:20,964 ThreadPoolExecutor-0_0: Analyzing loudness of file './11 - Nightime Story.opus'...
2019-05-07 14:17:20,964 ThreadPoolExecutor-0_0: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./11 - Nightime Story.opus" -filter_threads 1 -map a -filter:a ebur128=framelog=verbose -f null /dev/null
2019-05-07 14:17:23,673 ThreadPoolExecutor-0_1: Analyzing loudness of file './06 - I Used to Fall in Love.opus'...
2019-05-07 14:17:23,674 ThreadPoolExecutor-0_1: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./06 - I Used to Fall in Love.opus" -filter_threads 1 -map a -filter:a ebur128=framelog=verbose -f null /dev/null
2019-05-07 14:17:25,929 ThreadPoolExecutor-0_0: Analyzing loudness of file './07 - Battle Flag (feat. Pigeonhed).opus'...
2019-05-07 14:17:25,929 ThreadPoolExecutor-0_0: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./07 - Battle Flag (feat. Pigeonhed).opus" -filter_threads 1 -map a -filter:a ebur128=framelog=verbose -f null /dev/null
2019-05-07 14:17:30,552 ThreadPoolExecutor-0_1: Analyzing loudness of file './09 - Will I Get Out of Jail?.opus'...
2019-05-07 14:17:30,552 ThreadPoolExecutor-0_1: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./09 - Will I Get Out of Jail?.opus" -filter_threads 1 -map a -filter:a ebur128=framelog=verbose -f null /dev/null
2019-05-07 14:17:32,688 ThreadPoolExecutor-0_0: Analyzing loudness of file './05 - How to Operate With a Blown Mind.opus'...
2019-05-07 14:17:32,688 ThreadPoolExecutor-0_0: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./05 - How to Operate With a Blown Mind.opus" -filter_threads 1 -map a -filter:a ebur128=framelog=verbose -f null /dev/null
2019-05-07 14:17:38,418 ThreadPoolExecutor-0_1: Analyzing loudness of file './01 - Warming Up the Brain Farm.opus'...
2019-05-07 14:17:38,418 ThreadPoolExecutor-0_1: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./01 - Warming Up the Brain Farm.opus" -filter_threads 1 -map a -filter:a ebur128=framelog=verbose -f null /dev/null
2019-05-07 14:17:40,724 ThreadPoolExecutor-0_0: Analyzing loudness of file './03 - Kasparov's Revenge.opus'...
2019-05-07 14:17:40,725 ThreadPoolExecutor-0_0: /usr/bin/ffmpeg -hide_banner -nostats -threads:0 1 -i "./03 - Kasparov's Revenge.opus" -filter_threads 1 -map a -filter:a ebur128=framelog=verbose -f null /dev/null
2019-05-07 14:17:46,007 MainThread: Failed to analyze files './10 - Vision Incision.opus', './02 - Kool Roc Bass.opus', './04 - Blisters on My Brain.opus', './08 - Lazer Sheep Dip Funk.opus', './11 - Nightime Story.opus', './06 - I Used to Fall in Love.opus', './07 - Battle Flag (feat. Pigeonhed).opus', './09 - Will I Get Out of Jail?.opus', './05 - How to Operate With a Blown Mind.opus', './01 - Warming Up the Brain Farm.opus', './03 - Kasparov's Revenge.opus': CalledProcessError Command '['/usr/bin/ffmpeg', '-hide_banner', '-nostats', '-threads:0', '1', '-i', './10 - Vision Incision.opus', '-threads:1', '1', '-i', './02 - Kool Roc Bass.opus', '-threads:2', '1', '-i', './04 - Blisters on My Brain.opus', '-threads:3', '1', '-i', './08 - Lazer Sheep Dip Funk.opus', '-threads:4', '1', '-i', './11 - Nightime Story.opus', '-threads:5', '1', '-i', './06 - I Used to Fall in Love.opus', '-threads:6', '1', '-i', './07 - Battle Flag (feat. Pigeonhed).opus', '-threads:7', '1', '-i', './09 - Will I Get Out of Jail?.opus', '-threads:8', '1', '-i', './05 - How to Operate With a Blown Mind.opus', '-threads:9', '1', '-i', './01 - Warming Up the Brain Farm.opus', '-threads:10', '1', '-i', "./03 - Kasparov's Revenge.opus", '-filter_threads', '1', '-map', 'a', '-filter_complex', '[0:a]anul[a_r128_in_0]; [a_r128_in_0]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_0]; [1:a]anul[a_r128_in_1]; [a_r128_in_1]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_1]; [2:a]anul[a_r128_in_2]; [a_r128_in_2]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_2]; [3:a]anul[a_r128_in_3]; [a_r128_in_3]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_3]; [4:a]anul[a_r128_in_4]; [a_r128_in_4]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_4]; [5:a]anul[a_r128_in_5]; [a_r128_in_5]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_5]; [6:a]anul[a_r128_in_6]; [a_r128_in_6]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_6]; [7:a]anul[a_r128_in_7]; [a_r128_in_7]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_7]; [8:a]anul[a_r128_in_8]; [a_r128_in_8]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_8]; [9:a]anul[a_r128_in_9]; [a_r128_in_9]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_9]; [10:a]anul[a_r128_in_10]; [a_r128_in_10]aformat=sample_fmts=s16:sample_rates=48000:channel_layouts=stereo,afifo[a_r128_in_fmt_10]; [a_r128_in_fmt_0][a_r128_in_fmt_1][a_r128_in_fmt_2][a_r128_in_fmt_3][a_r128_in_fmt_4][a_r128_in_fmt_5][a_r128_in_fmt_6][a_r128_in_fmt_7][a_r128_in_fmt_8][a_r128_in_fmt_9][a_r128_in_fmt_10]concat=n=11:v=0:a=1[a_r128_in_concat]; [a_r128_in_concat]ebur128=framelog=verbose', '-f', 'null', '/dev/null']' returned non-zero exit status 1.
2019-05-07 14:17:46,008 MainThread: File './10 - Vision Incision.opus': loudness = -23.0 LUFS, sample peak = -
2019-05-07 14:17:46,008 MainThread: File './02 - Kool Roc Bass.opus': loudness = -23.0 LUFS, sample peak = -
2019-05-07 14:17:46,008 MainThread: File './04 - Blisters on My Brain.opus': loudness = -23.0 LUFS, sample peak = -
2019-05-07 14:17:46,008 MainThread: File './08 - Lazer Sheep Dip Funk.opus': loudness = -23.0 LUFS, sample peak = -
2019-05-07 14:17:46,009 MainThread: File './11 - Nightime Story.opus': loudness = -23.0 LUFS, sample peak = -
2019-05-07 14:17:46,009 MainThread: File './06 - I Used to Fall in Love.opus': loudness = -23.0 LUFS, sample peak = -
2019-05-07 14:17:46,009 MainThread: File './07 - Battle Flag (feat. Pigeonhed).opus': loudness = -23.0 LUFS, sample peak = -
2019-05-07 14:17:46,009 MainThread: File './09 - Will I Get Out of Jail?.opus': loudness = -23.0 LUFS, sample peak = -
2019-05-07 14:17:46,009 MainThread: File './05 - How to Operate With a Blown Mind.opus': loudness = -23.0 LUFS, sample peak = -
2019-05-07 14:17:46,010 MainThread: File './01 - Warming Up the Brain Farm.opus': loudness = -22.9 LUFS, sample peak = -
2019-05-07 14:17:46,010 MainThread: File './03 - Kasparov's Revenge.opus': loudness = -23.0 LUFS, sample peak = -
2019-05-07 14:17:46,010 MainThread: Album '.': loudness = SKIPPED, sample peak = SKIPPED
2019-05-07 14:17:46,010 MainThread: Tagging file './10 - Vision Incision.opus'
2019-05-07 14:17:46,013 MainThread: Tagging file './02 - Kool Roc Bass.opus'
2019-05-07 14:17:46,015 MainThread: Tagging file './04 - Blisters on My Brain.opus'
2019-05-07 14:17:46,017 MainThread: Tagging file './08 - Lazer Sheep Dip Funk.opus'
2019-05-07 14:17:46,039 MainThread: Tagging file './11 - Nightime Story.opus'
2019-05-07 14:17:46,047 MainThread: Tagging file './06 - I Used to Fall in Love.opus'
2019-05-07 14:17:46,052 MainThread: Tagging file './07 - Battle Flag (feat. Pigeonhed).opus'
2019-05-07 14:17:46,064 MainThread: Tagging file './09 - Will I Get Out of Jail?.opus'
2019-05-07 14:17:46,081 MainThread: Tagging file './05 - How to Operate With a Blown Mind.opus'
2019-05-07 14:17:46,112 MainThread: Tagging file './01 - Warming Up the Brain Farm.opus'
2019-05-07 14:17:46,118 MainThread: Tagging file './03 - Kasparov's Revenge.opus'

In generating the latter I've noticed another problem: despite the failure r128gain is producing an exit code of 0. I'd expect it to be something else so the failure can be detected from a calling script.

desbma commented 5 years ago

OK I have reproduced this, really stupid bug, I will provide a fix soon.

The return code of 0 is because only the album gain scan fails, the file are properly scanned and tagged with track gain.

alexmbird commented 5 years ago

Awesome, much appreciated.

WRT the return code - I get that the operation is partially successful, but after a user has explicitly specified --album-gain on the command line I'd say its absence counts as failure.

desbma commented 5 years ago

For the return code, you have to consider that in recursive mode, user might scan hundreds of albums, with sometimes corrupt files (that was the case for a previous issue).

But I actually agree with you, I think the return code should be non zero in that case (I have created #10 to remind me to fix this).

alexmbird commented 5 years ago

Good point. Maybe a --strict mode is the best way to go - it'll satisfy tagging absolutists like me without breaking the recursive behaviour for everyone else.

Anyhow thanks for the fix and thanks for r128gain itself - it's a great tool.