News:

--

Main Menu

mp4 wird nach Schnitt riesengroß

Started by Micha, June 03, 2024, 08:34:33 AM

Previous topic - Next topic

Micha

Grüße Euch!
Ich sammle mp4 Musikvideos, rein privat nur für mich und mein Hobby, alles rechtmäßig. Manchmal möchte ich ein Video am Anfang beschneiden. Wenn ich dabei nicht genau ein Frame treffe kommt eine Meldung (siehe unten) und ich muss dann oben im Dropdown "Video-Codec" den Wert von "Copy" auf neu "Mpeg4 AVC (x264)" ändern, um ein browsertaugliches Format zu erhalten.
Genauso wenn ich einen Video Filter verwenden will. Da muss ich auch erst "Mpeg4 AVC (x264)" einstellen bevor "Video/Filter" (Strg Alt F) überhaupt anklickbar wird.

Alles gut und alles schön, aber: ganz oft wird die Datei megariesengroß. Beispiel in YT: Erasure - A little respect in 1920 x 1080 Bild avc1.640028 und Ton mp4a.40.2 mit der Größe von 120.691.790 Byte, weitere Details gern per Nachricht. Beschneide es so, dass der schwarze Rand links und rechts weg ist (Automatik) und speichere im Video-Codec "Mpeg4 AVC (x264)", Audio-Codec "Copy" und Ausgabeformat "MP4 Muxer". Da kommt eine Datei mit der Größe 218.391.012 Byte raus. Das ist fast eine Verdoppelung obwohl genau genommen etwas entfernt wurde.  ;D

Mir ist klar, dass das seinen Grund hat, aber wie kann ich das verhindern? Welche Einstellung/-en muss ich treffen, um unter Beibehaltung der Bild- und Tonqualität den Speicherbedarf nicht so explodieren zu lassen?

Bedanke mich!  :)

Die Meldung:
You cannot view this attachment.

eumagga0x2a

Verwendung von Abmessungen, die nicht ein Multiples von 16 (besser: 64) sind, verschlechtert Komprimierbarkeit (1920x1080 wird intern als 1920x1088 kodiert und der Streifen von 8 Pixel Breite bei Dekodierung weggeschnitten).

Die Abstände zwischen Keyframes (GOP size) zu vergrößern und die Qualität herunterschrauben hilft, die Größe des Videostreams zu verringern.

Micha

Hi eumagga0x2a und danke für die Antwort!

Quote from: eumagga0x2a on June 14, 2024, 05:07:30 PMVerwendung von Abmessungen, die nicht ein Multiples von 16 (besser: 64)
Habe es mit 1472 x 1024 probiert. Dateigröße neu: 215.459.735, gegenüber 1438 x 1070 wurden also 1,3 % erspart. Noch nicht zufriedenstellend, denn wir sind noch immer bei 179 % gegenüber dem Original. Und wir haben nichts gemacht außer Ränder beschnitten.

Quote from: eumagga0x2a on June 14, 2024, 05:07:30 PMDie Abstände zwischen Keyframes (GOP size) zu vergrößern und die Qualität herunterschrauben hilft, die Größe des Videostreams zu verringern.
Das glaube ich dir aber ich möchte die Qualität erhalten wie sie ist. Ich möchte nur den Rand wegschneiden, sonst nichts ändern. Warum muss ich nach entferntem Bildrand die Qualität des Streams verschlechtern, um bei einer Dateigröße in der Nähe des Originals zu landen?
Und ich müsste das noch testen. Wo finde ich dieses GOP? Unter "Video-Codec" / "Konfigurieren" Reiter "Bild" finde ich die "GOP-Länge". Was muss ich da einstellen wenn die sichtbare Qualität unverändert bleiben soll?

Warum muss eine Datei zwingend größer werden, wenn ich etwas entferne? Ich verstehe das nicht.  :'(

Habe mal einen Versuch gemacht: und zwar die Originale mit 120.691.790 Byte geladen, oben bei "Video-Codec" Auswahl "Mpeg4 AVC (x264)" und unten bei "Ausgabeformat" Auswahl "MP4 Muxer" gemacht, ansonsten nichts geändert, nichts beschnitten, nichts gekürzt, garnichts geändert, nur gespeichert.
Ergebnis: 203.973.641 Byte. Warum??

