Jump to content

Größe vom MP4 (automatisch nach Aufnahme)


Ulli_T.

Recommended Posts

Hallo,

 

meine TV Aufnahmen (wandle ich aktuell noch mit einem externen Programm in eine MP4 Datei um, weil für mich die Größe des Ergebnisses besonders wichtig ist.

Grundsätzlich funktioniert bei mir natürlich auch die automatische Umwandlung mit "generate mp4/mp3".

Was mir aber daran nicht gefällt, ist die Größe des Ergebnisses. 

Beispiel (einer ca. 100 Minuten TV Aufnahme von Tele5 / SD):

MPG: 1,8 GB

MP4 mit  generate mp4/mp3: 1,6 GB

MP4 mit VideoProc: 0,9 GB

 

Beim VideoProc (siehe auch Bild) ist meiner Ansicht nach nichts eingestellt, was diesen großen Unterschied erklärt.

Auch kann ich bei den beiden MP4s keinen nennenswerten Unterschied beim Ansehen erkennen.

 

Da ich leider den Befehl, der hinter dem generate mp4/mp3 nicht verstehe:

Könnte mir jemand sagen, was ich daran ändern muss, damit ich anschließend ein kleineres, aber möglichst nicht/kaum schlechteres Ergebnis bekomme?

(mp3 muss natürlich weiterhin funktionieren, weil ich das auch nutze).

 

Vielen Dank

 

Ulli

MP4.jpg

Link to comment

Die FFmpeg-Kommandozeile kann man mit Rechtsklick auf das Media Server Tray-Icon -> Mit Adminrechten konfigurieren -> Aufgaben -> generate mp4/mp3 -> Bearbeiten verändern. Das ganze ist etwas kompliziert, weil hier mit Fallunterscheidungen gearbeitet wird und je nach Input etwas anderes passiert. Was die enthaltenen Bedingungen in Großbuchstaben und geschweiften Klammern bedeuten, ist im Media Server-Änderungsverlauf (siehe Webinterface -> Links-Seite) für die Version 2.0.3 ersichtlich.

 

Die Anweisungen an FFMpeg sind so formuliert, dass das Umpacken in MP4 nach Möglichkeit ohne Transkodierung der Videodaten stattfindet, damit es schnell und ohne Qualitätsverluste über die Bühne geht. H.264 und  HEVC Video werden 1:1 übernommen. Dabei gibt es dann praktisch kaum eine Größenänderung.

 

Nur MPEG2 Video, da ungebräuchlich in MP4, wird in H.264 verwandelt. Das dürfte der hier angesprochene Fall sein

 

vor 5 Stunden schrieb Ulli_T.:

Beispiel (einer ca. 100 Minuten TV Aufnahme von Tele5 / SD):

MPG: 1,8 GB

MP4 mit  generate mp4/mp3: 1,6 GB

 

da eine MPG-Datei zwangsläufig MPEG2 Video enthält. Der dafür zuständige Teil der Kommandozeile ist

{IFN H264}{IFN HEVC}libx264 -vf yadif -pix_fmt yuv420p -profile:v baseline -preset medium -crf 18 -vf "scale=trunc(in_w/2)*2:trunc(in_h/2)*2"{ENDIF}{ENDIF}

Lies: "Wenn nicht H.264 Video und nicht HEVC Video dann..." Dort sieht man auch den von @YARD2 angesprochenen crf Wert. Aber der Teil gilt wie gesagt nur für Aufnahmen mit MPEG2 Video. Bei HD-Aufnahmen mit H.264 oder HEVC Video bleibt er wirkungslos. Sollen diese auch neu codiert werden, müsste man

{IF H264}copy{ENDIF}{IF HEVC}copy{ENDIF}

entfernen und auch die Bedingungen {IFN H264}{IFN HEVC} mitsamt dem dazugehörigen {ENDIF}{ENDIF} (aber nicht das dazwischen!).

 

Allerdings ist eine Umwandlung von H.264 in stärker komprimiertes H.264 eine zeitaufwändige Sache, die selbst eine schnelle CPU ins Schwitzen bringen und einige Zeit mit 100% Last laufen lassen wird, womöglich deutlich länger als der Film dauert. Und Qualitätsverluste gibt es dabei auf jeden Fall. Wieviel man für welche Reduzierung der Dateigröße in Kauf nimmt, ist Geschmackssache. Um optimale Ergebnisse zu erzielen, müsste man sich tiefgründiger mit den Möglichkeiten des libx264 Encoders auseinandersetzen und einige Versuche durchführen, da das Ergebnis auch immer vom Ausgangsmaterial abhängt.... also ich würde lieber bei VideoProc bleiben ;)

 

Link to comment

Ich habe den Wert von 18 auf 23 (was ja anscheinend der Standardwert ist) geändert.

Wie die Anleitung verspricht, reduziert sich die Größe der MP4 Datei erheblich und ist nun ungefähr halb so groß wie die ursprüngliche MPG Datei. 

Das finde ich prima - vor allem, weil für meine alten Augen kaum ein Unterschied in der Bildqualität zu erkennen ist...

 

Leider überfordert mich der Inhalt vom Link bezüglich der GPU Encodierung.

Einfach so wird die GPU leider nicht benutzt (sagt mir zumindest der Taskmanager).

Was ich dafür ändern muss, kann ich aus dem englischen Text leider nicht rauslesen.

 

