Einleitung
Warum 8mm Filme digitalisieren - und das ganze noch im Selbstbau? Ganz einfach weil die Filme da sind und man sie doch gerne mal sehen möchte. Und das Basteln macht Spass. Inzwischen habe ich alle meine alten, geerbten Filme digitalisiert mit der hier beschriebenen Maschine. Sie hat einen bis zwei Filme pro Tag geschafft. Langsam? naja macht ja nix, denn es geht alles quasi automatisch - man nur muss den Film von Hand einlegen, abschätzen, wieviel Bilder der Film hat (siehe unten), Programm starten und irgendwann schauen, ob der Film fertig ist.
LIESMICH
Dies ist eine Beschreibung meiner Lösung... wer etwas daraus für seine eigenen Zwecke verwendet, kann dies gerne machen - auf eigene Gefahr hin! Insbesondere mein Schaltungvorschlag, denn der geht ohne galvanische Trennung in den Parallelport rein - eigentlich kein Problem, aber ich weise hier extra nochmal darauf hin.
Wenn Ihr etwas von mir weiterverwendet, dann könnt ihr ja einen kleinen Hinweis auf mich geben :o)
Viele Grüße,
Chris
Los geht's
Umzug... Aufräumen... Keller... Kiste... viele Filme...!
Was jetzt damit? Projektor? Wo? Da! Stöpsel! Einschalt! Surr, mehr nicht?!
Also erst mal alles mit umziehen und dann sehen wir weiter. Der Umzug ist jetzt über sieben Jahre her und für dieses Jahr (2008) habe ich mir vorgenommen, die Filme wieder 'sichtbar' zu machen (und dabei auch zu digitalisieren).
Die grundsätzlichen Idee zum folgenden Digitalisiergerät kam aus dem Wettbewerb 'Mach flott den Schrott' der Zeitschrift C'T. Ein Gewinner dieses Wettbewerbs hat aus einem alten Projektor für 8mm Filme einen Digitalisierer gebaut.
Ausgangssituation
- Ein Projektor, dessen Motor sich dreht, mehr aber nicht.
- Der Versuch einen Film 'professionel' digialisieren zu lassen war teuer und das Ergebnis miserabel.
- Die Idee aus 'Mach flott den Schrott'.
Überlegungen
- Nachdem meine Filme mit 16fps Aufgenommen wurden, ist das 'abfilmen' mit einer Kamera nicht möglich, außerdem ist der Projektor hin und ich besitze keine Videokammera. Also bleibt eigentlich nur noch übrig, jedes Bild einzeln zu fotografieren.
- Es sollte keine Projektion des Bildes abfotografiert werden (Mitte hell, Aussen dunkel). Sondern ein hintergrundbeleuchtetes Bild.
- Es sollte einfach skriptbar sein, am liebsten einfach unter Linux funktionieren.
Umsetzung
Bei der Untersuchung des Projektors zeigte sich, dass es eigentlich nur eine Achse gibt, um die sich alles, wortwörtlich, dreht. Also erst mal die gesamte 'Elektrik' und Zubehör raus. Dadurch wurde das ganze schon sehr viel übersichtlicher. Übrig ist nun die gesamte Filmtransportmechanik, mehr nicht.
Bild-für-Bild
Wie kann ich nun feststellen, wann ein neues Bild da ist?
Eine Umdrehung des Hauptachse ist genau ein Bild vorwärts. Also muss man nur diese Umdrehung feststellen. Wie? Gabellichtschranke am 'Schutter'. Dabei habe ich 2 der drei Blenden entfernt, sind ja für den Projektor nicht mehr notwendig.
Der neue Antrieb
Das war schon etwas schwieriger. Zuvor gab es einen Bandantrieb, mit Motor der das ganze so schnell bewegte, dass 16 Bilder pro Sekunde durchlaufen. Für einen Bild-für-Bild Vortrieb ist das nicht geeignet.
Ich habe dann die gesamte Achse rausgenommen (die gesamte Achse inkl. der Halterung) und das Antriebsrad durch eine Zahnscheibe ersetzt.
Nun noch einen Getriebemotor (60 U/min) dazu, der die notwendige Kraft hat um die Achse zu drehen. Fertig!
Fotoaparat und Optik
Der komplizierteste Teil.....! Nach viel, viel Rumprobieren kam das folgende vorläufige Endergebnis raus:
- Karmera: Philips ToUCam Pro (pwc-treiber)
- Objektiv: das Teleobjektiv der alten Filmkamera
- Brennweitenverlängerung: Elektroinstallationsrohr, innen schwarz ausgekleidet
- ein paar Alu-Profile als Halterung
Praktischer weise ist am Projektor eine Halterung für Vorsatzgeräte an die ich den ganzen Aparillo anbringen konnte.
Vor/Nachteile der Webcam-Lösung
Vorteile
- Einfach zu implementieren.
- Direkter Zugang zum CCD.
- Keine Mechanik (bedenke die Bildanzahl!).
- Bei ausgeglichener Belichtung sehr gute Ergebnisse.
- Automatischer Weißabgleich sehr gut.
Nachteile
- Auto Gain lässt sich nicht abschalten.
- kein Einfluss auf die Belichtungssteuerung.
- Probleme bei sehr kontrastreichen Bildern (Pralle Sonne + Schatten), hier neigt die Kamera zu Überbelichtung (Auto Gain).
- Ausblenden wird zu verblassen (Auto Gain).
In Summe ist das Ergebnis jedoch akzeptabel.
Die Steuerung
- Schnittstelle: Parallel Port
- Input: Gabellichtschranke an der Achse
- Input: Gabellichtschranke für Filmende-Erkennung (aktuell nicht funktional, da der Film das IR-Licht zu gut durchlässt, nächster Versuch: Umbau auf Reflexlichtschranke)
- Output: Motor
- Programm: perl, Device::ParallelPort
- v4lctl
Der Mini-Schaltplan
Der erste Versuch ging nach einiger Zeit in die Brüche, da ich den Motor mittels eines Relais geschaltet habe. Man kann sich ausrechnen, wie lange es funktioniert hat, bei einer durchschnittlichen Lebensdauer eines Relais von 100000 Schaltvorgängen... Die Relaislösung hatte den Vorteil (und getriebetechnischen Nachteil), dass der Motor abrupt losgelaufen und gestoppt ist (durch kurzschließen der Kontakte).
Danach habe ich auf das abrupte verzichtet, und einfach einen Transistor aus der Bastelkiste genommen. Der Motor ist jetzt langsam angefahren und hat auch langsam gestoppt, daher musste ich die Lichtschranke nach vorne versetzen. Jedoch war das ganze jetzt viel leiser - und schneller, da das Foto bereits gemacht wurde, während der Motor noch ausläuft.
Das Steuerprogramm: getmovie.pl (beta-version)
Ursprünglich sollten ja 2 Lichtschranken alles Steuern. Nachdem das mit dem Filmende aktuell nicht funktioniert, habe ich einfach einen Zähler eingebaut und diesen für das Filmende verwendet.
Usage: getmovie.pl <filmname> <startcounter> <endcounter>
- filmname: Dieser Wert gibt den abschließenden Filmnamen an. Endresultat ist <filmname>.avi. Des weiteren ist dieser wert der Präfix für die Einzelbilder: <filmname>_nnnnnnn.jpg
- startcounter: Dies ist der wert, für die Bildnummer, bei der gestartet wird. Normalerweise 0, wenn man jedoch in der Mitte einer Digitalisierung abbricht kann hier der aktuelle Startwert eingetragen werden.
- endcounter: ist das Bild mit dieser Nummer erzeugt, so wird der Digitalisierungsprozess beendet und der Film wird aus den im aktuellen Verzeichnis abgelegten Bildern erzeugt.
#!/usr/bin/perl use Device::ParallelPort; $SIG{'TERM'}=\&ende; $SIG{'QUIT'}=\&ende; $SIG{'INT'}=\&ende; if($#ARGV!=2) { print "Usage: getmovie.pl fileprefix startnum endnum\n"; exit(1); } my $prefix=$ARGV[0]; my $num=$ARGV[1]; my $end=$ARGV[2]; my $port = Device::ParallelPort->new('parport:0'); my $b12o = $port->get_bit(12); # bild liegt an my $b13o = $port->get_bit(12); # filmprint "$prefix\n"; $port->set_byte(0,chr(255)); while ($num<=$end) { #while ($port->get_bit(13)!=1) { $b12a=$port->get_bit(12); if($b12o - $b12a > 0) { $port->set_byte(0,chr(0)); #bit noch finden!! $cmd = sprintf("v4lctl -c /dev/video0 snap jpeg 800x600 %s_%07d.jpg",$prefix,$num); print $cmd."\n"; system("$cmd"); $num+=1; $port->set_byte(0,chr(255)); # hier noch das eigentliche bit rausfinden!! } $b12o = $b12a; }; # motor aus $port->set_byte(0,chr(0)); # hier noch das eigentliche bit rausfinden!! # in film convertieren # klein, schlechtere qualitaet 10min ca. 70MByte #$cmd="mencoder mf://*.jpg -mf w=800:h=600:fps=16:type=jpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o $prefix.avi -of avi"; # gross, gute qualitaet 10min ca. MByte $cmd="mencoder mf://*.jpg -mf w=800:h=600:fps=16:type=jpg -ovc lavc -lavcopts vcodec=mjpeg -oac copy -o $prefix.avi -of avi"; print $cmd."\n"; system("$cmd"); exit(0); sub ende { $port->set_byte(0,chr(0)); # hier noch das eigentliche bit rausfinden!! exit(0); }
Bildanzahl 16fps:
Filmlänge | Anzahl Bilder | ||
---|---|---|---|
2,5 min | 7,5m | halbe Rolle | 2400 |
5 min | 15m | ganze Rolle | 4800 |
15 min | 45m | - | 14400 |
Zusatzprogramm 1: motor.pl (beta-version)
Das kleine Programm schaltet einfach den Motor an (max. 2 Minuten)- und bei <ctrl>C wieder aus.
Usage: motor.pl
#!/usr/bin/perl use Device::ParallelPort; $SIG{'TERM'}=\&ende; $SIG{'QUIT'}=\&ende; $SIG{'INT'}=\&ende;
my $port = Device::ParallelPort->new('parport:0'); $port->set_byte(0,chr(255)); sleep(100); ende(); exit(0); sub ende { $port->set_byte(0,chr(0)); exit(0); }
Zusatzprogramm 2: 1BildVorDisplay.pl (beta-version)
Das kleine Programm spult ein Bild vor, nimmt einen snapshot und zeigt das Bild an.
Usage: 1bildVorDisplay.pl
erzeugt im aktuellen Verzeichnis eine Datei test.jpg (diese wird nicht wieder gelöscht).
#!/usr/bin/perl
use Device::ParallelPort; $SIG{'TERM'}=\&ende; $SIG{'QUIT'}=\&ende; $SIG{'INT'}=\&ende; my $port = Device::ParallelPort->new('parport:0'); my $b12o = $port->get_bit(12); # bild liegt an my $b13o = $port->get_bit(12); # film $port->set_byte(0,chr(255)); while (1==1) { $b12a=$port->get_bit(12); if($b12o - $b12a > 0) { $port->set_byte(0,chr(0)); #bit noch finden!! $cmd = "v4lctl -c /dev/video0 snap jpeg 800x600 test.jpg"; print $cmd."\n";
system("$cmd");
$cmd="display test.jpg";
system("$cmd"); exit(0); } $b12o = $b12a; };sub ende { $port->set_byte(0,chr(0)); # hier noch das eigentliche bit rausfinden!! exit(0) }