Me encontré con un problema extraño al remixar la transmisión de audio de Opus desde WebM a otro contenedor como ogg u opus.
Pasar los archivos de salida a través de un analizador de espectro muestra claramente que hay pérdida/cambio en los datos. No estoy seguro de que los resultados sean 100% precisos, aunque varios programas lo confirman. Probé varios métodos usando FFmpeg y MKVExtract, pero en ambos casos, los archivos extraídos tienen diferencias notables (también en tamaño).
Después de una investigación exhaustiva, descubríeste erroren FFmpeg, lo que podría explicar la desalineación y, por tanto, el cambio en el tamaño del archivo. Pero parece que están sucediendo más cosas aquí. Convertí el código fuente y todos los archivos extraídos a WAV de 32 bits usando Audacity y luego los analicé nuevamente. El desplazamiento es aún más pronunciado en este caso, junto con la diferencia en los datos reales.
¿Existen métodos de prueba más sólidos y herramientas confiables para un procesamiento por lotes más conveniente si es necesario?
Esta es la salida del espectro de Audacity y Spek con información adicional:
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
Este es el resultado de la extracción de FFmpeg:
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%
Y 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%
Parámetros CLI:
ffmpeg -i "source.webm" -vn -acodec copy "output.opus"
mkvextract "source.webm" tracks 0:"output.opus"