Tonspur aus Flash Video extrahieren

Um die Tonspur aus einem Flash Video (z. B. von You Tube) zu extrahieren und als mp3 zu speichern, gibt es zwei Möglichkeiten.
Erstens, die Audiospur in dem Video ist bereits im mp3 Format, dann muss es einfach nur kopiert werden:

FLV Video mit mp3 Tonspur
Befehl: ffmpeg -i Video.flv -f mp3 -acodec copy Sound.mp3
Erklärungen:
-i Video.flv #Eingabe Video Datei
-f mp3 #Ausgabeformat auf mp3 festlegen
-acodec copy #den Audio Stream kopieren, ohne ihn neu zu enkodieren
Sound.mp3 #Ausgabe mp3 Datei


Zweitens, die Audiospur ist in einem anderen Format, dann muss beim Extrahieren die Tonspur ins mp3 Format kodiert werden:

FLV Video mit anderer Tonspur
Befehl: ffmpeg -i Video.flv -f mp3 -ab xxx -acodec libmp3lame Sound.mp3
Erklärungen:
-ab xxx #Audio Bitrate, am besten auf den gleichen Wert wie bei der Originaltonspur setzen oder niedriger, höher hat keinen Sinn (es funktioniert zwar, aber wo nichts ist, kann auch nichts besser werden)
-acodec libmp3lame #Sound in mp3 umwandeln


Der zweite Befehl funktioniert auch bei Videos, deren Tonspur bereits im mp3 Format ist, aber durch eine erneute Kodierung kann die Qualität vermindert werden und es dauert länger, als das einfache Kopieren.

Sierpinski-Dreieck

Sierpinski-Dreieck

Ich habe kürzlich das Sierpinski-Dreieck für mich entdeckt, als ich einem Freund bei seinen Java-Aufgaben geholfen habe. Das Sierpinski-Dreieck ist ein Fraktal aus Dreiecken, die selbstähnlich sind, beschrieben von Waclaw Sierpinski, mehr dazu auf http://de.wikipedia.org/wiki/Sierpinski-Dreieck.
Ich dachte mir, dass muss doch auch für meinen kleinen Blog hier machbar sein, allerdings wollte ich kein JavaApplet haben. Auf http://www.walterzorn.de/jsgraphics/jsgraphics.htm habe ich eine JavaScript Bibliothek gefunden, mit der man mit Hilfe von farbigen DIV Containern malen kann, finde ich toll.
Diese habe ich dann auch benutzt, um das Sierpinski-Dreieck einmal in JavaScript zu implementieren.



Die Zeichnung besteht wirklich nur aus DIVs 🙂
Es folgt der JavaScript Code, den ich dazu geschrieben habe. Die Sierpinski Funktion war ursprünglich eine Java Methode aus einem Übungsblatt, die ich für JavaScript entsprechend angepasst habe.


Code Highlight von http://quickhighlighter.com

<!-- DIV Container, der die Zeichnung aufnimmt -->
<div id="canvas" style="position:relative;width:100%;height:450px;">
</div>

