FFmpeg 또는 MKVToolNix를 사용하여 WebM에서 손실 없이 Opus 추출

FFmpeg 또는 MKVToolNix를 사용하여 WebM에서 손실 없이 Opus 추출

WebM에서 Opus 오디오 스트림을 ogg 또는 opus와 같은 다른 컨테이너로 재다중화할 때 이상한 문제를 발견했습니다.

스펙트럼 분석기를 통해 출력 파일을 실행하면 데이터에 손실/변경이 있음이 명확하게 표시됩니다. 여러 프로그램에서 확인하고 있지만 결과가 100% 정확한지는 확실하지 않습니다. FFmpeg와 MKVExtract를 모두 사용하여 여러 방법을 시도했지만 두 경우 모두 추출된 파일의 크기에 눈에 띄는 차이가 있습니다.

열심히 조사한 끝에 알게 된 사실은이 버그잘못된 정렬과 그에 따른 파일 크기의 변화를 설명할 수 있는 FFmpeg에서. 하지만 여기서는 더 많은 일이 벌어지고 있는 것 같습니다. Audacity를 사용하여 소스와 추출된 모든 파일을 32비트 WAV로 변환한 다음 다시 분석했습니다. 이 경우 실제 데이터의 차이와 함께 오프셋이 더욱 두드러집니다.

필요한 경우 더 편리한 일괄 처리를 위한 더 강력한 테스트 방법과 신뢰할 수 있는 도구가 있습니까?

이것은 몇 가지 추가 정보가 포함된 Audacity 및 Spek의 ​​스펙트럼 출력입니다.

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

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%

그리고 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 매개변수:

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

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

관련 정보