Flash videóból felirat letöltése?

Fórumok

Sziasztok.

Adott egy videó amit a goggle video-n nézek, van rajta magyar felirat, de ha letöltöm, a feliratot nem "hozza" magával! Kérdésem, hogy hogyan tudnám letölteni a feliratot? Egyébként erről van szó:

Zeitgeist
http://video.google.com/videoplay?docid=-6186589598330713558&subtitle=o…

Aki nem látta még, nézze meg, nagyon tanulságos!

Ingyenesen letölthető a hivatalos weboldalról dvdrip-ben, de nincs hozzá sajnos feirat, csak a google-n!

Köszi

Hozzászólások

Szerintem a Flash-re ravan kodolva a felirat. Angol felirat van a DVDRip-hez? Akkor talan betudnad ez alapjan gepelni a magyar szoveget.

Szerintem meg nincs rákódolva, mert akkor lejönne a filmmel együtt, amikor azt letöltöm! Igen, angol felirat van, de nem akartam vacakolni vele, hisz már vki megcsinálta a magyart!
Egyéb ötlet?

<= PcZ On LinuxOS -- Powered By Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds

Elindítod a video a google oldalról.

A /tmp/plugtmp/videotranscript-1 file-ban benne lesz a felírat:

[?xml version="1.0" encoding="utf-8" ?][transcript][text start="306.584" dur="2.2">Minél többet feszegetjük, hogy mit gondolunk
[/text][text start="311.521" dur="1.5"]honnan jöttünk, mit csinálunk,
[/text][text start="317.004" dur="2.9"]annál inkább rájövünk, hogy miben hazudtak nekünk.
[/text][text start="323.208" dur="2.55"]A vallás intézménye az egyetlen
[/text][text start="326.552" dur="2.85"]amelyet sosem érintettek.

(A "kacsacsőrt" lecseréltem '[]'-ra)

Esetleg próbáld meg az általam készített progit. :)


<?php
	$filename="googlesrt";
	$file=fopen($filename,"r");
	$tartalom=fread($file,filesize($filename));
	fclose($file);
	$tartalom=explode("\n",$tartalom);
	foreach($tartalom as $i=>$ertek)
	{
		print(($i+1)."\n");
		ereg("</text><text start=\"[0-9]*\.[0-9]*",$ertek,$talalat1);
		$talalat1=str_replace("</text><text start=\"","",$talalat1[0]);
		ereg("\" dur=\"[0-9]*\.[0-9]*\">",$ertek,$talalat2);
		$talalat2=str_replace("\" dur=\"","",$talalat2[0]);
		$talalat2+=$talalat1;
		$ido1[0]=$talalat1/3600;
		$ido1[1]=$talalat1%3600/60;
		$ido1[2]=$talalat1%60;
		$ido2[0]=$talalat2/3600;
		$ido2[1]=$talalat2%3600/60;
		$ido2[2]=$talalat2%60;
		print(floor($ido1[0]).":".floor($ido1[1]).":".$ido1[2].",".substr(strchr($talalat1,"."),1)." --> ".floor($ido2[0]).":".floor($ido2[1]).":".$ido2[2].",".substr(strchr($talalat2,"."),1)."\n");
		$ertek=ereg_replace("</text><text start=\"[0-9]*\.[0-9]*\" dur=\"[0-9]*\.[0-9]*\">","",$ertek);
		print($ertek."\n\n");
	}
?>

Ja, az outputot ajánlott simán beleirányítani egy fileba. Pl. php googletosrt.php>subtitle.srt

Kicsit gány, de amúgy remekül működik. Épp most teszteltem. :)

Van az $filename változó, annak az értéke legyen a google-os feliratfájl. (Nálam googlesrt.) Ja, és a kimeneti fájlban bennemarad az elején és a végén 1-2 xml tag, ezeket ajánlott eltávolítani. :)

Egyébként van 2 hiba az eredeti feliratfájlban, ezt ajánlott előbb javítani (a sor értékek nem biztos, hogy pontosak):

119. sor: "</text><text start="856.952" dur="188.9">borrá változtatta,", a duration kicsit sok, szvsz 1.9 akart lenni...
252. sor: "</text><text start="1444.03">szimbóluma a halak korában.", duration lemaradt. Nyugodtan beállítható maximum 4 mp.

Néhány helyen van még 1-2 kisebb probléma, de ezen a 2 problémán kívül a megnézést befolyásoló dolgot nem fedeztem fel. :)