<!-- hier beginnt das Java Script -->
<script id="js" type="text/javascript">
<!--
    var jg = new jsGraphics("canvas"); //Variable für das Zeichenobjekt
   
    function triangle(x1,y1,x2,y2,x3,y3) //Objektdefinition für das Dreieck, inklusive Konstruktor
    {
        //Variablen für Start- und Endpunkte sowie Kantenlänge und Flächeninhalt
        this.x1=x1;
        this.x2=x2;
        this.x3=x3;
        this.y1=y1;
        this.y2=y2;
        this.y3=y3;
        this.a=0;
        this.b=0;
        this.c=0;
        this.area=0;
        //Kantenlängen und Flächeninhalt müssen berechnet werden
        this.update();
    }
   
    //Setter
    triangle.prototype.setx1 = function(x1){
        this.x1=x1;
    }
    triangle.prototype.setx2 = function(x2){
        this.x2=x2;
    }
    triangle.prototype.setx3 = function(x3){
        this.x3=x3;
    }
    triangle.prototype.sety1 = function(y1){
        this.y1=y1;
    }
    triangle.prototype.sety2 = function(y2){
        this.y2=y2;
    }
    triangle.prototype.sety3 = function(y3){
        this.y3=y3;
    }
   
    //Kantenlängen und Flächeninhalt neu berechnen
    triangle.prototype.update = function(){
        this.setA();
        this.setB();
        this.setC();
        this.setArea();
    }
   
    //Berechnung der Kantenlängen nach dem Satz des Pythagoras
    triangle.prototype.setA = function() {this.a = Math.sqrt((this.x2-this.x1)*(this.x2-this.x1)+(this.y2-this.y1)*(this.y2-this.y1));} //Länge eines Vektors a1,a2 ist Wurzel aus(a1*a1 + a2*a2), wobei a1 = this.x2-this.x1 ist usw.
    triangle.prototype.setB = function() {this.b = Math.sqrt((this.x3-this.x2)*(this.x3-this.x2)+(this.y3-this.y2)*(this.y3-this.y2));}
    triangle.prototype.setC = function() {this.c = Math.sqrt((this.x1-this.x3)*(this.x1-this.x3)+(this.y1-this.y3)*(this.y1-this.y3));}
   
    //Berechnung des Flächeninhalts nach dem Satz des Heron
    triangle.prototype.setArea = function()
    {
        this.area = 0.25*Math.sqrt((this.a+this.b+this.c)*(this.a+this.b-this.c)*(this.b+this.c-this.a)*(this.c+this.a-this.b));
    }
   
    //Verschiebung des Dreiecks um einen Vektor (v1,v2)
    triangle.prototype.move = function(v1,v2)
    {
        this.x1 = this.x1+v1;
        this.x2 = this.x2+v1;
        this.x3 = this.x3+v1;
       
        this.y1 = this.y1+v2;
        this.y2 = this.y2+v2;
        this.y3 = this.y3+v2;
    }
   
    //das aktuelle Dreieck wird gezeichnet
    triangle.prototype.draw = function()
    {
        jg.drawLine(this.x1,this.y1,this.x2,this.y2);
        jg.drawLine(this.x2,this.y2,this.x3,this.y3);
        jg.drawLine(this.x3,this.y3,this.x1,this.y1);
        jg.paint();
    }  

    //die Sierpinski Funktion
    function sierpinski(t)
    {
        t.draw();
        if( t.area < 100 ) {
            t.draw();
            return;
        }
        t.setx2((t.x1+t.x2)/2);
        t.sety2((t.y1+t.y2)/2);
        t.setx3((t.x1+t.x3)/2);
        t.sety3((t.y1+t.y3)/2);
        t.move(t.x2-t.x1, t.y2-t.y1);
        t.update();
        sierpinski(t);
        t.move(t.x3-t.x2, t.y3-t.y2);
        t.update();
        sierpinski(t);
        t.move(t.x1-t.x3, t.y1-t.y3);
        t.update();
        sierpinski(t);
        t.setx2(2*t.x2-t.x1);
        t.sety2(2*t.y2-t.y1);
        t.setx3(2*t.x3-t.x1);
        t.sety3(2*t.y3-t.y1);
        t.update();
    }

    //neues Dreieck erzeugen und nach Sierpinski zeichnen
    var t1 = new triangle(0,0,500,0,250,433);
    sierpinski(t1);
   
//-->
</script>

DSL Störung, Server offline

Heute morgen um 08:44 Uhr meldete mein Router, ADSL Medium getrennt.
Aha, verstehe. Die übliche Prozedur, Router Neustart, hat nichts gebracht. Also Kabel und Stecker checken, auch hier optisch alles in Ordnung, nur dass die Lämpchen am Router weder blinken noch dauerhaft leuchten, fällt mir auf. Na gut, es gibt ja noch die Hotline meines Providers, allerdings ist dort Dauerbesetzt, erst der Griff zum Handy verrät mir, dass mein Telefonanschluss auch nicht funktioniert.
Da ich nichts mehr machen konnte, bin ich zur nächsten Niederlassung meines Providers gegangen und habe dort mein Problem vorgetragen. Ein kurzer Anruf von denen beim technischen Service brachte keine Erkenntnis über mein Problem und auch, dass die Lämpchen aus sind, wollte man mir nicht so recht abnehmen. Auf Verdacht sollte ich meinen Splitter austauschen. Dieses habe ich gemacht, ohne Erfolg.
Nach der Arbeit bin ich erneut zum Laden gegangen und habe mein Problem erneut geschildert, dieses Mal wurde ein Test der Leitung in Auftrag gegeben und auch, dass die Lämpchen nicht leuchten, deutete jetzt auf ein Hardwareproblem hin.
Kurz nachdem ich wieder zu Hause war, rief mich die Hotline (auf dem Handy) an und teilte mir mit, dass es ein Problem mit der Leitung sei, dieses muss durch einen Techniker vor Ort behoben werden, was ca. 24 Stunden dauern kann.
Jetzt sitze ich hier (ohne Internet) und frage mich, warum das so kompliziert ist und vor allem, warum ein gründlicher Test seitens meines Providers erst gemacht wird, nachdem ich zum zweiten Mal in Persona vorstellig wurde. Natürlich glaube ich gern, dass die meisten Leute eher wenig Ahnung von der technischen Seite haben und einfach nur das Internet benutzen wollen und das ist auch völlig in Ordnung so, aber ein Mitarbeiter muss doch merken, wenn ein Kunde wie ich sein Problem und die bisherigen Lösungsversuche detailliert vorträgt und auf jede Frage sofort eine Nerdantwort weiß, dass man ihn nicht einfach abspeisen sollte, sondern annehmen, dass das Problem wirklich besteht und nicht an mir liegt. Zugegeben, es hätte an der Hardware liegen können, aber ganz offensichtlich war es kein so großer Aufwand, die Leitung zu prüfen, mich mit neuer Hardware auf Verdacht nach Hause zu schicken hätte man sich also sparen können. Vor allem hätte das mir und auch den Mitarbeitern im Laden Zeit gespart.
Ich bin gespannt, was der Tag morgen bringt, hoffentlich ein bißchen was von diesem Internet.