AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TBitmaps2Video

TBitmaps2Video

Ein Thema von Renate Schaaf · begonnen am 26. Jul 2020 · letzter Beitrag vom 21. Mär 2021
Antwort Antwort
Seite 4 von 6   « Erste     234 56   
Renate Schaaf
Registriert seit: 25. Jun 2020
Ich verfolge dieses Forum seit einiger Zeit passiv mit viel Vergnügen und habe nützliche Hinweise gefunden.
Jetzt möchte ich gern mein neuestes Projekt zur Diskussion stellen, eine Klasse, die es ermöglicht sequentiell Bitmaps zu einem Video zusammenzustellen. Ich kann mir vorstellen, dass die/der eine oder andere sowas gebrauchen kann. Die Klasse baut auf den Libav(ffmpeg)-dlls auf, aber mein Ziel war es, ein interface mit leicht und intuitiv verständlichen Prozeduren und Einstellungen herzustellen, ohne dass man sich um die etwas obskuren und technischen Prozeduren in den dlls kümmern muss.

Jetzt zu finden auf GitHub:
https://github.com/rmesch/Bitmaps2Video

Update:
Source code: Bitmaps2Video_3.zip
Es werden jetzt 7 Codecs unterstützt, m.E. die wichtigsten.
Das geänderte interface ist jetzt:

Delphi-Quellcode:
///<summary>Sequentially encode bitmaps to a compressed video. Uses Libav Dlls. </summary>
  TBitmapEncoder = class
.....
    /// <param name="filename"> Output filename. Extension picks the container format (.mp4 .avi .mkv ..)
    /// </param>
    /// <param name="Width"> Video size in pixels (multiples of 2)</param>
    /// <param name="Height"> Video size in pixels (multiples of 2)</param>
    /// <param name="FrameRate"> Frames per second (can be slightly off in the resulting file)</param>
    /// <param name="Quality"> Encoding quality, scale from 0 to 100. 0 gives marginally acceptable quality </param>
    /// <param name="CodecId"> (TAVCodecID see UFormats.pas) Identifier of the codec to use. AV_CODEC_ID_NONE picks the default codec for the file extension. </param>
    /// <param name="VideoScaling">Resample algo used if video size differs from bitmap size </param>
    constructor Create(const filename: string; Width, Height: integer;
      FrameRate: integer; Quality: byte; CodecId: TAVCodecId = AV_CODEC_ID_NONE;
      VideoScaling: TVideoScaling = vsFastBilinear);

    /// <summary> Turn a Bitmap into a movie frame </summary>
    /// <param name="bm"> Bitmap(TBitmap) to be fed to the video. Will be converted to pf32bit if not already </param>
    procedure AddFrame(const bm: TBitmap);

    /// <summary> Hold the last frame </summary>
    /// <param name="EffectTime"> Displaytime(integer) in ms </param>
    procedure Freeze(EffectTime: integer);

    /// <summary> Add a picture which is displayed for a certain time </summary>
    /// <param name="bm"> Bitmap(TBitmap) of the picture to be displayed </param>
    /// <param name="ShowTime"> Time(integer) in ms for the display </param>
    procedure AddStillImage(const bm: TBitmap; ShowTime: integer);

    /// <summary> Make a smooth transition from SourceR to TargetR within EffectTime.</summary>
    /// <param name="bm"> The Bitmap(TBitmap) to be animated </param>
    /// <param name="SourceR"> Beginning rectangle(TRectF) within rect(0,0,bm.width,bm.height) </param>
    /// <param name="TargetR"> End rectangle(TRectF) within rect(0,0,bm.width,bm.height) </param>
    /// <param name="EffectTime"> Duration(integer) of the animation in ms </param>
    /// <param name="ZoomOption"> Quality of the zoom (zoAAx2, zoAAx4, zoAAx6, zoResample). </param>
    /// <param name="SpeedEnvelope"> Modifies the speed during EffectTime. (zeFastSlow, zeSlowFast, zeSlowSlow, zeLinear) </param>
    procedure ZoomPan(const bm: TBitmap; SourceR, TargetR: TRectF;
      EffectTime: integer; ZoomOption: TZoomOption;
      SpeedEnvelope: TZoomSpeedEnvelope = zeLinear);

    /// <summary> Close the file and make the output file usable. </summary>
    function CloseFile: Boolean;
