[Flash]MPG/AVI to FLV-Converter - wbbased

Ich versuch mal hier mein Glück, vielleicht hat ja schonmal jemand was damit zu tun gehabt. Ich suche einen Converter der MPG/AVI/…-Filme in FLV-Dateien wandelt und das sollte wenn möglich komplett im Web möglich sein, dabei ist mir egal ob über ein Modul(PHP, Perl, Python, Java, …) oder über CGI(C, C++, …).

Da youtube soetwas macht muss es was geben nur habe ich schon seit Tagen keine ergebnisse über goggle und Co. gefunden. Zumindestens habe ich gelesen womit youtube es macht nur dafür hab ich nur ein C-Programm gefunden, allerdings bin ich mir nicht sicher ob ich das C-Programm nicht doch als CGI laufen lassen kann, nur dennoch habe ich nix weiter dazu gefunden wo mal ne Doku darüber ist wie man das denn im Web anwenden soll. Die Rede sei von einem MEncoder der u.a. im MPlayer integriert sein soll und eben als Web-Modul laufen soll, nur wie? Nirgends hab ich bisher eine Demo/Doku gefunden :frowning:

Benötige es für ein größeres Projekt von mir und ich möchte dem Nutzer am Ende nicht die Aufgabe erteilen, konvertieren Sie bitte zu erst Ihre Videos in Flash-Movies, da sind am Ende die meisten damit überfordert :confused: Ihr kennt das sicherlich mit der Usability :wink:

Hat also von euch schonmal jemand eine web-based Variante gefunden mit der man MPG/AVI/…-Dateien in FLV convertieren kann?
Wenn jemand Pseudocode für sowas gefunden hat wäre ich auch schon glücklich da könnt ich versuchen selber was zu basteln. Ich hab mich aber schon ausgiebig über den H.263-Codec informiert, dieser wird als Codec für Flash-Movies genutzt, und der ist nicht klein :slight_smile:

Danke schonmal!

Gut Schuß
VuuRWerK :wink:

Nimm doch FFMPEG, das ist OpenSource und lässt sich auch über PHP steuern - sofern der Server das zulässt :wink:
Lad dir einfach eine vorkompilierte (für einen Windows-Server) Binaryversion runter und konvertiere dann die videos mit

exec("ffmpeg -i input.mpg output.flv");

EDIT: Für einen Linux-Server solltest du FFMPEG aus den Quellen kompilieren. Nur ist die Frage wie weit du in die Konfiguration des Servers eingreifen kannst.
Brauchst du ein Example-Script dazu?

Also der Eingriff auf den Server sollte so gut wie keinen Aufwand haben da ich das ganze in ein Projekt einbaue welches auf, bis jetzt, unbekannten Systemen landen wird, Richtwert seien die Standard Provider Systeme.

Aber wenn es großen Aufwand benötigt müsste ich mir dann was überlegen es auf meinem privaten Server einzubauen und es dann als Service anbieten.

Wenn Du ein Example-Script da hast würde ich mir das gern mal anschauen, das wäre super, so kann ich vielleicht auch abschätzen was es für einen Eingriff in die Server-Conf’s haben könnte.

Danke Dir für den hinweis, werde mir das Tool mal zur Brust nehmen :slight_smile:
Vielleicht ist es irgendwie möglich ein CGI-Modul daraus zu kompilieren und es so auch ohne größere Eingriffe auf Webserver zu nutzen, denn das cgi-bin ist imho bei so ziemlich jedem provider per default verfügbar.

Gut Schuß
VuuRWerK :wink:

