Problem with invalid metadata of a FLAC file

635 Views Asked by At

i need to upload audio files (mainly WAV/FLAC) to an API. I validate these files by checking the output of ffprobe. I have a media file at hand that seemingly fulfills all requirements of the API (Sample rate, bitrate, etc.) but has one anomaly that probably causes the rejection. (It plays fine though) The file looks like this:

$ ffprobe sample.flac 
ffprobe version 4.2.4-1ubuntu0.1 Copyright (c) 2007-2020 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, flac, from 'sample.flac':
  Metadata:
    ENCODER         : Easy CD-DA Extractor (http://www.poikosoft.com)
  Duration: 00:04:42.31, start: 0.000000, bitrate: 572 kb/s
    Stream #0:0: Audio: flac, 44100 Hz, stereo, s16

Notice that the Metadata states, that the encoder is Easy CD-DA Extractor (http://www.poikosoft.com), however, running ffmpeg -i sample.flac -map_metadata -1 -c:a copy sample-out.flac and running ffprobe again, the actual encoder turns out to be Lavf58.29.100.

$ ffprobe sample-out.flac
ffprobe version 4.2.4-1ubuntu0.1 Copyright (c) 2007-2020 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, flac, from 'sample-out.flac':
  Metadata:
    encoder         : Lavf58.29.100
  Duration: 00:04:42.31, start: 0.000000, bitrate: 572 kb/s
    Stream #0:0: Audio: flac, 44100 Hz, stereo, s16

Now obviously, this is caused by this weird converter software, that encodes these files and puts the wrong encoder in the file's metadata. Now I have some questions:

  • Is this a required specification of flac files to include the encoder in the file metadata? Because the API documentation does not state anywhere if the metadata encoder has to match the actual encoder of the audio stream or what codecs are actually allowed.
  • How do I go about detecting such anomalies? Because currently, I have to copy the file with ffmpeg, check the encoder of the copied file. This process takes unnecessary compute resources.

Best regards, Florian

1

There are 1 best solutions below

0
ktmf On

If you want to verify the integrity of a FLAC file, you can do that with the flac tool. It is packaged with most Linux distributions, is on Homebrew for MacOS and there are binaries for Windows.

If you run flac -t somefile.flac or flac -t somedirectory/*.flac it will tell you about the integrity of the files.