Audio wird jetzt rudimentär unterstützt:
Delphi-Quellcode:
  /// <summary> Combine the video stream from VideoFile with the audio from Audiofile. The streams will just be copied, not encoded.
  ///Audio is clipped to video length. Raises exception if the format of the audio file is not supported.</summary>
  /// <param name="VideoFile"> (string) File which contains a video stream. Any audio stream present will be ignored. </param>
  /// <param name="AudioFile"> (string) Genuine audio file (.wav .mp3 .aac) the audio of which shall be added to the video in VideoFile. </param>
  /// <param name="OutputFile"> (string) Name of the file containing the newly combined video and audio. </param>
procedure MuxStreams2(const VideoFile, AudioFile: string;
  const OutputFile: string);

Das Projekt benötigt die ffmpeg-dlls und die zugehörigen Pascal-Headers. Beides kann man hier bekommen:
http://www.delphiffmpeg.com/downloads/

Näheres im Readme, und in meiner Antwort unten.

Ich bin sehr an Verbesserungsvorschlägen interessiert, vor allem, wie man die Schreibgeschwindigkeit erhöhen kann, und wie man eventuell die vorhandenen Libav-Filter dafür benutzen kann, und auch an Vorschlägen, was man noch einbauen sollte.

Renate
Angehängte Dateien
Dateityp: zip Bitmaps2Video_3.zip (460,3 KB, 40x aufgerufen)

Geändert von Renate Schaaf (26. Aug 2020 um 13:26 Uhr) Grund: Update
 
TurboMagic

 
Delphi 12 Athens
 
#31
  Alt 13. Aug 2020, 17:55
Unter Android gibt's wohl noch Probleme, da bin ich heute aber nicht mehr dazu gekommen das zu untersuchen.
Vielleicht morgen.

Die Header aus dem anderen Open Source Projekt die benutzt werden sind auch nicht mehr ganz aktuell.
Ein einfaches Ändern der Versionskonstante in ffmpeg.pas hilft aber auch nicht.
  Mit Zitat antworten Zitat
TurboMagic

 
Delphi 12 Athens
 
#32
  Alt 14. Aug 2020, 14:42
Hallo,

na, wie geht's mit dem Open Source Veröffentlichen voran?

Wir haben jedenfalls noch gravierende Probleme das unter Android zum Laufen zu bekommen.
Ich hab' mal unser Projekt hochgeladen, allerdings ohne die .so Dateien, damit die ZIP nicht
so groß wird.

Unser Problem ist, dass die nötigen .so Dateien auf dem Android Gerät nie geladen werden,
egal ob wir die nach assets\internal, .\assets\internal\ oder .\assets\internal\LibAV
bereitstellen. Wenn man die LoadLibrary Aufrufe unter ANdroid debuggt bekommen diese auch
immer nur einen Dateinamen aber keinen Pfad übergeben.

=> wo müssen diese shared objects hin?

Die nötigen .so Dateien für die Leute, die das nachvollziehen möchten bekommt man hier:
https://github.com/PassByYou888/FFMP...oid-armeabi-v7

Grüße