Frage: was müsste ich einstellen, um nach dem Speichern eine Datei zu erhalten, die unverändert und gleich groß ist wie die Ausgangsdatei? Nicht neu Samplen oder wie nennt man das? Vielleicht komme ich über diesen Weg ans Ziel?

Viele Grüße!

Micha

Hi und guten Morgen Welt!

Ergänzende Info zum Thema: wenn ich die im Eröffnungsbeitrag erwähnte geschnittene Ergebnisdatei aus Avidemux mit 218.391.012 Byte durch FFmpeg schicke, um das fadeout am Ende zu ergänzen kommt eine Datei mit 149.624.657 Byte raus.
Kommando:ffmpeg -i "Erasure - A little respect.mp4" -filter_complex "[0:v]fade=t=out:st=198:d=3[v]; [0:a]afade=t=out:st=198:d=3[a]" -map "[v]" -map "[a]" -c:v libx264 -f mp4 -b:a 192k -ar 48000 "Erasure - A little respect_neu.mp4"Damit wäre meine endgültige Datei 124 % groß. Damit kann ich leben, auch wenn es etwas umständlich ist.

Das hatte ich hier schon mal gezeigt: https://avidemux.org/smif/index.php/topic,17920.0.html
Und ich glaube, ich habe durch die zusätzlichen Sound-Parameter auch die Tonfehler beseitigt. Da war in manchen Videos hinterher stellenweise ein grauenhaftes Klirren drin. Zum Weglaufen.

Welche Magie ist da im Spiel?  8)
Wer fasst sich ein Herz und erklärt einem Hobbyvideosammler diesen Zauber?  ;D  Es gibt auch 'n guten Kaffee!!

Oder noch besser: kriegen wir das nicht in Avidemux eingebaut, damit das alles in einem Durchlauf geht?

eumagga0x2a

Quote from: Micha on June 25, 2024, 09:52:19 AMDas glaube ich dir aber ich möchte die Qualität erhalten wie sie ist.

Bei der Standardkonfiguration von x264 in Avidemux wird die Qualität eben ziemlich nah an die Vorlage.

Quote from: Micha on June 25, 2024, 09:52:19 AMIch möchte nur den Rand wegschneiden, sonst nichts ändern.

Das ginge theoretisch indem man nicht das Bild beschneidet sondern die zu verwerfenden Ränder lediglich in SPS (sequence parameter set) ändert. Avidemux kann das (noch) nicht, und ich bin mir nicht sicher, dass sowas ins Design des Programms passt.

Ansonsten gilt das, was ich zu erklären versuche: selbst wenn nur ein einziger Pixel verändert wird, muss das Video neu kodiert werden, was bei verlustbehafteten Codecs stets die Qualität verschlechtert und/oder die Größe des Videostreams erhöht, schon allein dadurch, dass Verzerrungen und Rauschen von der letzten Komprimierung die Bildkomplexität erhöhen.

Quote from: Micha on July 15, 2024, 10:03:58 AMUnd ich glaube, ich habe durch die zusätzlichen Sound-Parameter auch die Tonfehler beseitigt. Da war in manchen Videos hinterher stellenweise ein grauenhaftes Klirren drin. Zum Weglaufen.

Bitte ein ursprüngliches Video (so kurz und klein wie möglich), ein Projekt Script aus dem alle relevanten Parameter der Bearbeitung (Audiofilter, Audio-Encoder und ihre Einstellungen) hervorgehen und das resultierende Video als Samples bereitstellen.

Quote from: Micha on July 15, 2024, 10:03:58 AMkriegen wir das nicht in Avidemux eingebaut, damit das alles in einem Durchlauf geht?

Filter, die gleichzeitig und synchron auf Video- und Tonspuren angewendet werden, würde ich in Avidemux nicht erwarten. Zumindest nicht eher jemand die Lust verspürt, die Anwendung vom Grund auf neu zu schreiben.


Micha

Hi!

Würde gern eine ausführliche Antwort posten aber der Spamfilter erkennt das falsch als Spam.
Was tun?

You cannot view this attachment.

Micha

Ich poste ein Screenshot der Preview Ansicht meiner Antwort. Müsst euch halt die URL's abschreiben.

You cannot view this attachment.

sark

#7
Hallo.

