Hi,
ganz früher mal habe ich ein paar Bilddateien, einen Sound dazu und ein paar Infos in einer ini genommen, alles eine Datei gepackt und das ein Videoformat genannt.
Nun hat mir das aber irgendwann nicht mehr gefallen, und so habe ich kurzerhand etwas neues draus gemacht. Dieses neue Format möchte ich euch hier vorstellen.
Unten findet ihr die Units meines aktuellen FVF-
SDK, sowie Beispiele für einen Player und
(NEU) einen Encoder (unterstützt bisher nur Video, kein Audio). Erstellt euch ein
Package und tut mindestens die FVFPlayer.pas rein, diese Komponente könnt ihr aufs Form ziehen und nutzen. Oder ihr erstellt die Komponente im OnCreate... Siehe dazu die Beispiele, diese nutzen keine Packages (ihr müsst ggf. die Suchpfade in den Projekteinstellungen anpassen, die Struktur im Archiv entspricht nicht der Struktur in meiner Ablage).
Unterstützte Formate:
- Video
- (NEU) BGR8[R/B/M] (Farbreduktion 8 Bit mit Schwerpunkt auf rot/blau/gemischt)
- (NEU) BGR8[R/B/M]I (Farbreduktion 8-Bit + Interlaced)
- BGR16 (Farbreduktion 16-Bit)
- BGR16I (Farbreduktion 16-Bit + Interlaced)
- BGR24 (Unkomprimiert)
- BGR24I (Interlaced)
- MJPEG (JPEG-Bilder; auch Interlaced)
- NONE (Dummy)
- Audio
- FMK (Audiodaten entsprechen FMK-Format)
- NONE (Dummy)
Zum Aufbau des Dateiformats:
Zuerst kommt folgender Header:
Delphi-Quellcode:
TFVFHeader = packed record
FVFSignatur: array[0..2] of Char; //Da steht 'FVF' drin
MajorVersion: Byte; //0
MinorVersion: Word; //2 (1 unterstützt nur Dateien bis 4GB, s.u.)
Width: Word;
Height: Word;
FrameTime: Word; //ms pro Frame
end;
Dann kommen zwei nullterminierte
Ansi-Strings, z. B.
Diese geben das verwendete Video- (erstes) und Audioformat an. Im Beispiel sind es die Dummys, welche verwendet werden, um z. B. Videos ohne Audiospur oder Musik ohne Video zu speichern. Leider gibt es momentan noch keine Audiocodecs (außer dem Dummy-Codec)...
Darauf folgen nochmal zwei Int64 (bei Dateiversion 0.1 LongWord/32-Bit), z. B.
Diese geben die Größe der Video- und Audiodaten an. Dann folgen die eigentlichen Daten.
Der Audio-Dummy benötigt noch die Zeit, wie lange das (eventuelle) Video ohne Audio gehen soll, da diese noch nirgends gespeichert wurde. Normalerweise kann das nämlich aus den Audiodaten - falls benötigt - ermittelt werden. Daher haben wir hier 4 Bytes dafür reserviert. Dies könnte folgendes DWord sein:
Im Beispiel haben wir also eine leere, eine Sekunde dauernde, Stille erzeugt. Nach den Audiodaten kann theoretisch alles mögliche stehen, das wird nicht mehr verarbeitet. Es wäre z. B. denkbar, wie auch bei MP3s, am Ende Tags anzuhängen (mit den ID3v1-Dags ist es somit kompatibel).
Mfg
FAlter