Nieoficjalny klon windowsowego NAPI-PROJEKT, służący do pobierania napisów do filmów.
Stworzony z potrzeby chwili i nienawiści do systemu Windows ;)
Od teraz możecie bez przeszkód korzystać z zasobów napiprojekt na linuksie, macu i innych dziwnych systemach.
Napi do działania potrzebuje pythona i kompresora 7zip - wersji pełnej. Jeśli u Ciebie nie działa to trudno.
Wyrazy uwielbienia dla nas prosimy zamieszczać w komentarzach!
Wersja 0.16 beta 3 Release 1: napi.py
Subskrybuj:
Komentarze do posta (Atom)
65 komentarzy:
Dobra robota!
Dzieki!
"nie ma napisa do filmu"
Polski język trudna język...
katoda, ten skrypt został napisany trochę dla żartu.
Umiemy pisać po polsku poprawnie, ale nie zawsze chcemy ;)
pozdro,
K.
Wypraszam sobie "dziwnych".
dzieki - swietnie dziala pod makiem. na szybko zrobilem wersje drag'n'drop http://blog.fotogenia.info/index.php/2008/01/06/napi-na-maku/ ale przydalby sie jakis pporzadny interfejs.
Wspaniały i w sam raz pod te rdzewiejące konsole :).
dla topornych (/bin/):
wget http://napi.py.googlepages.com/napi.py && sudo mv napi.py /bin/ && sudo chmod +x /bin/napi.py
Dla topornych (/usr/bin/):
wget http://napi.py.googlepages.com/napi.py && sudo mv napi.py /usr/bin/ && sudo chmod +x /usr/bin/napi.py
Z konsoli: napi.py [miejsce pliku avi]
Można by dopisać automatycznie skanowanie w poszukiwaniu filmów w wybranych katalogach ;D.
Pod Debianem śmiga aż miło.
@Zamber:
Plik napi.py w /usr/bin/ można spokojnie przemianować na napi - również zostanie wykonany, a brzmi schludniej. :)
"napisy pobrano, milordzie!" - dobre! :) Dzięki za to.
grajk
Ta komenda szuka w dirze gdzie sie ja odpali plikow avi i odpala napi.py:
find -type f -name "*.avi" -exec napi.py "{}" \;
Jezeli oczywiscie plikow jest wiecej sprawdzi kazdy i do kazdego bedzie szukac napisow :)
PS
Mozna tez napisac sobie skrypt do tego:
#!/bin/sh
find -type f -name "*.avi" -exec napi.py "{}" \;
nazwac go np napi i dac mu prawa odczytu i zapisu najlepiej 777 i juz :) Potem wystarczy w katalogu z filmem wpisac napi i juz sobie skrypt sam sprawdzi :) i poda stosowne info czy sa napisy czy nie :)
Packege for archlinux is ready in aur:
http://aur.archlinux.org/packages.php?do_Details=1&ID=14560
Ubuntu, programy i pakiety są. Nie działa - to znaczy nic nie znajduje, non-stop pisze, ze napisow do filmu brak. Sprawdzilem pod windoza - do tych samych znajduje bez problemu. Cosik nie tak :(
Ja odpalilem Napi-Projekt pod Wine i działa, aż miło :). Ale skoro jest alternatywa... to warto skorzytać :). Dobra robota!
"Sprawdzilem pod windoza - do tych samych znajduje bez problemu. Cosik nie tak :("
Tez tak mialem dopuki nie zainstalowalem pakietu 7zip :)
Miło by było, jakby wypuszczono ten program w wersji paczki ".deb". Linux nigdy nie będzie do końca przyjaznym systemem, jeśli użytkownik musi sobie ze wszystkim "jakoś poradzić". To właśnie mi się nie podoba, odkąd przesiadłem się z Windy na Ubunciaka.
Witam
Pozwoliłem sobie troszkę przerobić skrypt na własne potrzeby i oczywiście chcę się podzielić "wynikami".
Otóż nie każdy przepada za konsolą... niektórym się po prostu nie chce. Więc postanowiłem troszkę pokombinować (nie chce mi się bawić konsolą a chce mi się kombinować... ;) )
(wszystko dotyczy gnome i ubuntu - ale pewnie i w innych środowiskach zadziała gdy się troszkę pogoogluje.)
1. Instalujemy 2 rzeczy: zenity (odpowiedzialny za GUI) i nautilus-actions - sudo apt-get install zenity nautilus-actions.
2. Przerabiamy skrypt:
(w drugiej linijce dodałem info o kodowaniu - dzięki temu komunikaty wyświetlają się prawidłowo i skrypt działa)
#!/usr/bin/python
# coding: utf-8
# reversed napi 0.16.3.1
#
# by gim,krzynio,dosiu,hash 2oo8.
#
#
#
# last modified: 6-I-2oo8
#
# 4pc0h f0rc3
#
# do dzialania potrzebny jest p7zip-full (tak sie nazywa paczka w debianie)
#
# POZDRAWIAMY NASZYCH FANOW!
import md5,sys,urllib,os
def f(z):
idx = [ 0xe, 0x3, 0x6, 0x8, 0x2 ]
mul = [ 2, 2, 5, 4, 3 ]
add = [ 0, 0xd, 0x10, 0xb, 0x5 ]
b = []
for i in xrange(len(idx)):
a = add[i]
m = mul[i]
i = idx[i]
t = a + int(z[i], 16)
v = int(z[t:t+2], 16)
b.append( ("%x" % (v*m))[-1] )
return ''.join(b)
if(len(sys.argv)==1):
import os
name3=os.popen('zenity --info --text="Nieprawidłowy plik." --title="Napiprojekt"')
print name1
sys.exit(2)
d = md5.new();
d.update(open(sys.argv[1]).read(10485760))
str = "http://napiprojekt.pl/unit_napisy/dl.php?l=PL&f="+d.hexdigest()+"&t="+f(d.hexdigest())+"&v=other&kolejka=false&nick=&pass=&napios="+os.name
open("napisy.7z","w").write(urllib.urlopen(str).read())
nazwa=sys.argv[1][:-3]+'txt'
if (os.system("/usr/bin/7z x -y -so -piBlm8NTigvru0Jr0 napisy.7z 2>/dev/null >\""+nazwa+"\"")):
import os
name1=os.popen('zenity --info --text="Napisy nie zostały pobrane." --title="Napiprojekt"')
print name1
os.remove(nazwa)
else:
import os
name=os.popen('zenity --info --text="Napisy zostały pobrane." --title="Napiprojekt"')
print name
os.remove("napisy.7z")
Zmiany naniosłem pogrubieniem (poza zmianą z kodowaniem w 2 linijce - system komentarzy nie pozwolił mi na pogrubienie tego).
Poprawiłem też komunikaty - wolę bardziej oficjalne...
3. Plik napi.py wrzucamy do /usr/bin
4. Wchodzimy w System-preferencje-Nautilus Action Configurator i wykonujemy nast. czynności:
- dodaj
- w polu Label wpisujemy np. Ściągnij napisy
- w polu Path wpisujemy /usr/bin/napi.py
- w polu Parameters wpisujemy %M
- wybieramy sobie ładną ikonkę (pole icon)
- przechodzimy do zakładki Conditions
- w polu mime/types wpisujemy: video/x-msvideo
- OK i zamknij.
5. Wchodzimy sobie do katalogu z naszym filmem, klikamy prawym klawiszem myszy i oczywiście po 3 sekundach dostajemy komunikat że albo napisy pobrane... albo nie :)
Na 15 filmów w 15 zadziałało.
ps. Nie ma nigdzie nic na temat licencji - więc pozwoliłem sobie przerobić - w razie czego - post do wywałki ;)
ps 2. pod konsolą skrypt wywala błędy - niestety nie znam się na tyle na pythonie żeby je usunąć...
ps 3. pozdrawiam i wielkie dzięki za skrypt!
A ja nie potrzebuje zenity. Podpiałem sobie w ubuntu pod prawym przyciskiem "otwórz w napi".
Jeśli napisy są, to po prostu po chwili pojawiają się obok ikonki z filmem ;)
@tomasiek
Nie działa. Ani z konsoli ani przez action-script
znalazłem boga:
objawil mi się w ten oto sposób:
kuku@kuku $ napi.py intimid-brutal-stv.rmvb
napisy pobrano, milordzie!
kuku@kuku $ ls
intimid-brutal-stv.rmvb intimid-brutal-stv.rtxt
a mplayer nie lapie napisów z takim rozszeżeniem - więc trzeba albo zrobić poprawke w mplayerze żeby akceptował pliki *.rtxt jako napisy albo poprawić skrypt żeby uzywał nazwy do ostatniej kropki a potem rozszerzenie
Oryginalny (konsolowy) skrypt działa. Ten podany przez tomasiek'a nie.
Zajebiście, dobrze, że ktoś wkońcu pomyślał o linuxie :-) ja juz się przyzwyczajałem do oglądania bez napisów, ale przyda się takie cóś, zeby koledze czy koleżance nagrać filmik z napisami :-) THX
no po prostu wypas :D:D zasadniczo jestem z lekka troche leniwy wiec po prostu dodalem sobie do nautilusa automatyczne wyszukiwanie wedlug porady "tomasiek", ale skryptu nie przerabialem... bo po co? :) wszystko smiga az milo :D:D WIELKIE dzieki :D
Super, już sobie podczepiłem pod Thunara i hula jak złoto ^_^
hmm... u niektórych moja przeróbka nie działa...
U mnie i na dwóch dodatkowych komputerach bez problemów.
Oczywiście zenity macie zainstalowane? Dokładnie wprowadziliście poprawki? (kopiuj-wklej może nie być idealne...
dwie poprawki proponuję:
1. "/usr/bin/7z" dać jako zmienną na początku, żeby można było łatwo zmienić, gdyby ktoś miał 7z w innym miejscu
2. zamiast "#!/usr/bin/python" dać "#!/usr/bin/env python"
PS. dzięki, nie będę potrzebował więcej wine'a ;)
Huhu, podpiąłem sobie jako service menu pod konquerora, działa przecudnie. ;)
@Xinill
Jak się to robie (podczepia pod konquerora)?
nie znam sie na skryptach, ale skorzystalem z metody dla topornych i polecenia dla sciagania wszystkich filmow w katalogu... jedna prosba: co trzeba dodac do skryptu zeby mi wyswietalal do jakiego filmu napisa nie ma:> zapewne tutaj trzeba cos dodac: print "nie ma napisa do filmu "
Dodałem do skryptu:
-by wyświetlał (lub nie) komunikaty za pomocą zenity
-by konwertował ściągnięte napisy do utf
-by konwertował znaki końca wierszy
Zmodyfikowany skrypt wymaga:
'python' 'p7zip' 'zenity' 'psiconv' 'hd2u'
Dodam jeszcze, że tak właściwie to nie umiem zbytnio python`a, więc jest wysoce prawdopodobne, że można coś napisać krócej/lepiej
Plik: napi-zenity
#!/bin/bash
/usr/bin/napi $@ zenity
Plik: napi
#!/usr/bin/python
# coding=utf8
# reversed napi 0.16.3.1
#
# by gim,krzynio,dosiu,hash 2oo8.
#
#
#
# last modified: 6-I-2oo8
#
# 4pc0h f0rc3
#
# do dzialania potrzebny jest p7zip-full (tak sie nazywa paczka w debianie)
#
# POZDRAWIAMY NASZYCH FANOW!
import md5,sys,urllib,os,shutil,commands
def f(z):
idx = [ 0xe, 0x3, 0x6, 0x8, 0x2 ]
mul = [ 2, 2, 5, 4, 3 ]
add = [ 0, 0xd, 0x10, 0xb, 0x5 ]
b = []
for i in xrange(len(idx)):
a = add[i]
m = mul[i]
i = idx[i]
t = a + int(z[i], 16)
v = int(z[t:t+2], 16)
b.append( ("%x" % (v*m))[-1] )
return ''.join(b)
try:
sys.argv[2]
if (sys.argv[2]=="zenity"):
zenity=1
else:
zenity=0
except:
try:
sys.argv[1]
if (sys.argv[1]=="zenity"):
zenity=1
else:
zenity=0
except:
zenity=0
if(len(sys.argv)==1 or sys.argv[1]=="zenity"):
if (zenity==0): print "Wskaż film do którego szukasz napisów"
else: os.system("zenity --info --text=\"Wskaż film do którego szukasz napisów\" --title=\"Napiprojekt\"")
sys.exit(2)
nazwa=sys.argv[1][:-3]+'txt'
if (os.path.isfile(sys.argv[1])==False):
if (zenity==0): print "Plik: "+nazwa+" Nie istnieje"
else: os.system("zenity --info --text=\"Plik: "+nazwa+" Nie istnieje\" --title=\"Napiprojekt\"")
sys.exit(2)
d = md5.new();
d.update(open(sys.argv[1]).read(10485760))
str = "http://napiprojekt.pl/unit_napisy/dl.php?l=PL&f="+d.hexdigest()+"&t="+f(d.hexdigest())+"&v=other&kolejka=false&nick=&pass=&napios="+os.name
open("napisy.7z","w").write(urllib.urlopen(str).read())
if (os.system("/usr/bin/7z x -y -so -piBlm8NTigvru0Jr0 napisy.7z 2>/dev/null >\""+nazwa+"\"")):
if (zenity==0): print "Nie znaleziono napisów do filmu", nazwa
else: os.system("zenity --info --text=\"Nie znaleziono napisów do filmu "+nazwa+"\" --title=\"Napiprojekt\"")
os.remove(nazwa)
else:
os.system("dos2unix -U \""+nazwa+"\"")
kodowanie=commands.getoutput("/usr/bin/file \""+nazwa+"\"")
kodowanie=kodowanie[len(nazwa)+2:]
if (kodowanie=="UTF-8 Unicode text"):
pass
elif (kodowanie=="Non-ISO extended-ASCII text"):
os.system("/usr/bin/iconv --from-code=Windows-1250 --to-code=utf-8 --output=\""+nazwa+".tmp\" "+"\""+nazwa+"\"")
elif (kodowanie=="ISO-8859 text"):
os.system("/usr/bin/iconv --from-code=iso-8859-2 --to-code=utf-8 --output=\""+nazwa+".tmp\" "+"\""+nazwa+"\"")
shutil.move(nazwa+".tmp",nazwa)
if (zenity==0): print "Pobrano napisy", nazwa
else: os.system("zenity --info --text=\"Pobrano napisy "+nazwa+"\" --title=\"Napiprojekt\"")
os.remove("napisy.7z")
//Tak... wklejenie skryptu (w poprzednim poście) było raczej złym pomysłem.
Dodałem do skryptu:
-by wyświetlał (lub nie) komunikaty za pomocą zenity
-by konwertował ściągnięte napisy do utf
-by konwertował znaki końca wierszy
Zmodyfikowany skrypt wymaga:
'python' 'p7zip' 'zenity' 'psiconv' 'hd2u'
Dodam jeszcze, że tak właściwie to nie umiem zbytnio python`a, więc jest wysoce prawdopodobne, że można coś napisać krócej/lepiej
http://michalzxc.nd.e-wro.pl/napiprojekt/
Dzięki. Czegoś takiego szukałem.
:]
w programie jest taka linijka:
open("napisy.7z","w").write(...)
plik jest otwierany, jest do niego cos zapisywane a pozniej jest on uzywany przez zewnetrzny program. Jednak nie jest on zamykany przed uzyciem a powinien, nigdy nie wiadomo czy przed uzyciem go dane zostana wyczyszczone z buforow systemowych czy tez z buforow pythona(moga takie istniec w roznych implementacjach) i plik poprostu bedzie niekompletny. Tak wiec trzeba zamknac ten plik przed uzyciem.
Kolejan wersja z zenity - zmodyfikowany skrypt milachazxc, z dodanym wyborem pliku w trybie graficznym w przypadku używania zenity. Oraz trochę poprawioną logiką programu.
Chłopaki, odpalcie dla tego jakieś repo, zrobi się z tego pełnoprawny projekt. ;>
Super!
Super!! O Napi przeczytałem na jakilinux.org i zdałem sobie sprawę z tego jaki ten skrypt jest fajowy.
Na mojej Mdv działa bez problemu. Tylko musiałem zmienić ścieżkę do 7zip (/usr/bin/7za). Jak ktoś ma problem z ciągłym brakiem napisów, powinien upewnić się czy na pewno dobra ścieżka jest w skrypcie.
Dzięki jeszcze raz!
Zrobiłem program w C z ikonką na pasku powiadomień dla Ubuntu:
http://www.gnapi.linuxfaq.pl
Jak skończy się sesja to z pewnością go dopracuje i udostępnię wersje na inne systemy (i źródła, które póki co działają tylko u mnie ;p).
badenov
u mnie dziala:)
brakuje mi tylko f. skanowania katalogow;)
ikonka inspirowana skrekiem;>
powodzenia w sesji, mam przed soba to samo:l
[root@localhost bin]# napi.py
-bash: /usr/bin/napi.py: Brak dostępu
[root@localhost bin]# rpm -q python p7zip
python-2.5.1-15.fc8
p7zip-4.51-3.fc8
[root@localhost bin]#
wtf? Nie znam sie na skryptach, pomocy.
Jakub chmod +x napi.py
Skrypcik ładnie działa, zrobiłem już service menu dla KDE. Jak ktoś jest zainteresowany to proszę to o info.
Super robota :)
Smiga, az milo na OpenSuse 10.3
Świetna robota. Na Ubuntu działa skrypcik zrobiony w Pythonie jak i programik Badenov'a. Nie było nic, a teraz możemy sobie wybierać ;P
Witam!
Cieszyłem się ze skryptu jakiś czas aż do dziś. Okazuje się, że kodowanie się, delikatnie mówiąc, nie sprawdza. Po przejściach z Totemem i Mplayerem wreszcie pokumałem o co biega z tym kodowaniem, ale... Na skryptach się nie znam.
Proszę, niech ktoś napisze co zmienić w skrypcie, by napisy pozostały w kodowaniu 1250?
Dwie płyty już zmarnowałem przez to, że nie sprawdziłem przed wypaleniem. Używam odtwarzacza stacjonarnego, nie jest przyjemnie oglądać film bez polskich znaków.
Poza tym skrypt jest fantastyczny! Napiprojekt się chowa!! Napisy w 2,5 sek. CUDO!
wojTrek
Ide sie puknac w glowe mlotkiem gumowym.
Doczytalem juz...
Matol ze mnie!
Sorry za zawracanie dupy!
Żeby zrobić sobie dostęp do NAPI spod KDE:
1) tu są pliki: http://emesh.homelinux.com/napiprojekt/
- "napi" to to samo, co "napi.py" z dystrubycji napi, wrzućcie go do /usr/bin lub /usr/local/bin i dajcie prawa do wykonywania:
cp napi /usr/local/bin
chmod 755 /usr/local/bin/napi
- "napi.png" to ikonka, wrzućcie ją do /usr/share/icons
- "napi.desktop" to czarna magia, wrzućcie ją do ~/.kde/share/apps/konqueror/servicemenus
2) cieszcie sie wynikami
testowane na debianie, lokalizacje katalogów mogą się nieco różnić w innych dystrybucjach...
Instalacja ulepszonej wersji dla KDE - z paskiem postępu ściągania napisów ;-)
# wget http://emesh.homelinux.com/napiprojekt/napi_inst.tar.gz
# tar xzf napi_inst.tar.gz
# cd napi_inst
# ./install
# cd ..
# rm -rf napi_inst napi_inst.tar.gz
Wciąż wymaga p7zip-full. Zmieniłem numerek wersji na 0.17.
Czy jest jakaś licencja na Waszą pracę? :)
Jest jeszcze QNapi, napisany w Qt4: http://krzemin.iglu.cz/qnapi
Chłopaki, jesteście genialni! Dzięki!
zajebista sprawa ;) czekalem na wersje konsolowa.. pozdro dla milordow :D
gdybym was znal osobiscie mieli byscie browara. ;D i to pewnie nie jednego
Jakby co do dołączam się z browarem
Niestety, od ok. miesiąca skrypt nie ściąga napisów (nie znajduje ich). Prawdopodobnie zmienił się link na napiprojekt.pl, z którego się pobierało napisy, bo filmy, które testowałem, były popularne i na 99% napisy do nich były.
@Ponton: SOA#01
\-(162418:$)-- napi.py House.S05E10.HDTV.XviD-LOL_SeriesGringas.Org.avi napisy pobrano, milordzie!
Dzieki
Oto patch usuwajacy warningi o przestazalym module md5 i uzywajacy nowego modulu subprocess do odpalenia 7zip'a + drobna kosmetyka:
patch
kurna, fenomenalne. zainstalowałem napiprojekt przez wine, ale jak odpalam, zawiesza mi system. a ten programik + wrzucenie do /usr/bin i lata, aż furczy :) dzięki.
PS. moglibyście napisać to co jest w samym skrypcie - że trzeba mieć p7zip-full, inaczej niektórzy będą psioczyć, że na linuksie im nie znajduje napisów.
Dzięki panowie :)
Żeby pozbyć się "DeprecationWarning: the md5 module is deprecated; use hashlib instead" należy zamienić:
(linia 16)
import md5,sys,urllib,os
na
from hashlib import md5
import sys,urllib,os
oraz
(linia 40)
d = md5.new();
na
d = md5();
./napi.py:16: DeprecationWarning: the md5 module is deprecated; use hashlib instead
Szczerze to nawet sha-1 da się już złamać.
@Mateusz
Ty chyba troszku nie zrozumiałeś po co ten md5 w tym jest...
Przefikuśne komunikaty (w szczególności 'milordzie' :D)!! Możnaby jeszcze dosmarować jakieś menu jak wysra więcej niż jedne napisy (koniecznie poprzedzone "Które podać Waszej Miłomściwości?" :P).
Dzięki za przymilny skrypt!!
Oryginaly skrypcik dla Pythona 3
http://pastebin.com/H2wJLBYH
Świetny program i ,dzięki pomocy zawartej w komentarzach, wreszcie hula! Rewelacja
Gdyby ktos szukal wersji dzialajacej pod P3k:
https://github.com/pawelsawicki/napi3k.py/blob/master/napi3k.py
świetny program ;)
Publikowanie komentarza