Wie behebt man den ffmpeg-Fehler „Eingabe enthält (nahe) nan/+-inf“?

Ich versuche, einige alte WMVs in MP4s zu konvertieren, aber ffmpeg wird es nicht tun. Ich bekomme immer wieder folgenden Fehler:

 input contains (near) nan/+-inf
 audio encoding failed

Genauer verwendeter Befehl ist:

 ffmpeg -i input.wmv -vf "scale=320:240,setsar=1" -crf 24 -c:a aac -b:a 48k -ac 1 -movflags +faststart output.mp4

Wenn es hilft, gibt ffprobe Folgendes aus:

Users\name>ffprobe input.wmv
ffprobe version N-90143-gb6652f5100 Copyright (c) 2007-2018 the FFmpeg developers
  built with gcc 7.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --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-libmfx --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth
  libavutil      56.  7.101 / 56.  7.101
  libavcodec     58. 12.102 / 58. 12.102
  libavformat    58.  9.100 / 58.  9.100
  libavdevice    58.  2.100 / 58.  2.100
  libavfilter     7. 12.100 /  7. 12.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
[wmv3 @ 0000020416485e40] Extra data: 8 bits left, value: 0
Input #0, asf, from 'input.wmv':
  Metadata:
    WMFSDKNeeded    : 0.0.0.0000
    DeviceConformanceTemplate: MP@LL
    WMFSDKVersion   : 11.0.5358.4827
    IsVBR           : 0
  Duration: 00:27:02.46, start: 0.000000, bitrate: 205 kb/s
    Stream #0:0(eng): Audio: wmav2 (a[1][0][0] / 0x0161), 32000 Hz, 2 channels, fltp, 32 kb/s
    Stream #0:1(eng): Video: wmv3 (Main) (WMV3 / 0x33564D57), yuv420p, 320x240, 168 kb/s, 14.99 fps, 14.99 tbr, 1k tbn, 1k tbc
[wmv3 @ 00000204164fe740] Extra data: 8 bits left, value: 0
Hängt definitiv mit dem Audio zusammen. Folgendes konnte ich ausführen: ffmpeg -i input.wmv -crf 24 -an -movflags +faststart output.mp4. Ich habe jedoch viele Warnungen "vergangene Dauer x.xxxxxx zu groß" erhalten.
Ich habe versucht, den ursprünglichen Befehl mit höheren und niedrigeren -b:aWerten auszuführen, habe aber die gleichen Fehler erhalten.
Kannst du die Datei teilen?

Antworten (1)

Wenn Sie einen ffmpeg-Build haben libfdk_aac, können Sie diesen Encoder verwenden, da er diesen Fehler nicht meldet.

Mit Ihrem aktuellen Build müssen Sie das Audio zuerst in 16-Bit-Integer-Samples konvertieren.

ffmpeg -i input.wmv -vf "scale=320:240,setsar=1" -crf 24 -af aformat=s16p -c:a aac -b:a 48k -ac 1 -movflags +faststart output.mp4
Danke dir. Was ist aber das eigentliche Problem? Was ist mit dem Audio des wmv falsch, dass ich dies zuerst tun müsste?
Während eines Transformationsprozesses waren einige der erzeugten Koeffizienten in einigen Frequenzbändern zu groß, soweit ich das beurteilen kann. Keine Verbindung mit dem Eingangscodec oder -format.
Danke, rendert jetzt wie erwartet. Hast du das schon mal gesehen? Mir passiert das nur bei diesen alten WMVs, die ich habe. Und sie sind ziemlich alt. Dieser wurde 2008 aufgenommen, mit Technologie aus dem Jahr 2002.
Nein, das ist ein esoterischer Fehler innerhalb der Verschlüsselungsmaschinerie. Es ist irgendwie seltsam, dass der Encoder die Koeffizienten nicht einfach glättet.