Die Vorschau kann nicht einfach übersetzt werden. Senden Sie eumagga0x2a eine private Nachricht mit Ihrer Antwort und er kann sie hier erneut veröffentlichen.

Micha

Hi sark!

Quote from: sark on July 20, 2024, 01:31:04 PMSenden Sie eumagga0x2a eine private Nachricht mit Ihrer Antwort und er kann sie hier erneut veröffentlichen.
Erledigt.

Grüße

eumagga0x2a

Danke, habe mir das Sample angesehen und angehört. Es klirrt streng genommen nichts, aber etwa bei 10 Sekunden scheint im Bass (Bassgitarre? Kontrabass pizz? Was auch immer da nach Klavier und Schlagzeug einsetzt) etwas zu übersteuern (nicht im Mix!). Da Avidemux nichts an der Tonspur verändert, entfällt für weitere Nachforschung die Geschäftsgrundlage :-)

Meine einzige Empfehlung: nichts am Video ändern. Dass jemand aus dem ursprünglich niedrig aufgelösten Material ein 1080p video erstellt hat ist schon schlimm genug.

Nun einige Kommentare:

Quote from: Micha on July 20, 2024, 08:51:44 AMEin "Projekt Script" habe ich nicht.

"Datei" --> "Projekt-Skript" --> "Als Projekt speichern..." nachdem alles zum Export (zum Speichern des Videos) bereit ist oder direkt danach. Wäre jetzt aber wirklich unnötig, denn Filterung und Neukodierung der Tonspur in Avidemux vom Tisch seien.

Bei Neukodierung in FFmpeg mit libx264 ohne Angabe von Bitrate, Qualität usw. werden die Voreinstellungen der libx264-Bibliothek benutzt (CRF 23), während Avidemux standardmäßig CRF 20 vom Encoder verlangt.

libx264 von sich aus:

x264 - core 164 r3108 31e19f9 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=24 lookahead_threads=4 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00


Von Avidemux angefragt:

Writing library                          : x264 core 157 r2969
Encoding settings                        : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=18 / lookahead_threads=3 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=20.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00


Der von ffmpeg ohne jegliche Filterung aus der Vorlage erzeugte Videostream ist 2,33 MiB groß – eine Erhöhung der Datenmenge um ca. 80%. Damit die Größe etwa gleich bleibt, muss der CRF von 23 weiter auf ca. 30 erhöht, also die Qualität entsprechend gesenkt werden. Die Qualität wird hier aber sinnlos fürs originalgetreue Abbilden von Klötzchen und sonstigen Bildstörungen verschwendet.

Ich sehe das Problem nicht in der Software sondern in der Zielsetzung.

Micha

Guten Morgen und vielen Dank für die schnelke Antwort!

Quote from: eumagga0x2a on July 21, 2024, 11:47:32 PMEs klirrt streng genommen nichts, aber etwa bei 10 Sekunden scheint im Bass (Bassgitarre? Kontrabass pizz? Was auch immer da nach Klavier und Schlagzeug einsetzt) etwas zu übersteuern (nicht im Mix!).
Ja genau das ist es! In welcher/-n der 3 Versionen hast du es gehört?

Quote from: eumagga0x2a on July 21, 2024, 11:47:32 PMMeine einzige Empfehlung: nichts am Video ändern.
Jaaaa! Das will ich ja auch nicht. Aber ich müsste wenigstens beschneiden und fade in/out hinzufügen können. Wie mache ich das denn am besten ohne den Rest zu verändern?

Quote from: eumagga0x2a on July 21, 2024, 11:47:32 PMDer von ffmpeg ohne jegliche Filterung aus der Vorlage erzeugte Videostream ist 2,33 MiB groß – eine Erhöhung der Datenmenge um ca. 80%.
Stop. Mißverständnis! Avidemux macht aus 1.611.967 neu 4.212.559. Das war mein Problem. FFmpeg macht daraus dann wieder 3.056.507. Mit FFmpeg sparte ich also 1.156.052 Byte und hatte am Schnittergebnis von Avidemux gleichzeitig fade out dran!
Aber wenn du das Problem auch noch hörst, ist es wohl doch noch nicht behoben. Ich hatte zwischenzeitlich eine Änderung meiner Hardware und dachte, ich höre es nicht mehr.  :'(
Und jetzt weiß ich ja dank deiner Details, dass FFmpeg die Qualität doch wieder herabsetzt. Also keine Lösung mehr.