TurboMagic
Angehängte Dateien
Dateityp: zip FFMPEG_Android_Source_Only.zip (24,2 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
TurboMagic

 
Delphi 12 Athens
 
#33
  Alt 15. Aug 2020, 12:57
Hallo Renate,

darf ich mal höflich fragen, warum du in deinen Demoprojekten das Ausgabeverzeichnis
rausgenommen hast? Dadurch landen alle generierten Dateien im Quellcode Ordner und ein
Compilieren für Android geht so auch nicht.

In den Projektoptionen sollte das unter Delphi-Optionen/Ausgabeverzeichnis und
Unit-Ausgabeverzeichnis jeweils das hier drin stehen: .\$(Platform)\$(Config)

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Renate Schaaf

 
Delphi 11 Alexandria
 
#34
  Alt 15. Aug 2020, 17:11
Zitat:
darf ich mal höflich fragen
Hier ist die höfliche Antwort:

Weil ich das dproj nicht mit eingepackt habe, wo sowas gespeichert wird.
Das dproj hat schon zu viel Ärger für mich bereitet, wenn ich es mit anderen Delphi-Versionen aufgerufen habe, deshalb.
Vielleicht sollte ich es demnächst trotzdem mitschicken.

Es tut mir leid, dass du so viel Ärger hast. Halt die Ohren steif.

Renate
Renate
  Mit Zitat antworten Zitat
Renate Schaaf

 
Delphi 11 Alexandria
 
#35
  Alt 26. Aug 2020, 13:39
Ich habe das Projekt auf GitHub hochgeladen:

https://github.com/rmesch/Bitmaps2Video

Hoffe, ich hab es einigermaßen richtig gemacht.

Es gibt zwei Versionen der Encoder-Klasse:

TBitmapEncoder
relativ stabil unter Win32 und Win64

TBitmapEncoderM
abgespeckte Multi-Plattform-Version
Sehr Alpha! (Ich kann nur Win testen!)
Kompiliert für Win32, Win64, Android, Android64, Demo läuft bei mir unter Win.

Demos für beide enthalten, FFMpeg-headers und libraries auch. Die Demos sollten direkt laufen,
da die dlls hoffentlich in den richtigen Verzeichnissen schon vorhanden sind.

Werde noch Grizzly's Vorschlag einbauen, aber jetzt brauch ich erstmal ne Pause

Gruß Renate
Renate
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

 
Delphi 11 Alexandria
 
#36
  Alt 26. Aug 2020, 14:46
Danke Renate Schaaf, ich finde es mega das im GitHub auch die nötigen Dll's enthalten sind, ich hatte mich zu doof angestellt die richtigen beim erst-Versuch zu finden, sollte ja nun klappen und ich werde da, auf Windows beschränkt, mich mal mit beschäftigen!

Super Arbeit!!!!
  Mit Zitat antworten Zitat
TurboMagic

 
Delphi 12 Athens
 
#37
  Alt 26. Aug 2020, 15:13
Danke auch von meiner Seite!
Ich schaue es mir bei Gelegenheit an!
  Mit Zitat antworten Zitat
TurboMagic

 
Delphi 12 Athens
 
#38
  Alt 28. Aug 2020, 18:44
So, habe eben einen Pullrequest abgesetzt.
Ich habe die Cross Plattform Demo ein wenig umgebaut, so dass diese nun unter
Android 32 Bit läuft. Setzt dadurch aber Delphi 10.3.3 als Mindestversion voraus.

Bitte mal anschauen was ich gemacht habe und ggf, akzeptieren/integrieren.

Irgendwo gab's glaube ich auch .so Dateien für 64 bit und eine neue
Portierung der Header. Das müsste man mal anschauen und ins Projekt integrieren.
  Mit Zitat antworten Zitat
Renate Schaaf

 
Delphi 11 Alexandria
 
#39
  Alt 29. Aug 2020, 08:41
Zitat:
Bitte mal anschauen was ich gemacht habe und ggf, akzeptieren/integrieren.
Hab's integriert. Vielen Dank!

Die 64Bit Android-Libraries sind doch vorhanden, oder versteh ich da was falsch?
Ich werde mir wohl doch irgend so ein Android-Teil zulegen müssen.

Gruß!
Renate
  Mit Zitat antworten Zitat
Rollo62

 
Delphi 12 Athens
 
#40
  Alt 29. Aug 2020, 09:18
Unbedingt, Android ist cool
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz