Du bist nicht angemeldet.

Marcus Gräfe

Administrator

  • »Marcus Gräfe« ist männlich
  • »Marcus Gräfe« ist der Autor dieses Themas

Beiträge: 5 941

Dabei seit: 14. August 2002

Wohnort: Düsseldorf

Hilfreich-Bewertungen: 564

  • Private Nachricht senden

1

Donnerstag, 5. Januar 2017, 14:45

ffmpeg ändert Audiolevel bei Kodierung von MP4-Datei mit AAC-Codec

Ich habe gerade ein großes Problem. Ich kodiere MP4-Dateien aus meinem Lagarith-Master (verlustfrei komprimiertes AVI) via ffmpeg (Version vom 27.12.16) mit folgender Zeile:

Quellcode

1
ffmpeg -i "%eingabe%" -c:v libx264 -preset veryslow -crf 22 -movflags +faststart -pix_fmt yuv420p -c:a aac -b:a 192k -f mp4 -y "%ausgabe%.mp4"

Relevant ist hier aber nur

Quellcode

1
-c:a aac -b:a 192k

Das Audiolevel bzw. die Peaks sind in der MP4-Datei deutlich verändert (im Gegensatz zum AVI). Grundsätzlich verstehe ich das, immerhin ist der Audiocodec AAC nicht verlustfrei. ABER: Der Ton ist total übersteuert! Das höre ich auf meinem PC komischerweise nicht, aber auf meinem Medienstreamer am TV deutlich. Kann man sich unmöglich anhören!

Was kann man da tun? Warum übersteuert der Ton?

Rockstar2

Super-Moderator

  • »Rockstar2« ist männlich

Beiträge: 520

Dabei seit: 14. Juli 2014

Wohnort: Hamburg

Hilfreich-Bewertungen: 159

  • Private Nachricht senden

2

Donnerstag, 5. Januar 2017, 14:55

Kann es sein, dass ffmpeg den Ton auf mehrere Soundspuren kopiert? Am Rechner hörst du dann eben den normalen Stereo Ton von Spur 1 und 2. Weil das Abspielprogramm so eingestellt ist. Das ignoriert die anderen vorhandenen Spuren. Am TV ist es dann womöglich so dass dein Medienstreamer alle Spuren downmixt und daher kommt das übersteuerte zustande?

Rockststar

Marcus Gräfe

Administrator

  • »Marcus Gräfe« ist männlich
  • »Marcus Gräfe« ist der Autor dieses Themas

Beiträge: 5 941

Dabei seit: 14. August 2002

Wohnort: Düsseldorf

Hilfreich-Bewertungen: 564

  • Private Nachricht senden

3

Donnerstag, 5. Januar 2017, 15:08

Nein, denn in Adobe Audition sehe ich, dass der Ton übersteuert ist.

Waveform des AVIs:


Waveform des MP4s:


Normalisiere ich das Audio des AVIs auf -0,1 dB, so ändert sich nichts, mache ich das beim MP4 kommt das hier:


Das sagt MediaInfo zum Audio:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Audio
ID                          : 2
Format                      : AAC
Format/Info                 : Advanced Audio Codec
Format profile              : LC
Codec ID                    : 40
Duration                    : 43 min
Duration_LastFrame          : -16 ms
Bit rate mode               : Constant
Bit rate                    : 192 kb/s
Channel(s)                  : 2 channels
Channel positions           : Front: L R
Sampling rate               : 48.0 kHz
Frame rate                  : 46.875 FPS (1024 spf)
Compression mode            : Lossy
Stream size                 : 61.3 MiB (3%)
Default                     : Yes
Alternate group             : 1


EDIT: Wenn ich das Lagarith vorher auf -9dB normalisiere und dann zum MP4 mache, so habe ich (natürlich) keine Übersteuerungen mehr, aber die Störgeräusche am TV bleiben. Höre ich mir die Datei nicht mit meinem Fantec-Medienstreamer, sondern direkt am TV an (aber gleiches Soundsystem), so ist an den Stellen, wo beim Fantec laute Kratzgeräusche zu hören sind, gar nichts zu hören. Quasi wie ein Abschneiden von übersteuerten Stellen.

Ich bin nun nicht 100% sicher, ob es eine Übersteuerung ist (auch wenn es so klingt), aber irgendwas stimmt mit dem MP4 nicht. Am PC, wie gesagt, klingt es wunderbar, am TV, direkt und per Streamer, nicht.

Ich habe zur Sicherheit natürlich mit dem Streaminggerät eine andere MP4-Datei von mir (aber Direktexport aus Premiere) getestet, klingt wunderbar.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Marcus Gräfe« (5. Januar 2017, 16:19)


Dr_Allcome

Registrierter Benutzer

Beiträge: 239

Dabei seit: 12. April 2012

Hilfreich-Bewertungen: 66

  • Private Nachricht senden

4

Donnerstag, 5. Januar 2017, 19:18

Das Audiolevel bzw. die Peaks sind in der MP4-Datei deutlich verändert (im Gegensatz zum AVI)


Das sollte bei 192K aber nicht vorkommen. Ich habe allerdings keine Erfahrung mit dem ffmpeg AAC encoder, sondern ich nehme immer den vom Fraunhofer Institut, also:

Quellcode

1
-c:a libfdk_aac -b:a 192k


Mit dem Fraunhofer Encoder hat sich bei mir das Audiolevel noch nie geändert. Alternativ kannst du den Sound aus dem AVI auch einfach direkt übernehmen, da Audio ja in der Regel recht klein ist, solange man kein PCM verwendet:

Quellcode

1
-c:a copy


Damit würde er dann den Originalsound aus dem AVI übernehmen und nicht neu kodieren.

Wenn du die Originaldateien noch hast, dann kannst du das auch recht einfach für bestehende Dateien fixen ohne das Video neu kodieren zu müssen.

EDIT:

Zitat


Am PC, wie gesagt, klingt es wunderbar, am TV, direkt und per Streamer, nicht.


Wenn's am PC geht, dann kommt der TV/Streamer Decoder evtl. einfach nicht mit dem Audiostream klar. Entweder weil der AAC-Decoder Schrott ist oder ffmpegs AAC-Encoder Schrott produziert. Ich tippe auf Ersteres, aber es könnte auch sein, dass der AAC Decoder am PC toleranter ist gegenüber Abweichungen vom AAC Standard. Der Fraunhofer Codec sollte da Aufschluss geben, denn der hält sich korrekt an den AAC Standard. Wenn's damit nicht geht, dann liegt's am Decoder.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Dr_Allcome« (5. Januar 2017, 19:38)


Marcus Gräfe

Administrator

  • »Marcus Gräfe« ist männlich
  • »Marcus Gräfe« ist der Autor dieses Themas

Beiträge: 5 941

Dabei seit: 14. August 2002

Wohnort: Düsseldorf

Hilfreich-Bewertungen: 564

  • Private Nachricht senden

5

Donnerstag, 5. Januar 2017, 19:39

Danke für die Antwort. Ich habe es jetzt so gelöst, dass ich den AAC-Export aus Premiere gemacht habe und dann meine durch ffmpeg erzeugten Videodateien mit der neuen Audiodatei bestückt habe:

Quellcode

1
ffmpeg -i "alt.mp4" -i "neu.aac" -map 0:v -map 1:a -codec copy -shortest "neu.mp4"

Bei der Gelegenheit die Frage, ob man irgendwie in einer Datei die Audiospur austauschen kann, ohne eine neue Datei zu erzeugen. Geht das irgendwie, mit irgendeinem Programm? Wenn ich in einer 10-GB-Datei die Audiodatei austausche, habe ich danach 20 GB Daten auf dem PC. Das würde ich gerne vermeiden.

Ich werde den Fraunhofer-Codec testen, allerdings kommt das für dieses Projekt nun zu spät.

In der Originaldatei ist das Audio PCM.

Dr_Allcome

Registrierter Benutzer

Beiträge: 239

Dabei seit: 12. April 2012

Hilfreich-Bewertungen: 66

  • Private Nachricht senden

6

Donnerstag, 5. Januar 2017, 19:52

Bei der Gelegenheit die Frage, ob man irgendwie in einer Datei die Audiospur austauschen kann, ohne eine neue Datei zu erzeugen. Geht das irgendwie, mit irgendeinem Programm?


Nicht das ich wüsste. Technisch wäre das natürlich möglich, aber da beim Austauschen des Streams ja das ganze Interleaving neu berechnet und umgeschrieben werden muss, würde das im Fehlerfall ungültige Originaldateien hinterlassen. Daher denke ich nicht, dass irgendein Multiplexer dieses Feature unterstützt. Das gäbe einfach zu viele frustrierte Anwender :-)

Marcus Gräfe

Administrator

  • »Marcus Gräfe« ist männlich
  • »Marcus Gräfe« ist der Autor dieses Themas

Beiträge: 5 941

Dabei seit: 14. August 2002

Wohnort: Düsseldorf

Hilfreich-Bewertungen: 564

  • Private Nachricht senden

7

Donnerstag, 5. Januar 2017, 23:37

Offenbar muss man zur Nutzung von "libfdk_aac" ffmpeg selbst neu damit kompilieren. Das ist mir doch etwas zu kompliziert, nur um das zu Testen.