Quote from: eumagga0x2a on July 21, 2024, 11:47:32 PMIch sehe das Problem nicht in der Software sondern in der Zielsetzung.
Meine neue Zielsetzung ist: wenigstens vorne unabhängig von keyframes beschneiden und manchmal vorne/hinten fade in/out hinzufügen. Das Beschneiden der Ränder will ich sein lassen.
Gibt es dann eine Lösung ohne Qualitätsänderung und ohne explodierende Dateigröße? :o

Viele Grüße und besten Dank!

eumagga0x2a

Quote from: Micha on July 22, 2024, 06:58:36 AMIn welcher/-n der 3 Versionen hast du es gehört?

In allen drei, natürlich. Die Übersteuerung, wenn es wirklich dazu kam, betraf wahrscheinlich nur einen Kanal (ein Instrument) vor dem Abmischen. Das gemischte Signal ist nicht übersteuert.

Quote from: Micha on July 22, 2024, 06:58:36 AMAber ich müsste wenigstens beschneiden und fade in/out hinzufügen können.

Wie gesagt, IMHO die einzige verlustfreie Option zum Beschneiden (Bild beschneiden) wäre die in H.264 Extradaten (genauer gesagt, in SPS – sequence parameter set) kodierten Werte zu ändern, sprich, SPS dekodieren, mit geänderten Werten für wegzuschneidenden Ränder neu erzeugen (vgl. die Implementierung in x264), dabei beachten, dass Beschnitt nur um eine gerade Anzahl von Pixeln möglich ist, und anschließend die zentral gespeicherten globalen Extradaten (die unglückliche Bezeichnung "codec extradata" beschreibt eine Anleitung für den Dekoder, wie die Bits im Datenstrom zu interpretieren sind) und, falls vorhanden, auch "in-band extradata", die bei jedem Keyframe wiederholt werden, austauschen.

Mir ist kein Tool dafür bekannt, aber als Ansatz könnte das interessant sein.

Ein- und Ausblenden fürs Video ist ohne Neukodierung komplett unmöglich.

Wäre das ursprüngliche Video bereits mit derselben x264 Version erstellt worden und somit die vollständige Konfiguration des Encoders bekannt, könnte man allerdings nur den gefilterten Teil ab dem letzten GOP davor neu kodieren, anhängen und im Kopiermodus zusammenfügen ("smart copy").

Letztere Operation wäre zum Schnitt nicht an Keyframes (genauer, an Frames, die IDR sind = instantaneous decoder refresh = Frames, wo der Dekoder alles, was bisher gewesen ist, vergessen und das Leben neu anfangen darf) ebenfalls erforderlich.

Praktisch bedeutet es: no way.

Zu Streamgröße nach Neukodierung habe ich bereits alles gesagt, was ich dazu sagen konnte: es ist eine Abwägung zwischen Nähe an die Vorlage, die mit höheren Datenmengen zu bezahlen ist, und stärkerer Komprimierung, die mit größeren Abweichungen (schlechterer Qualität) von der Vorlage einhergeht. Die sehr niedrige Qualität der Vorlage verschlechtert die Komprimierbarkeit zusätzlich.

Quote from: Micha on July 22, 2024, 06:58:36 AMMeine neue Zielsetzung ist: wenigstens vorne unabhängig von keyframes beschneiden und manchmal vorne/hinten fade in/out hinzufügen.

Komplett ohne Neukodierung sollte sich der Anfang mit "edit lists", einem Feature des MP4 Containers, überspringen lassen (nicht alle Player unterstützen dies korrekt). Fade in/out ohne Neukodierung gibt wie gesagt die Mathematik nicht her. Als "smart copy" wäre es extrem schwierig bzw. ebenfalls unmöglich (alle Teile der Extradaten – SPS, PPS und VPS, gegebenfalls auch einige Typen von SEI – müssten geparst und sich mit x264 bitgenau nachbilden lassen).

Konkret im Bezug auf Avidemux bedeutet dies, dass leider nichts davon zu erwarten ist. Komplexe Filter (solche, die gleichzeitig auf Video and Audio angewandt werden) könnte es irgendwann geben, aber wahrscheinlich erst nach einem Rewrite der ganzen Anwendung.

Micha

Danke für deine Zeit und deine Antworten eumagga0x2a!