Das sollte funktionieren, hab’s allerdings noch nicht getestet.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
	<head>
		<title>Movie-Uploader</title>
	</head>
	<body>
		<form action="<?php echo($_SERVER["PHP_SELF"]); ?>" method="post" enctype="multipart/form-data">
			<input type="file" name="movie" accept="video/*" />
			<input type="submit" value="Upload Movie" />
		</form>
		
		<?php
		if ( isset($_FILES["movie"]) ) {
			$uploadfile = $_FILES["movie"];
			$targetpath =  "videos/" . $uploadfile["name"];
			# Überprüft den MIME-Type des Upload-Files ob es ein Video-Format ist
			$validity = preg_match('#video/(.*)#', $uploadfile["type"]);
			
			if ( $validity && move_uploaded_file($uploadfile["tmp_name"], $targetpath) ) {
				echo("Datei nach '" . $targetpath . "' kopiert!");
				
				# Überprüft ob exec() nicht deaktiviert wurde
				if ( function_exists("exec") ) {
					exec("ffmpeg -i " . $targetpath . " " . $targetpath . ".flv");
					echo("<br />Datei nach '" . $targetpath . ".flv' konvertiert!");
				}
				
				# Alte Video-Datei wird gelöscht (nicht die FLV-Datei)
				echo( (unlink($targetpath)) ? "<br />Original file was successfully deleted!" : "<br />Original file couldn't be deleted!" );
			} else {
				echo( ($validity) ? "Upload failed!" : "No valid video format!" );
			}
		}
		?>
	</body>
</html>

So, ich hab das Skript jetzt noch einmal überarbeitet, zuerst wird das Video auf den Server geladen, wenn die Datei einen gültigen MIME-Type besitzt, wird sie mit FFMPEG in eine FLV-Datei konvertiert und anschließend die originale Videodatei gelöscht.
Danach wird das Video im JW-FLV-Player auf der Seite angezeigt.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
	<head>
		<title>Movie-Uploader</title>
	</head>
	<body>
		<form action="<?php echo($_SERVER["PHP_SELF"]); ?>" method="post" enctype="multipart/form-data">
			<input type="file" name="movie" accept="video/*" />
			<input type="submit" value="Upload Movie" />
		</form>
		
		<?php
		if ( isset($_FILES["movie"]) ) {
			$uploadfile = $_FILES["movie"];
			$targetpath =  "videos/" . $uploadfile["name"];
			# Überprüft den MIME-Type des Upload-Files ob es ein Video-Format ist
			$validity = preg_match('#video/(.*)#', $uploadfile["type"]);
			
			if ( $validity && move_uploaded_file($uploadfile["tmp_name"], $targetpath) ) {
				echo("<hr />File copied to '" . $targetpath . "'!");
				
				# Überprüft ob exec() nicht deaktiviert wurde
				if ( function_exists("exec") ) {
					exec( escapeshellcmd("ffmpeg -y -i " . $targetpath . " " . $targetpath . ".flv") );
					echo( "<br />File converted to '" . $targetpath . ".flv'!");
				}
				
				# Alte Video-Datei wird gelöscht (nicht die FLV-Datei)
				echo( (unlink($targetpath)) ? "<br />Original file was successfully deleted!<hr />" : "<br />Original file couldn't be deleted!<hr />" );
				# FLV-Video abspielen
				echo("<object data=\"flvplayer.swf\" width=\"500\" height=\"400\"
					type=\"application/x-shockwave-flash\">
					<param name=\"movie\" value=\"flvplayer.swf\" />
					<param name=\"quality\" value=\"high\" />
					<param name=\"flashvars\" value=\"file=" . $targetpath . ".flv\" />
					<!--[if IE]>
						<embed src=\"flvplayer.swf\" quality=\"high\" width=\"500\" height=\"400\"
							flashvars=\"file=" . $targetpath . ".flv\" 
							type=\"application/x-shockwave-flash\"
							pluginspage=\"http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash\">
						</embed>
					<![endif]-->
				</object>");
			} else {
				echo( ($validity) ? "Upload failed!" : "No valid video format!" );
			}
		}
		?>
	</body>
</html>

Getestet mit Firefox und IE.
Die Fehler- bzw. Statusmeldungen hab ich Englisch gemacht weil’s so irgendwie mehr style hat, is also nicht irgendwo rauskopiert :smiley:
Hier das komplette Tool inklusive FLV-Player: movie_uploader.zip

Meld dich mal wenn’s was gebracht hat :slight_smile:

Hey Danke Dir!

Ich mach mir zwar gerade sorgen wegen der exec-Funktion, weil bei einigen Provider durchaus deaktiviert ist aber es ist immerhin schonmal genau das was ich wollte! Danke!!!

Gut Schuß
VuuRWerK :wink: