Bad Reception TV (BR-TV)

  • Ich habe heute mein erstes Video im BT-TV-Format fertig gestellt: das Musikvideo "We do it for the Spritgeld" von Retroblah.

    Hier kann man es herunterladen: Download C64_BR-TV_Retroblah_Spritgeld

    Ich habe auch eine Aufnahme davon auf Youtube hochgeladen:



    Als Basis habe ich die Datei von PJ genommen und mittels eines selbstgeschriebenen Tools die Bilder ausgetauscht. Die Musik habe mit dem Wavekonverter konvertiert und mittels Hexeditor ausgetauscht und für das Ändern des Dateinamens mir ebenfalls ein kleines Tool geschrieben. Zum Colorieren der einzelnen Szenen diente ebenfalls ein selbst geschriebenes Tool.


    Ich möchte demnächst auch ein weiteres BR-TV-Video mit Ausschnitten des gestrigen Kaffeeklatsch mit Chris Hülsbeck im Flipper- und Arcademusem Seligenstadt erstellen.


    Später möchte ich mich auch mal an einem Video mit Farbram versuchen, hier wäre es hilfreich, wenn du schreiben könntest, wie bei solch einem Video die Daten in der REU angeordnet sind.
    uıɐbɐ ʎɐqǝ uo pɹɐoqʎǝʞ ɐ ʎnq ɹǝʌǝ ɹǝʌǝu ןןıʍ ı
  • @daddlertl: Wow, hast du in der kurzen Zeit ein ganzes Video konvertiert? 8\|

    Ich habe heute mal die Festplatte aus dem mittlerweile dritten abgerauchten PC rausgenommen und zumindest die Files kopiert. Auf dem Rechner, den ich z.Z. verwenden muss kann ich leider nicht kompilieren bzw. weitere Tests mit Vice machen. Deshalb habe ich soeben alles erstmal "as is" (sprich: wenig komplett) hochgeladen...

    Den Player samt (unvollständigem) Readme gibt´s hier: csdb.dk/release/?id=160140
    Dort ist auch ein Link zur Dropbox mit allen Testvideos. Die Konvertierung der 6581 Waves habe ich "blind" machen müssen - ich hoffe, es hat sich dort kein Fehler eingeschlichen...

    :weg:
    "...please come again - when I´m not working!"
  • Tolles neues Video :thumbup:
    Ich würde mich ja auch gern daran versuchen, verstehe aber leider gar nicht, wovon ihr da alles schreibt. Ich muss wohl auf eine ausführliche Anleitung warten und auch wo man die Programme und Tools findet ;( Freue mich jedenfalls schon sehr darauf.
    Computer und Spielkonsolen gehören genutzt und nicht in die Vitrine.
  • Eine Anleitung zum Videoerstellen will ich eh noch schreiben. Nur muss ich dafür erstmal meinen PC wieder fit kriegen, um alles vor Augen zu haben. Die Anleitung wird allerdings in Englisch sein...

    Als kleinen Anfang kannst du ja mal versuchen, ein paar Bilder mit CSAM zu erstellen. Spiel einfach mal damit herum... :)

    Edit: Ein Blick auf mein Backup läßt mich zumindest schonmal die verwendeten Tools auflisten. Alle sind kostenlos (oder durch kostenlose gleichwertige Tools zu ersetzen) und es muss nicht programmiert werden.

    1. VirtualDub (oder sonstigen Video-Editor)
    Zum Zurechtschneiden und auf 320x200 Pixel Verkleinern des Videos

    2. CSAMSuper
    Zum Erstellen der Videodaten für den C64

    3. Cool Edit Pro 2 (oder sonstigen Audio-Editor)
    Zum Erstellen der Audio-Datei (Wave-Format, konvertiert auf 8Bit, pcm unsigned)

    4. HxD (oder gleichwertigen Hex-Editor)
    Zum Reinkopieren aller Screens und der Wave Datei in das REU-File. Ausserdem zum Editieren des Headers.

    5. VICE Emulator
    Zum Benutzen des "wave-convert.prg" Programmes, welches die zuvor unkonvertierte Wave-Datei auf der REU ins gewünschte Mahoney Format (6581 oder 8580) bringt. Zudem natürlich zum Testen :)

    6. AF7 Merge (optional)
    Das Tool fast mehrere Dateien zu einer zusammen. War für mich sehr nützlich, da ich damit dutzende einzelne Frames zu ganzen Szenen zusammenfügen konnte und somit auch nicht tausende Frames einzelnd per Hexeditor in die REU einfügen musste. Und weitaus übersichtlicher ist es auch, wenn man einen 4 Minuten Clip in ein paar einzelne Szenen zusammenfast statt 4000*2 Einzelfiles zu haben...

    7. CharPad (optional)
    Nützlich, falls man mal einen eigenen Zeichensatz erstellen oder in einzelnen Frames ein-zwei häßliche Zeichen korrigieren möchte.
    "...please come again - when I´m not working!"

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Squidward ()

  • Ich hänge mal meine Tools an, die ich zur Erstellung meines ersten BR-TV-Videos verwendet habe.

    Man kann sie hier herunterladen: Download


    Die Tools sind darauf ausgelegt, dass die Quellbilder von 0000.bmp bis xxxx.bmp durchnummeriert sind. Dies erreicht man mit den entsprechenden Einstellungen beim Export der Image Sequence in Virtual Dub (Filename leer, Filename suffix .bmp, Minimum number of digits in 4).

    Bisher können damit nur Videos im Stil von "Personal Jesus" (ein charset pro Frame ohne Farbram) erstellt werden.

    Die Tools haben nur eine rudimentäre Fehlererkennung, man sollte also darauf achten, die Programme mit korrekten Daten zu füttern und korrekte Eingaben vorzunehmen. Bitte regelmäßig Backups von den Arbeitsständen machen.

    Von allen Tools/Scrips liegt der Quellcode bei oder das Programm ist selbst der Quellcode (beim AutoIt-Script und BR-TV-Filenameeditor). Dadurch ist es jedem Nutzer möglich, die Tools/Scripte an seine Bedürfnisse anzupassen oder zu erweitern.

    Folgende Tools sind enthalten:


    auto-convert.au3
    ----------------

    Dies ist ein Script für AutoIt (welches Bedienungsabläufe von Windows-Anwendungen automatisieren kann). AutoIt kann man hier herunterladen: autoitscript.com/site/autoit/downloads/

    Dieses Script bedient das Programm CSAM Super.

    Vor dem Start des Scripts sollte man es mit dem Editor von AutoIt an seine Bedürfnisse anpassen (z.B. festlegen, welcher Bildbereich konvertiert werden soll).

    Danach sollte man das Programm CSAM Super starten und ein zu konvertierendes Bild aus dem gewünschten Quellverzeichnis auswählen, ohne die eigentliche Konvertierung zu starten. Auf diese Weise wird sichergestellt, dass das Script im korrekten Verzeichnis arbeitet.

    Das Script ist recht "dumm", es kann also sein, dass es bei Fehlern hängen bleibt oder etwas überspringt, daher sollte man gelegentlich prüfen, ob die Konvertierung noch läuft und am Ende überprüfen, ob alle Frames konvertiert wurden (jedes Frame hat eine Datei mit der Endung .LUT.raw und eine mit der Endung .nonlace.raw). Man sollte den Computer nicht für andere Aufgaben benutzen, während das Script läuft, da dies zu Fehlern in der Abarbeitung führen kann.


    BR-TV-Bildinjector
    ------------------

    Dieses Tool fügt die konvertierten Bilder in eine vorhandene reu-Datei ein (es wird ein Kopie mit der Namenserweiterung "mit neuen Bildern" erstellt). Als Basis empfiehlt sich die reu-Datei "REU_PersonalJesus_44100Hz".

    Die einzufügenden Bilder sollten idealerweise in einem Unterordner im Verzeichnis liegen, wo auch die reu-Datei liegt oder im gleichen Verzeichnis, wie die reu-Datei.

    Um Bilder einzufügen, zieht man die zu bearbeitende reu-Datei per Drag & Drop auf die BR-TV-Bildinjector_beta.exe. Wenn die Datei korrekt erkannt wurde, wird die Startadresse der Bilder angezeigt, bei PersonalJesus ist das A00000. An diese Adresse wird das Programm auch die neuen Bilder einfügen.

    Nun gibt man an, in welchem Ordner die einzufügenden Bilder liegen: liegen sie im gleichen Verzeichnis wie die reu-Datei, muss man einfach nur Enter drücken (nichts weiter eingeben), liegen sie in einem Unterverzeichnis im Verzeichnis in dem die reu-Datei liegt, gibt man den Name des Unterordners an, liegen die Bilder ganz woanders, muss man den kompletten Pfad eingeben, wobei man den Slash (/) statt den Backslash (\) verwenden muss, z.B. C:/BR-TV/Video/Bilder.

    Hat man das Verzeichnis korrekt ausgewählt, beginnt das Programm damit die Bilder in die neue reu-Datei einzufügen und zwar entsprechend der vierstelligen Bildnummer. Es ist somit auch möglich nur einen Teil der Bilder auszutauschen.


    BR-TV-Farbeditor
    ----------------

    Mit diesem C64-Programm (für die Verwendung in einem Emulator) kann man die Farben der Bilder verändern (3 Farben, der Hintergrund bleibt schwarz bzw. in der Farbe, die in den Metadaten der Videodatei angegeben ist). Vor dem Programmstart muss man die zu bearbeitende reu-Datei laden.

    Beim Programmstart wird zu Beginn kurz die Startadresse der Bilder angezeigt, bei PersonalJesus ist das A00000. Daran kann man erkennen, ob die reu-Datei korrekt erkannt wurde.

    Nun kann man angeben, in welchem Bildbereich (von... bis) man die Farben ändern möchte. Anschließend kann man wählen, ob man die Farben ändern oder löschen möchte (löschen bedeutet: es werden die Farben des vorherigen Frames verwendet). Beim Ändern der Farben gibt man die hellste, mittelhelle und dunkelste Farbe an (an diese Vorgabe sollte man sich halten, sonst sieht das Video beim Abspielen komisch aus).

    Anschließend kann man weitere Videobereiche einfärben.


    BR-TV-Filenameeditor
    --------------------

    Mit diesem simplen C64-Programm (für die Verwendung in einem Emulator) kann man den im Player angezeigten Dateiname und Author ändern (maximale Länge jeweils 16 Zeichen).
    uıɐbɐ ʎɐqǝ uo pɹɐoqʎǝʞ ɐ ʎnq ɹǝʌǝ ɹǝʌǝu ןןıʍ ı
  • daddlertl schrieb:

    Ich hänge mal meine Tools an, die ich zur Erstellung meines ersten BR-TV-Videos verwendet habe.

    Man kann sie hier herunterladen: Download
    :thumbup:
    Schreibt eines deiner Tools (am besten der Bildinjector) auch gleich die Spritepointer in jeden Screen oder hast du das noch mit meinem wave-converter gemacht? Wäre nämlich beim Bild-Einfügen sinnvoller und ist ja in jedem Screen unverändert...

    Zu dem Farbram:
    Sobald du das benutzt nimmt BR-TV stets den flexiblen Video-Player, der die Screen Metadaten ausliest. Dort schaut er nach, ob (nach den Screen-Daten) noch ein neuer Zeichensatz kommt (Charset-Flag = 1) und/oder noch ein Colorram (Colorram-Flag = 1). Die Reihenfolge ist Screen/Zeichensatz/Colorram. Durch die Flags kannst du aber auch nur den Colorram ändern - dann liegt dieser direkt nach den Screendaten in der REU. Oder nur den Zeichensatz.. Oder auch nur Screens (beide Flags = 0). Dementsprechend müssen natürlich die Daten in der REU liegen (zur besseren Übersicht werden auch beim Colorram 1024 Bytes gelesen)!

    Eine kleine Extrahürde gibt es aber: CSAM ist nicht für die REU ausgelegt, sondern für möglichst wenig Speicherplatz. Daher speichert es beim Farbbild leider nicht neben Screen (1kb) und Zeichensatz (2kb) auch den jeweiligen Colorram als 1kb Bild ab, sondern nur als Lookup-Table (256Bytes). Man muss also zunächst noch jedes Bild mit dem Colorram konstruieren, um danach das 1kb Abbild des entstandenen Colorrams zum Bild abzuspeichern. Ich hatte mir da ein kleines .prg geschrieben und die Dateinamen dann in den Asm-Quellcode eingefügt. Da es aber eine reine Zuordnung von Werten ist sollte es auch mit einem kleinen Python Programm o.ä. gehen.
    "...please come again - when I´m not working!"
  • Bis jetzt werden noch keine Spritepointer geschrieben, es werden einfach die vorhandenen beibehalten. Der Bildinjector ändert nur die eigentlichen Bilddaten, nicht jedoch die Metadaten, was u.a. auch dazu führt, dass zunächst die Farbgebung des Ursprungsvideos beibehalten wird. Diese kann man dann mit dem Farbeditor an die eigenen Wünsche anpassen. Die Tools sind generell eher minimalistisch ausgeführt, mit dem Ziel als ersten Test das PJ-Video mit neuen Inhalten zu füllen. Bei weiteren Experimenten werde ich die Tools um die benötigten Funktionen erweitern.

    Was interessant zu wissen wäre:

    - wie errechnet man aus aus der Farbram-Lookup-Table die benötigten Daten für den Player ? (Berechnung könnte man direkt in den Bildinjector integrieren)
    - wie funktioniert die Umrechnung einer Wave-Datei in das Mahoney-Format ? Gibt es dafür eine Dokumentation ? (dafür könnte man auch ein Tool schreiben, dass direkt auf dem PC ausgeführt wird und dem man eine Wave- und eine reu-Datei gibt und es die errechneten Daten direkt in die reu-Datei reinschreibt ohne Umweg mit Konverter und Hexeditor)
    uıɐbɐ ʎɐqǝ uo pɹɐoqʎǝʞ ɐ ʎnq ɹǝʌǝ ɹǝʌǝu ןןıʍ ı
  • daddlertl schrieb:


    Was interessant zu wissen wäre:

    - wie errechnet man aus aus der Farbram-Lookup-Table die benötigten Daten für den Player ? (Berechnung könnte man direkt in den Bildinjector integrieren)
    Jedem der 256 Zeichen ist eines der Colorram-"Bytes" zugeordnet. Je nachdem, an welcher Stelle des Screen nun welches Zeichen steht muss dort an der gleichen Stelle der entsprechend zugeordnete Wert im Colorram stehen.
    Also eigentlich musst du nur die 1000 Screenzeichen des Frames der Reihe nach durchgehen, der jeweils gelesene Wert des Zeichens (zb #106 an der ersten Stelle des Screens) entspricht der Stelle im Lookup-Table, dessen Wert du holen musst (hier der Wert an Stelle #106), und diesen Wert dann in den Colorram schreiben (im Beispiel an die erste Stelle des Colorrams).

    Natürlich muss das nicht unbedingt am C64 gemacht werden. Es reicht, die 1000 Werte der Reihe nach durchzugehen, den Wert zuordnen und der Reihe nach abspeichern. Die neu abgespeicherten 1000+24 Bytes sind dann der Colorram, passend zum Frame.

    Das birgt aber ein Koordinationsproblem, gehen wir mal ein Beispiel durch:
    Ich erstelle drei aufeinanderfolgende Screens mit CSAM. Es speichert dann eine Datei mit den drei Screens (.lut), welche 3kb groß ist. Dazu kommt eine zweite Datei mit dem Zeichensatz aller drei Screens (.char, 2kb groß). Als letztes den Colorram Lookup-Table .d800 mit 256 Bytes.
    Nun muss ich die Datei mit den drei Screen in jeweils 1kb Schritten wie oben beschrieben durchkonvertieren und jeweils pro Bild einen 1kb großen Colorram abspeichern. Hier darf ich nicht durcheinander kommen, da ich ja jedem Screen den richtigen Colorram zuordnen muss (falls nicht alle den gleichen haben).
    In der REU abspeichern muss ich dann in dieser Reihenfolge:
    1.Frame
    Zeichensatz aller Frames
    1.Colorram
    2.Frame
    2.Colorram
    3.Frame
    3.Colorram

    Dabei muss das erste Frame in den Metadaten die Flags für Charset & Colorram gesetzt haben. Bei den Frames 2&3 darf ich nur das Colorram-Flag setzen.



    daddlertl schrieb:

    - wie funktioniert die Umrechnung einer Wave-Datei in das Mahoney-Format ? Gibt es dafür eine Dokumentation ?
    Die Konvertierung ist eigentlich genau so wie beim Colorram. Du gehst die Originalwerte durch und ersetzt sie durch die Werte des Lookup-Tables. Genau das macht mein wave-converter.prg. Das ist leider nötig, da die Werte nicht linear sind. Eine genaue Dokumentation inkl. diverser Lookup-Tables gibt es hier (ganz runterscrollen): csdb.dk/release/?id=129090&show=notes#notes
    "...please come again - when I´m not working!"
  • Hab grad mal ein wenig mit "Global Charset" Konvertierungen rumgespielt; also Videos, deren tausende Frames mit nur einem Zeichensatz dargestellt werden. Die lassen sich zum Glück ja innerhalb von ein paar Minuten konvertieren.

    Zuerst habe ich einen Zeichensatz gepixelt, der die Auflösung faktisch auf 80x50 viertelt. Dann hab ich nochmal einen Zeichensatz aus irgendeinem mittlerem Frame erstellt und auf den ganzen Clip angewendet. Beide Ergebnisse sind im Video zu sehen. Details sind natürlich nicht zu erkennen, aber mit zwei Schritt Abstand kann man das Video doch recht gut erkennen :)


    "...please come again - when I´m not working!"
  • Die linke Version sieht dafür dass es nur ein Zeichensatz ist erstaunlich gut aus. Sowas macht allerdings eigentlich nur Sinn, wenn man ein längeres Video erstellen will (zwecks Speicherplatzersparnis), außer man ist in Eile und möchte das ganze besonders schnell konvertieren.

    Ich hatte das von mir erstellte Video in der Facebookgruppe der 1541ultimate verlinkt, worauf jemand ein anderes Video verlinkt hat, bei dem die Soundqualität erstaunlich gut ist: Video Er schrieb dazu: "I made a little video player myself a while ago. It's using standard bitmap mode, which makes each frame quite large. Using char mode for compression would make it possible to fit many more frames. Any sample playback issues should be fixable by interleaving the sample playback with the REU->C64 transfers as I did." Leider hat er nicht dazu geschrieben, wie dieses "Interleaving" realisiert wird (ich vermute er lädt immer ein paar Byte Musik und ein paar Byte Bilddaten im Wechsel). Das wäre tatsächlich noch eine sinnvolle Verbesserung des Players, da sich bei manchen Inhalten, z.B. bei reiner Sprache, der Ton doch sehr kratzig anhört, erstaunlicherweise fällt dieser Effekt bei Musik weniger auf als bei reiner Sprache (meist ist es ja eher andersrum).


    Danke für die Infos bzgl. Colorram und Wavekonvertierung. Wenn ich mal Zeit habe (in nächster Zeit eher weniger), werde ich mich damit weiter beschäftigen, ich habe immerhin schonmal die Lookuptabellen für die Wavekonvertierung in Variablenarrays lup(0-255) gespeichert, sodass ich dann einen Konverter schreiben kann, der einfach nur noch nach der Formel Mahoneywert = lup(Wavewert) konvertieren muss.
    uıɐbɐ ʎɐqǝ uo pɹɐoqʎǝʞ ɐ ʎnq ɹǝʌǝ ɹǝʌǝu ןןıʍ ı
  • Die "nur ein Charset" Methode wäre perfekt für PETSCII-Grafik: eine über 7500 Bilder große Slideshow wäre möglich ;)

    Mit "interleaving" meint er wohl, dass jedes Bild ein Stück Sample dranhängen hat. So hatte ich das zuerst mal probiert. Da lief der Sampleplayer immer stur durch eine Page, die (direkt hinterm Screen) bei jedem Framefetch mitgefüttert wurde. Das verlangte aber nach einer sehr hohen Framerate und war sehr Timing- und Fehleranfällig. Kleinere Framerates hätten große Stücke Samples pro Bild verlangt, was längere Fetch-Zeiten bräuchte. Das war mir damals zu fraglich & unübersichtlich (ich kopierte ja auch alles per Hand in die REU). Und Colorram macht's noch schlimmer. Seitdem steht's auf der langen, langen todo-Liste. Ganz am Ende... ;)
    "...please come again - when I´m not working!"