Mein Prozessor stammt aus der Gemini Lake Baureihe. Daran sollte es also nicht scheitern.

Wenn ich jetzt noch die Geschwindigkeit der Umwandlung steigern, bzw. die Belastung der CPU etwas senken könnte...

Edited by Ulli_T.
Link to comment

Hier mal ein schneller Versuch, nicht sonderlich groß getestet (ffmpeg version 4.2.1).

ffmpeg.exe -i "{SOURCE_FILE}" -y -map 0:v -vf yadif -init_hw_device qsv=hw -filter_hw_device hw -vcodec h264_qsv -crf 18 -map 0:a? -c:a aac "{PATH_FILENAME}.mp4"


Erstelle eine neue Aufgabe bevor du die aktuelle löschst ?

Link to comment

@YARD2

 

Grundsätzlich könnte Dein "schneller Versuch" genau die Lösung für mich sein. Vielen Dank dafür.

Leider gibt es aber noch ein dickes "Aber".

Natürlich habe ich in den letzten 2 Stunden viel mehr ausprobiert als ich gleich schreibe.

Ich denke aber, dass folgendes das Problem genau genug beschreibt:

 

Ich habe eine Aufgabe (Kopie der Original generate mp3/mp4) und diese getestet -->  wird nach Aufnahmeende gestartet und funktioniert.

dann habe ich den Parameter Teil gelöscht und Deine Anweisung da hinein geschrieben (ab "-i") --> nach Aufnahmeende passiert nichts.

 

Wenn ich Deinen Befehl aber manuell absetze (natürlich Dateinamen statt der Platzhalter), dann funktioniert die MP4 Erstellung prächtig und nutzt definitiv auch die GPU.

 

Woran könnte es bloß liegen, dass Dein Befehl / Paramater nach der Aufnahme nicht die gewünschte Aktion auslöst.

 

Ulli

Edited by Ulli_T.
Link to comment

Mit der Aufgabe hab ich es nicht getestet, war keine Zeit mehr.

Bei mir wird es auch nicht gestartet.

Laut Log ist es gestartet, das ffmepg log sagt dass e den Direct3D nicht initialisieren konnte.

Probier mal das. Damit ging es bei mir.

-i "{SOURCE_FILE}" -map 0:v -vf yadif -vcodec h264_qsv -crf 18 -map 0:a? -c:a aac "{PATH_FILENAME}.mp4"

 

 

Link to comment

Hervorragend !!! Besten Dank !!! Genau so habe ich mir das gewünscht !!!

 

Obwohl ich nur einen Celeron J4105 in dem "DVB Rechner" habe, läuft die Umwandlung mit Nutzung der GPU relativ zügig (10 Minuten SD Aufnahme in gut 1 Minute).

Und erstaunlicher Weise ist das Ergebnis sehr kompakt und wird auf ca. 30% der mpg Größe komprimiert.

 

Also vielen Dank Euch beiden für die Hilfe und die ausführlichen Erklärungen.

Link to comment

Sehr schön.

Musst halt schauen ob die die Qualität/Größe passt.

Wenn nicht dann den crf anpassen. Default ist 23. Ich habs auf 18 gesetzt zum Testen.

The range of the CRF scale is 0–51, where 0 is lossless, 23 is the default, and 51 is worst quality possible.

 

@Griga

Die Intel GPU Umwandlung könnt ihr als Aufgabe gleich mit einbauen ?

Edited by YARD2
Link to comment

Die Qualität ist (mit meinen altersschwachen Augen) kaum von der MPG Aufnahme zu unterscheiden und die Kompression (habe ich ja schon geschrieben) bei 18 ist besser als ich gehofft hätte:

Fazit: Etwas weniger als 1/3 der aufgenommenen Größe bei unwesentlich schlechterer Bildqualität - und das mit vertretbarer Umrechnungszeit mit einem über 2 Jahre alten Billig Prozessor (Celeron J4105) - das ist weit mehr als ich erwartet habe!

Link to comment
Am 17.6.2020 um 17:51 schrieb YARD2:

Die Intel GPU Umwandlung könnt ihr als Aufgabe gleich mit einbauen

 

Ich glaube nicht, dass dafür ein großer Bedarf besteht. Das jemand in einer Zeit, in der ein Festplatten-Gigabyte nur noch 0,03 € kostet, Aufnahmen möglichst klein haben will, dürfte eher die Ausnahme sein. Vielleicht, wenn man sie auf einem Smartphone mit auf Reisen nehmen will... bei mir gab es den Bedarf zuletzt vor 15 Jahren, als ich noch Aufnahmen in DivX verwandelt und auf 700 MB-CDs archiviert habe.

 

Zudem ist MPEG2 Video auf dem absteigenden Ast und wird wohl zusammen mit SD aussterben. H.264 und HEVC werden wie gesagt einfach untranskodiert in das Ziel-Containerformat übernommen. Das braucht keine GPU-Beschleunigung.

 

Von Interesse ist sie heutzutage eher beim transkodierten Streaming (insbesondere bei on-the-fly-Transkodierung von TV), wenn man zwingend ein bestimmtes Zielformat und wegen Bandbreiten-Beschränkungen eine geringere Bitrate braucht, aber damit die Server CPU nicht übermäßig belasten will. Eine an die Nutzung bestimmter GPUs angepasste (und gut ausgetestete) ffmpegprefs.ini und iphoneprefs.ini würde ich gerne in den DMS mit aufnehmen.

 

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...