niedziela, 6 stycznia 2008

Napi

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

65 komentarzy:

oki pisze...

Dobra robota!
Dzieki!

katoda pisze...

"nie ma napisa do filmu"
Polski język trudna język...

krzysiek pisze...

katoda, ten skrypt został napisany trochę dla żartu.

Umiemy pisać po polsku poprawnie, ale nie zawsze chcemy ;)

pozdro,

K.

Janek pisze...

Wypraszam sobie "dziwnych".

Anonimowy pisze...

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.

Zamber pisze...

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.

sz# pisze...

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. :)

Anonimowy pisze...

"napisy pobrano, milordzie!" - dobre! :) Dzięki za to.
grajk

Anonimowy pisze...

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 :)

Anonimowy pisze...

Packege for archlinux is ready in aur:
http://aur.archlinux.org/packages.php?do_Details=1&ID=14560

Anonimowy pisze...

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 :(

Jakub pisze...

Ja odpalilem Napi-Projekt pod Wine i działa, aż miło :). Ale skoro jest alternatywa... to warto skorzytać :). Dobra robota!

Anonimowy pisze...

"Sprawdzilem pod windoza - do tych samych znajduje bez problemu. Cosik nie tak :("

Tez tak mialem dopuki nie zainstalowalem pakietu 7zip :)

Mamut pisze...

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.

tomasiek pisze...

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!

krzysiek pisze...

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 pisze...

@tomasiek
Nie działa. Ani z konsoli ani przez action-script

kuku pisze...

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

matiit pisze...

Oryginalny (konsolowy) skrypt działa. Ten podany przez tomasiek'a nie.

Tytus pisze...

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

zajec00 pisze...

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

Hadret pisze...

Super, już sobie podczepiłem pod Thunara i hula jak złoto ^_^

tomasiek pisze...

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...

azhag pisze...

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 ;)

Xinill pisze...

Huhu, podpiąłem sobie jako service menu pod konquerora, działa przecudnie. ;)

matiit pisze...

@Xinill
Jak się to robie (podczepia pod konquerora)?

quina pisze...

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 "

michalzxc pisze...

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")

michalzxc pisze...

//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/

barteks pisze...

Dzięki. Czegoś takiego szukałem.
:]

Anonimowy pisze...

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.

i0 pisze...

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. ;>

Anonimowy pisze...

Super!

loki pisze...

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!

badenov pisze...

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).

quina pisze...

badenov
u mnie dziala:)
brakuje mi tylko f. skanowania katalogow;)
ikonka inspirowana skrekiem;>
powodzenia w sesji, mam przed soba to samo:l

Jakub pisze...

[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.

Fisiu pisze...

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.

pooh pisze...

Super robota :)
Smiga, az milo na OpenSuse 10.3

jethigh pisze...

Ś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

Anonimowy pisze...

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

Wojciech pisze...
Ten komentarz został usunięty przez autora.
wojTrek pisze...

Ide sie puknac w glowe mlotkiem gumowym.
Doczytalem juz...
Matol ze mnie!
Sorry za zawracanie dupy!

wixor pisze...

Ż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...

wixor pisze...

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.

MySZ pisze...

Czy jest jakaś licencja na Waszą pracę? :)

Anonimowy pisze...

Jest jeszcze QNapi, napisany w Qt4: http://krzemin.iglu.cz/qnapi

matemaciek pisze...

Chłopaki, jesteście genialni! Dzięki!

Anonimowy pisze...

zajebista sprawa ;) czekalem na wersje konsolowa.. pozdro dla milordow :D

unl pisze...

gdybym was znal osobiscie mieli byscie browara. ;D i to pewnie nie jednego

Exile pisze...

Jakby co do dołączam się z browarem

Ponton pisze...

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.

Anonimowy pisze...

@Ponton: SOA#01
\-(162418:$)-- napi.py House.S05E10.HDTV.XviD-LOL_SeriesGringas.Org.avi napisy pobrano, milordzie!

Anonimowy pisze...

Dzieki

virhilo pisze...

Oto patch usuwajacy warningi o przestazalym module md5 i uzywajacy nowego modulu subprocess do odpalenia 7zip'a + drobna kosmetyka:
patch

Anonimowy pisze...

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.

Gniewomir Świechowski pisze...

Dzięki panowie :)

D4rky pisze...

Ż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();

Mateusz pisze...

./napi.py:16: DeprecationWarning: the md5 module is deprecated; use hashlib instead

Szczerze to nawet sha-1 da się już złamać.

CoYoT pisze...

@Mateusz
Ty chyba troszku nie zrozumiałeś po co ten md5 w tym jest...

Anonimowy pisze...

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!!

Anonimowy pisze...

Oryginaly skrypcik dla Pythona 3
http://pastebin.com/H2wJLBYH

miassma pisze...

Świetny program i ,dzięki pomocy zawartej w komentarzach, wreszcie hula! Rewelacja

Pawel S. pisze...

Gdyby ktos szukal wersji dzialajacej pod P3k:

https://github.com/pawelsawicki/napi3k.py/blob/master/napi3k.py

Anonimowy pisze...

świetny program ;)