Sikerült, köszi! Csak annyit szeretnék még, hogy az időzítés nem teljesen pontos, nem lehetne valahogyan pontosítani ezen? Gondolom a script mikor átváltja a formátumokat, akkor pontatlan, vagy tévedek?
Ja, és nincs vmi egyszerü módszer/script, hogy egymásba illesszem őket, mert a dvdrip ugyanez, csak itt ugye 3 darabban van, magyarul a 2. rész össze iőpontját el kéne tolni, meg a 3.-ét is!

köszi

<= PcZ On LinuxOS -- Powered By Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds

megfoltozgattam, most már nem 'kerekít' rajta, viszont korrektül formázza az idősztringeket.
elvileg az eleje-vége is stimmel.


<?php
	$filename="googlesrt";
	$file=fopen($filename,"r");
	$tartalom=fread($file,filesize($filename));
	fclose($file);
	$tartalom=substr(strchr($tartalom,"<transcript>"),12);
	$tartalom=explode("\n",$tartalom);
	array_pop($tartalom);
	foreach($tartalom as $i=>$ertek)
	{
		print(($i+1)."\n");
		$str = ($i==0?"":"</text>")."<text start=\"";
		ereg($str."[0-9]*\.[0-9]*",$ertek,$talalat1);
		$talalat1=str_replace($str,"",$talalat1[0]);
		ereg("\" dur=\"[0-9]*\.[0-9]*\">",$ertek,$talalat2);
		$talalat2=str_replace("\" dur=\"","",$talalat2[0]);
		$talalat2+=$talalat1;
		$ido1[0]=$talalat1/3600;
		$ido1[1]=$talalat1%3600/60;
		$ido1[2]=$talalat1%60;
		$ido2[0]=$talalat2/3600;
		$ido2[1]=$talalat2%3600/60;
		$ido2[2]=$talalat2%60;
		printf("%'02d:%'02d:%'02d,%'03d --> %'02d:%'02d:%'02d,%'03d\n"
					,floor($ido1[0]),floor($ido1[1]),$ido1[2],substr(strchr($talalat1,"."),1)
					,floor($ido2[0]),floor($ido2[1]),$ido2[2],substr(strchr($talalat2,"."),1));
		$ertek=ereg_replace($str."[0-9]*\.[0-9]*\" dur=\"[0-9]*\.[0-9]*\">","",$ertek);
		print($ertek."\n\n");
	}
?>

nálam működik, mind a 3 feliratra. (igény esetén azokat is megosztom szívesen.)
maga a film pedig tényleg... elgondolkodtató.

Szia.

Köszi! Nincs valakinek valami egszerü megoldása az felirat csúszásokra? Összeraktam a dvdrip-eshez, de csúszik a felirat. Ha valakinek kellenek a feliratok, szóljatok!

<= PcZ On LinuxOS -- Powered By Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds

Kicsit rubyzhatnékom támadt:

#!/usr/bin/env ruby

require 'getoptlong'

opts = GetoptLong.new(
  [ "--intput",   "-i",   GetoptLong::REQUIRED_ARGUMENT ],
  [ "--output",   "-o",   GetoptLong::REQUIRED_ARGUMENT ],
  [ "--delay",    "-d",   GetoptLong::REQUIRED_ARGUMENT ]
)

filein = nil
fileout = nil
$delay = 0

opts.each do |opt, arg|
  case opt
  when '--intput'
    filein = arg
  when '--output'
    fileout = arg
  when '--delay'
    $delay = arg.to_f
  end
end

def fileconv(fileorig, filenew)
  count = 1
  fn = File.new(filenew, "w")
  File.read(fileorig).scan(/<text start="(\d+.\d+)" dur="(\d+).\d+">([^<>]*)<\/text>/) do |start, dur, text|
    fn.printf("%d\n%s --> %s\n%s\n\n",
              count, sec_to_time(start.to_f + $delay),
              sec_to_time(start.to_f + dur.to_f + $delay), text)
    count = count + 1
  end
end
def sec_to_time(seconds)
  sec = seconds.to_i % 60
  min = (seconds.to_i / 60) % 60
  hour = seconds.to_i / 3600
  ezred = (seconds % 1) * 1000
  sprintf("%02d:%02d:%02d,%03d", hour, min, sec, ezred)
end

fileconv(filein, fileout)

nagyon érdekes videó! érdemes megnézni (mind a hármat!), nem azért, hogy elhidd, hanem hogy elgondolkozz rajta.