Verlustfreies Extrahieren von Opus aus WebM mit FFmpeg oder MKVToolNix

Verlustfreies Extrahieren von Opus aus WebM mit FFmpeg oder MKVToolNix

Beim Remuxen eines Opus-Audiostreams von WebM in einen anderen Container wie Ogg oder Opus bin ich auf ein merkwürdiges Problem gestoßen.

Wenn man die Ausgabedateien durch einen Spektrumanalysator laufen lässt, sieht man deutlich, dass es zu Datenverlusten/-änderungen kommt. Ich bin mir nicht sicher, ob die Ergebnisse 100 %ig genau sind, obwohl mehrere Programme das bestätigen. Ich habe mehrere Methoden mit FFmpeg und MKVExtract ausprobiert, aber in beiden Fällen weisen die extrahierten Dateien merkliche Unterschiede auf (auch in der Größe).

Nach gründlicher Recherche fand ich heraus,dieser Fehlerin FFmpeg, was die Fehlausrichtung und damit die Änderung der Dateigröße erklären könnte. Aber hier scheint noch mehr dahinterzustecken. Ich habe die Quelle und alle extrahierten Dateien mit Audacity in 32-Bit-WAVs konvertiert und sie dann erneut analysiert. Der Versatz ist in diesem Fall noch ausgeprägter, zusammen mit dem Unterschied in den eigentlichen Daten.

Gibt es robustere Testmethoden und zuverlässigere Tools für eine komfortablere Stapelverarbeitung, falls erforderlich?

Dies ist die Spektrumausgabe von Audacity und Spek mit einigen zusätzlichen Informationen:

Source file: audio.webm
Size: 2.94 MB
Spek: https://i.imgur.com/5NtmwG7.png
Audacity: https://i.imgur.com/hEs8Ajo.png

 

Extracted file using FFmpeg: audio_extracted_ffmpeg.opus
Size: 2.90 MB
Spek: https://i.imgur.com/5UBV3FV.png
Audacity: https://i.imgur.com/lsZl0Bt.png

 

Extracted file using MKVExtract: audio_extracted_mkvextract.opus
Size: 2.91 MB
Spek: https://i.imgur.com/waa1TOJ.png
Audacity: https://i.imgur.com/TAqyIst.png

 

Comparison between the source WebM and the FFmpeg Opus in Audacity:
Source file: https://i.imgur.com/xYciUfH.png
Extracted via FFmpeg: https://i.imgur.com/T8T02fx.png

Dies ist die Ausgabe der FFmpeg-Extraktion:

ffmpeg version 4.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.1.1 (GCC) 20190807
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  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
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, matroska,webm, from 'files/audio.webm':
  Metadata:
    encoder         : google/video-file
  Duration: 00:03:08.30, start: -0.007000, bitrate: 131 kb/s
    Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
Output #0, opus, to 'files/ffmpeg/audio_extracted_ffmpeg.opus':
  Metadata:
    encoder         : Lavf58.29.100
    Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
    Metadata:
      encoder         : Lavf58.29.100
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
size=    2975kB time=00:03:08.28 bitrate= 129.5kbits/s speed=6.57e+03x
video:0kB audio:2952kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.803061%

Und MKVToolNix:

Extracting track 0 with the CodecID 'A_OPUS' to the file 'files/mkvextract/audio_extracted_mkvextract.opus'. Container format: Ogg (Opus in Ogg)
Progress: 100%

CLI-Parameter:

ffmpeg -i "source.webm" -vn -acodec copy "output.opus"

mkvextract "source.webm" tracks 0:"output.opus"

verwandte Informationen