![]() |
Bitmaps2Video für Windows Media Foundation
Liste der Anhänge anzeigen (Anzahl: 1)
Aktualisierung:
Eine erste Version des Projekts gibt es jetzt auf ![]() Für Details siehe das Readme dort. /Aktualisierung In letzter Zeit habe ich an einem port von Bitmaps2Video von ffmpeg auf Windows Media Foundation gearbeitet, denn mir gefällt nicht, dass es diese ganzen Dlls benötigt. Bevor ich das Resultat auf GitHub hochlade, möchte ich es gern hier vorstellen, da ich nur begrenzte Möglichkeiten zum Testen habe. Außerdem hoffe ich, vielleicht ein paar Tips für noch bestehende Probleme zu bekommen (siehe unten). Die Dokumentation von WMF hat mich schon ein paar Mal an den Rand des Wahnsinns getrieben. Was es tut: Enkodiert eine Serie von Bitmaps als Video, wobei man als Benutzer nur Grundkenntnisse über Videos haben muss. Kann 2 Sorten von Übergängen zwischen Bildern als Beispiel dafür, wie man mehr einbauen kann. Unterstützt Dateiformate .mp4 mit Codecs H264 oder H265, oder .wmv mit Codec WMV3. Benutzt die GPU zum Enkodieren, falls unterstützt, falls nicht, wird Software benutzt. Benutzt parallele Routinen wann immer das Sinn macht. Hat eine experimentelle Routine zum Einfügen von Audio (Muxer). Geht im Moment nur für H264 und WMV3. Was es braucht: VCL-basiert Braucht die hervorragenden MF-headers von ![]() Den Ordner src von MFPack zum Bibliothekspfad hinzufügen, packages müssen nicht installiert werden. Um alle features zu nutzen, braucht es Windows10 oder höher. Delphi-Versionen: Braucht wahrscheinlich mindestens XE3, aber ich habe nur 11.3 zum Testen. Probleme: Ich bin nicht allzu angetan von der Enkodier-Qualität, liegt vielleicht an meiner nVidia-Karte. Der Audio-Muxer müsste eigentlich auch für H265 funktionieren, denn es geht, wenn ich ffmpeg für's muxen nehme. Ich habe bis jetzt nicht rausgekriegt, wie ich Video-clips einfüge. Renate |
AW: Bitmaps2Video für Windows Media Foundation
Errata: uToolsWMF hat eine unit Z_prof in der uses-Liste. Einfach entfernen. Kommt davon, wenn man zu viel Zeug im path hat.
Inzwischen habe ich glaube ich rausgefunden, wie man die Qualität verbessern kann. Um Zeile 270 rum in uBitmap2VideoWMF.pas die folgenden Änderungen machen:
Code:
if succeeded(hr) then
hr := MFCreateAttributes(attribs, 4); //<--------- change to 4 here // this enables hardware encoding, if the GPU supports it if succeeded(hr) then hr := attribs.SetUINT32(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, UInt32(True)); // this seems to improve the quality of H264 and H265-encodings: {*************** add this *********************************} // this enables the encoder to use quality based settings if succeeded(hr) then hr := attribs.SetUINT32(CODECAPI_AVEncCommonRateControlMode, 3); {**************** /add this *******************************} if succeeded(hr) then hr := attribs.SetUINT32(CODECAPI_AVEncCommonQuality, 100); if succeeded(hr) then hr := attribs.SetUINT32(CODECAPI_AVEncCommonQualityVsSpeed, 100); |
AW: Bitmaps2Video für Windows Media Foundation
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Renate,
es gibt verschiedene Lanczos Varianten. Dein Lanczos sieht bei mir so aus:
Delphi-Quellcode:
Es erzeugt eine Rasterung bei 80% Verkleinerung, siehe Anhang Lanczos.jpg
function LanczosXFilter(Value: Extended; LanczosWidth: Integer): Extended;
var y, yinv: Extended; begin Value := abs(Value); if Value = 0 then Result := 3 else if Value < 1 then begin y := Pi * Value; yinv := 1 / y; Result := sin(3 * y) * sin(y) * yinv * yinv; end else Result := 0; end; Meine Variation von Lanczos erzeugt kein Raster:
Delphi-Quellcode:
Weiter finde ich es problematisch auf 3rd Party MfPack, zu verweisen, das es inzwischen in mehr als 4 unterschiedlichen Versionen mit unterschiedlichen Unitnamen gibt. Daduch erhält dein Package eine Halbwertszeit von MfPack. Nicht gut!
function LanczosXFilter(Value: Extended; LanczosWidth: Integer): Extended;
// Normalisierte SinC Funktion = sin(Pi*x) / (Pi*x) function SinC(Value: Extended): Extended; begin if Value <> 0 then begin Value:= Value * Pi; Result:= Sin(Value) / Value; end else Result:= 1; end; begin if Value < 0 then Value:= -Value; if Value < LanczosWidth then Result:= SinC(Value) * SinC(Value / LanczosWidth) else Result:= 0; end; Auch die Objektorientierte Kapselung mit Class of Funktionen in Records usw. ist total overpowered. Die tatsächlichen WindowAPI Funktionen sind keine Class Funktionen, brauchen das nicht. Liebe Grüße Klaus Schaaff |
AW: Bitmaps2Video für Windows Media Foundation
Zitat:
Hast Du ein Repo, wo ich mir Deine Version mal angucken kann? Zitat:
Inzwischen habe ich den Tip bekommen, mfPack als submodule hinzuzufügen, das muss ich mir aber erstmal zu Gemüte führen.
Code:
Das ist Geschmackssache. Werde ich garantiert nicht ändern. Und in wiefern sind Records overpowered? Ist doch nun wirklich keine "rocket-science":). Mit Klassen und Records zu arbeiten ist einfach viel strukturierter, allein wegen Code-Completion.
Auch die Objektorientierte Kapselung mit Class of Funktionen in Records usw. ist total overpowered.
Im Gegenteil, ich hatte schon eine vage Idee, einigen Media-Foundation-Funktionen ein Klassengerüst zu geben. Dauernd muss man diese Attributs-Namen nachgucken, und wie man sie wohin und wann und wie einlesen muss. Renate |
AW: Bitmaps2Video für Windows Media Foundation
Zitat:
Du hast die Funktion falsch skaliert, da ist es kein Wunder, wenn Mist dabei rauskommt. Meine Filter sind alle auf Weite 1 normalisiert, und die Skalierung auf den Radius mache ich erst, wenn ich die Gewichte berechne. Willst Du auf Weite LanczosWidth umskalieren, musst du das so machen: f_skaliert(value)=1/LanczosWidth*f(value/LanczosWidth). Und wenn dann, wie ich stark annehme, LanczosWidth=3 ist, dann haben wir, schwupp, die gleiche Funktion. Rechne es nach :). Renate |
AW: Bitmaps2Video für Windows Media Foundation
Hallo Renate,
das Ganze ist eine ökonomische Kalkulation. Was möchte ich? Wieviel Mannstunden sind dafür nötig? Was bekomme ich anschließend dafür. Das ist in deinem Fall, nicht ohne weiteres sofort absehbar und dafür würde ich mir an deiner Stelle Zeit lassen. Das Lanczos Raster kann durchaus bei dir korrekt funktionieren, so wie du skalierst. Mir ist damals (vor 10 Jahren) aufgefallen, die Rechenzeiten gehen dort so drastisch in die Höhe, dass ich Lanczos nur der Vollständigkeit aufgenommen habe. Im übrigen habe ich keine GPU-Implementierung. Bei mir sieht die Liste so aus: Nearest Bilinear Bicubisch Mitchell Lagrange BSpline Lanczos Halftone Hier ist Halftone sehr wichtig für Verkleinerungen optimal. Für Vergrößerungen gar nicht zu gebrauchen. Ähnlich alle anderen. Man muss vorher genau wissen, welcher Algorithmus ist gut für Vergrößerungen und welche sind gut für Verkleinerungen. Leider kann ich dein Packet nicht compilieren, da bei mir Delphi 2009 die höchste Version ist. Zur objektorientieren Kapselung, mir reichen die Delphi 7 Implemntierungen vollkommen aus. Und nochmals, das sind nur meine persönlichen Erfahrungen mit dem Thema, wie gesagt vor 10 Jahren. Die gesammte Delphi-Gemeinde scheint zu akzeptieren, dass heute niedrigere Delphi-Versionen ausgeschlossen werden. Das mag ich nicht. Dennoch, es bleibt allein deine Entscheidung. Liebe Grüße Klaus Schaaff |
AW: Bitmaps2Video für Windows Media Foundation
Zitat:
Leider habe ich keine Ahnung, was Delphi 2009 schon alles so kann, aber anonyme Prozeduren kannte das wahrscheinlich noch nicht. Die records sind nicht das Problem, die kann man schnell entkoppeln. Ich habe nur 2006 und 11.3. 2006 war die letzte Pro-Version, die ich mir leisten konnte. Ich würde gerne frühere Versionen unterstützen, aber ohne Test geht das nicht. Ich hab noch eine alte Resampler-Version, die unter 2006 läuft, und die auch ohne threads schon ziemlich schnell war. Wenn es Dich interessiert, kann ich die Version mal salonfähig machen, und hier hochladen, dann hast Du einen Vergleich. Allerdings ohne Demo. Renate |
AW: Bitmaps2Video für Windows Media Foundation
Ohne jetzt den Code zu kennen: Delphi 2009 kannte schon Enhanced Records, aber noch keine (Custom) Managed Records. Und nein: Anonyme Methoden kannte es noch nicht, ebenso wenig enthielt es die Parallel Programming Library.
|
AW: Bitmaps2Video für Windows Media Foundation
Danke, Thomas, damit kann ich schon was anfangen. Die Sachen, die es nicht kann, brauche ich gar nicht unbedingt.
Renate |
AW: Bitmaps2Video für Windows Media Foundation
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Renate,
bevor du eine Delphi 2006 Version vorbereitest, schau dir bitte erst mal den Anhang Hilfe.pdf an. Dort erkennst du meine Intension. Praktische Hilfen, die man wirklich braucht. z.B: Druckgröße Auflösung in [Pixel / Inch], [Pixel / cm], [Pixel / mm]. Da gibt es kein Herumrechnen mehr. Es gibt eine Vorgabe, die man direkt einstellen kann. Das ist es, wenn man ständig Graphik bearbeitet und nicht einmal im Jahr. Das sind meine Vorstellungen eines Expertenprogramms, nicht die, die man in Smartphone Apps findet, in Android oder sonst wo und dann schnell einmal im Jahr unter stark abgespeckten Bedingungen mal was macht. Dort in der Hilfe.pdf Seite 6. Liebe Grüße Klaus Schaaff |
AW: Bitmaps2Video für Windows Media Foundation
Zitat:
|
AW: Bitmaps2Video für Windows Media Foundation
Hallo Renate,
es tut mir leid, wenn du den Eindruck gewonnen hast, ich würde Hinweise verstreuen auf Minderwertigkeit deiner Arbeit. Ich habe anscheinend zu viel rumgemeckert, das hätte ich gern und das noch... Besonders unter dem Aspekt, dass ich es nicht nach ca. 7 Std investierter Arbeit zustande brachte dein Package zu compilierem, bestätigt deinen Eindruck, dass ich eigentlich keine Ahnung habe, was dein Programm macht. Bitte entschuldige meine Vorschläge. Liebe Grüße Klaus Schaaff |
AW: Bitmaps2Video für Windows Media Foundation
Hallo Renate,
zu deinen Referenzen und Reputation sollte ich noch erwähnen. Viele deiner Arbeiten verfolge ich seit ca. 1993. Dazu gehörten: unit Parser10; unit AviWriter_2; unit IFSCodeEditor; unit IFSDesigner; unit IFSDesignForm; unit IFSDisplay; unit IFSMathUtils; unit IFSTriangle; unit MathUtils; unit VirtualExplorerListviewEx; Das sind alles wegweisendende Arbeiten, an denen ich selbst sehr viel lernen konnte. Diese Komponenten habe ich heute noch auf meinem System installiert, weil diese es wert sind! Und, wahrscheinlich ist das nur ein kleiner Teil all deiner Arbeiten. Liebe Grüße Klaus Schaaff |
AW: Bitmaps2Video für Windows Media Foundation
Hallo, Klaus,
Ich hätte meinen Post gestern am liebsten gelöscht. Tut mir leid, dass ich Dich missverstanden habe. Ich hätte gar nicht gedacht, dass jemand das alte Zeug von mir noch kennt. Arbeit an der Legacy-Version geht etwas schleppend voran, wenn man mit der alten Delphi-Version arbeitet, merkt man erst, welche Annehmlichkeiten die neueren bieten. Ich porte jetzt die neue Version nach Delphi2006, anstatt die alte aufzufrischen, dann sind die threads auch gleich mit dabei. Dass Du die neue Version nicht complilieren konntest, ohne zu wissen, wie die Sachen ineinander greifen, ist verständlich. Hätte ich auch nicht geschafft. Alles Gute, Renate |
AW: Bitmaps2Video für Windows Media Foundation
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Renate,
ich möchte gern mal etwas ausprobieren, was auch dir nützlich sein könnte, zum Zeitvertreib oder was auch immer. Ich lade mal hier meinen Screengrabber hoch, da es in diesem Forum schon öfters Probleme gab wegen Virusmeldungen, daher ein Schuss ins Blaue. Ich habe bei Virustotal meine *.exe prüfen lassen. Nur bei MaxSecure gab es eine positive Virusmeldung, bei allen anderen war der Befund negativ. Liebe Grüße Klaus Schaaff |
AW: Bitmaps2Video für Windows Media Foundation
Zitat:
Aber gut, die Entscheidung liegt natürlich bei Dir. Für den Fall, dass Du das noch nicht wusstest: Wenn Du ein Delphi 11 gekauft hast, ist da normalerweise auch noch je eine Lizenz für alles bis zurück zu Delphi 2007 + Delphi 7 dabei. Allerdings muss man sich die Lizenzkeys dafür rechtzeitig herunterladen, nach einem Jahr (oder so) funktioniert der Link nicht mehr. (Einer meiner Kollegen hat das verbummelt :-( ). |
AW: Bitmaps2Video für Windows Media Foundation
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Gott sei Dank habe ich genügend Erfahrung mit den alten Versionen bis 2006. Unicode ist bei mir egal. Die Records habe ich entweder in Klassen umgewandelt oder auf normale reduziert. Leider habe ich für Delphi 11 nur die Community, bin aber glücklich, dass es die gibt. Zitat:
Die Legacy-Version vom Bitmap-Resampler ist fertig, Demo eingeschlossen. Hoffe es passiert nichts Unerwartetes mehr beim Ausprobieren. Leider werden die Bitmaps u.U. nicht in Originalgröße angezeigt, von wegen GDI-Scaling. Die Version müsste auch in Delphi 7 laufen, wenn man alle ;inline entfernt. Delphi 6 hatte Schwierigkeiten mit threads, ist also nicht empfohlen. Edit: Ich hab ein Icon gelöscht, weswegen Delphi meckert, macht aber nichts. Einfach Projekt-Optionen anpassen. Renate |
AW: Bitmaps2Video für Windows Media Foundation
Hallo Renate,
Der Bitmap Resampler läuft bei mir inzwischen auf Delphi 5. Das Konzept mit der nachträglichen Skalierung ist wesentlich besser als meines. So ganz verstanden habe ich es aber noch nicht, das braucht noch etwas Zeit. Ich werde dann alles nochmals nach Delphi 2009 portieren und sehen, was da 'rauskommt. Alles in Allem ist das Projekt ein hochkomplexes Thema. Im Moment sehe ich noch kein Land, wohin das führen wird. All meine Vorschläge sind erst mal obsolet. Nochmals, Entschuldigung ... für meine unverblümten Einfälle. Auf jeden Fall, danke für deine Geduld und die Arbeit, die du dir gemacht hast! Liebe Grüße Klaus Schaaff |
AW: Bitmaps2Video für Windows Media Foundation
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Renate |
AW: Bitmaps2Video für Windows Media Foundation
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Renate,
was mich von Anfang an viel mehr interessiert hat, ist die Möglichkeit deines Package ein Video aus Einzelbildern rendern zu lassen. Ich habe vor langer Zeit einen eigenen RayTracer ähnlich POV-Ray v3.6 geschrieben und diesen über die Jahre immer mal wieder erweitert mit neuen Features. Also, der RayTracer rendert bei mir eine 3D-Szene (1 Frame). Die 3D-Szenensprache enthält Animationsparameter x, y, z nach denen alles z.B. Orte der Körper, Texturen in Zeitschritten verändert werden kann. Der erste Frame wird mittels AviWriter_2 dem Video hinzugefügt. Dann der nächste Frame gerendert, hinzugefügt usw. bis ein kleines Video fertig ist. Damit du mir einfacher folgen kannst füge ich im Anhang Sinus.zip hinzu. Blöd ist jetzt, man kann hier im Forum keine *.mp4 als Anhang hochladen. Sinus.zip enthält Sinus.mp4 ein gerendertes Video. Dort wird nur die Oberflächen-Textur mit der Funktion Sinus variiert. Nun zum meiner Frage: Ich habe es nie geschafft in das Video zusätzlich eine Wave-Datei zu rendern. Video Schnittsoftware kann sowas, da legt man mehrere Einzelbilder in den Videostream und in den Audiostream eine *.wav und rendert das zusammen. Gibt es in deinem Bitmaps2Video eine Möglichkeit Audiostreams hinzuzufügen? Liebe Grüße Klaus Schaaff |
AW: Bitmaps2Video für Windows Media Foundation
Zitat:
![]() , aber die wirst Du wahrscheinlich mit 2009 nicht direkt benutzen können. Die WMF-version kann inzwischen auch Audio direkt mit enkodieren, aber soweit ich bisher erfahren habe, kann man die Demo nur mit 10.3 oder höher compilieren, das kann aber daran liegen, dass ich in den utilities eine d2d1_1-routine habe, die ich aber gar nicht brauche. Renate |
AW: Bitmaps2Video für Windows Media Foundation
Hallo Renate,
hier meine AviWriter_2 Infos: AviWriter -- a component to create rudimentary AVI files by Elliott Shevin, with large pieces of code stolen from Anders Melander version 1.0. Please send comments, suggestions, and advice to shevine@aol.com. Extended to AviWriter_2 by Renate Schaaf renates@xmission.com ![]() Ps.: Der Editor setzt die email und url immer als link, obwohl die alle tot sind. Ich habe die tags enfernt, und dann wieder neue Vorschau. Die tags sind wieder d'rin. Keine Ahnung wie das geht. Gut, das ich von dir weiß, mit Delphi 2009 komme ich nicht weiter. Das bedeuted für mich zwei offene Wege. Entweder ich ich hole mir die Delphi 11.3 CE, oder ich schaue mir mal ganz genau den Quelltext von Bitmaps2Video an. Das ist doch schon mal was, danke. Liebe Grüße Klaus Schaaff |
AW: Bitmaps2Video für Windows Media Foundation
Hallo, Klaus,
Könnte Dein Audio-problem daran liegen, dass .mp4 kein unkomprimiertes Audio unterstützt? Müsstest Du .avi nehmen. Renate |
AW: Bitmaps2Video für Windows Media Foundation
Hallo Renate,
Zitat:
Folge war immer: Der MS-Mediaplayer reagiert nicht mehr. Und, auch bei *.avi das Gleiche. Ich habe dann mit 'XMedia Recode' die Streams analysiert, dort sind die Audiostreams korrekt vorhanden. Ein Neurendern mit 'XMedia Recode' erzeugte erst dann mit einem *.ac3 oder *.mp3 ein Video mit Ton. Ein anderes Tool zur Analyse war VCL-portable, dort ditto. Nun, es gab Fehler in Windows, bei denen ich erst nach 3 Jahren die Ursache fand. Manchmal waren das banale Ursachen, wie zu lange Pfadnamen und weiß der Geier, was sonst noch. Meine Vermutung ist heute, ich hatte damals die ersten *.mp4 Codec-Implementierungen. Vielleicht ist das heute alles PILLE-PALLE und passe. Liebe Grüße Klaus Schaaff |
AW: Bitmaps2Video für Windows Media Foundation
Hallo Renate,
da ich leider unter Delphi 2009 keine Lösung erhalten habe für die Portiertung von Bitmaps2Video, werde ich in naher Zufunft keine weiteren Kommentare dazu haben. Auch mit AviWriter_2 konnte ich kein Audiostream hinzufügen. Es ist besser, wenn ich da später nochmals ansetze, um sehen zu können, wie sowas funzt. Deshalb klinke ich mich besser aus dem Thread für unbestimmte Zeit aus. Ich wünsche den Projekt Bitmaps2Video weiterhin den Zuspruch den es verdient. Liebe Grüße Klaus Schaaff |
AW: Bitmaps2Video für Windows Media Foundation
Das Projekt gibt es jetzt auf GitHub, siehe Aktualisierung im Eingangsbeitrag.
Hoffe, es ist von Nutzen und funzt :) Renate |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz