2014-05-13 8 views
25

Ich versuche, eine Miniaturvorschau aus einer Videodatei (mp4,3gp) aus einem Formular input type='file' zu erstellen. Viele haben gesagt, dass dies nur serverseitig möglich ist. Ich kann es kaum glauben, da ich erst kürzlich auf diese Fiddle mit HTML5 Canvas und Javascript gestoßen bin.Miniaturansicht aus Videodatei über Dateieingabe erstellen

Thumbnail Fiddle

Das einzige Problem ist dies das Video vorhanden sein muss und der Benutzer spielen klicken, bevor sie auf eine Schaltfläche klicken Sie auf das Bild um es zu erfassen. Ich frage mich, ob es eine Möglichkeit gibt, die gleichen Ergebnisse zu erzielen, ohne dass der Spieler anwesend ist und der Benutzer auf den Button klickt. Zum Beispiel: Der Benutzer klickt auf den Datei-Upload und wählt die Videodatei aus und dann wird eine Miniaturansicht erstellt. Jede Hilfe/Gedanken sind willkommen!

+0

Der Spieler muss offensichtlich anwesend sein, da das ist, was das Bild für die Aufnahme produziert. – vogomatix

+2

Sie können den Player mit css ausblenden und videoTag.play() aufrufen, um die Wiedergabe zu starten. Ich empfehle, 18 Sekunden zu springen, zu warten, bis es angezeigt wird, und dann an eine canvas drawImage-Routine zu senden. Ich habe auf diese Weise einen Ordner mit Filmen in eine Miniaturansichtsgalerie verwandelt, damit ich Ihnen versichern kann, dass es funktioniert. – dandavis

+0

Schön gemacht "Dandavis". Jetzt kann die Datei irgendwo auf einen Server hochgeladen werden oder kann dies clientseitig erfolgen. Angenommen, der Benutzer wählt ein Video auf seinem Desktop aus und führt dieses Skript dann aus, was eingegeben wurde? – ryan

Antwort

46

Canvas.drawImage muss auf HTML-Inhalt basieren.

source

here is a simplier jsfiddle

//and code 
function capture(){ 
    var canvas = document.getElementById('canvas'); 
    var video = document.getElementById('video'); 
    canvas.getContext('2d').drawImage(video, 0, 0, video.videoWidth, video.videoHeight); 
} 

Der Vorteil dieser Lösung ist, dass Sie die Miniaturansicht auswählen, können Sie anhand wollen auf die Zeit des Videos.

+0

Das ist hervorragend, ich werde das in Kürze nutzen, Prost! (kommentieren, weil meine upvotes für heute verwendet werden – ConorJohn

+2

Ist ihre Möglichkeit, dies zu tun, ohne das Video auf Dokument –

+0

zu laden Ich kann nur Videogröße 0 0 und weißes Bild bekommen. –

6

Kürzlich dies und tat ziemlich einige Tests erforderlich und es bis auf das absolute Minimum siedende https://codepen.io/aertmann/pen/mAVaPx

Es gibt einige Einschränkungen, wo es funktioniert, aber recht gute Browser-Unterstützung zur Zeit sehen: Chrome, Firefox, Safari, Opera, IE10, IE11, Android (Chrome), iOS Safari (10+).

video.preload = 'metadata'; 
video.src = url; 
// Load video in Safari/IE11 
video.muted = true; 
video.playsInline = true; 
video.play(); 
+0

Ihr Codepen scheint gut zu sein, aber wenn ich versuche,> 100MB iPhone Porträt Shoot Modus Videos manchmal die Screenshots sind leer oder manchmal werden sie nicht nur hochgeladen. FYI, ich will Canvas Größe zu 170x100.Had Sie konfrontiert die ähnlichen Probleme für iPhone-Porträt-Modus Videos? – vbjain

+0

@ vbjain Nein kann ich das nicht sagen Ich habe es, tut mir leid. –

Verwandte Themen