de Bertrand Fan

Roboți slack nefondabili

În decembrie, Slack a anunțat un fond de 80 de milioane de dolari pentru a investi în proiecte software care completează tehnologia sa. Ca adoptator timpuriu al API-ului Slack, iată câteva „pariuri” pe care le-am făcut pe platforma Slack:

Un robot care redă toate Star Wars Despecialized Edition (Han trage primul!) Un cadru la fiecare zece secunde. Este nevoie de aproximativ 20 de ore pentru a trece peste tot.

Roboti slack nefondabili

Un bot care găzduiește jocuri The Resistance (opțional cu modulul Assassin din expansiunea Agenda ascunsă). Votarea secretă se efectuează prin intermediul DM cu botul, în timp ce acțiunile publice se fac în canal.

1611304507 772 Roboti slack nefondabili

Un bot care vă permite să jucați Wolfenstein 3D prin emiterea de comenzi (stânga, dreapta, sus, jos, deschidere și declanșare). Opțional, puteți specifica câte grade să virați la stânga și la dreapta, dar în mod implicit întoarceți 45 de grade. Nu am finalizat niciodată cu succes primul nivel, dar am reușit să ucid mai mulți gardieni.

Roboti slack nefondabili

Mă bucur să vă anunț că am finalizat ultimul meu bot, Vandelay Industries. Vandelay Industries este o rușine fără rușine Frinkiac care vă permite să căutați gif-uri animate din fiecare episod din Seinfeld în Slack. Are fiecare linie de dialog vorbită vreodată în Seinfeld.

1611304508 597 Roboti slack nefondabili

Dacă doriți să încercați în echipa dvs. Slack, accesați Vandelay Industries și faceți clic pe Adăugați la Slack. Vă va cere permisiunea de a adăuga o nouă comandă slash, / vandelay și, odată autorizată, ar trebui să fie gata de utilizare imediat în Slack.

Dacă sunteți interesat de detaliile tehnice despre cum funcționează, continuați să citiți! Dacă nu, ați reușit să depășiți timpul estimat de lectură pentru acest articol. Felicitări!

1611304509 248 Roboti slack nefondabili

Prelucrare

Am început inițial cu 91G din toate cele nouă sezoane ale Seinfeld la o calitate surprinzător de înaltă de 720p. În cele din urmă, am ajuns cu GIF-uri animate în valoare de 111G, care vă spun tot ce trebuie să știți despre eficiența acelui format de fișier. Această secțiune este despre modul în care am mers de la unul la altul.

Fișierele erau în containere MKV, așa că am putut să le folosesc MKVToolNix pentru a extrage subtitrările din ele. Puteți utiliza mkvinfo pentru a lista diferitele piese de segment:

mkvinfo Seinfeld.S01E01.The.Seinfeld.Chronicles.mkv

Este puțin greu de citit, dar piesa care ne interesează este piesa numărul 3, prima piesă de subtitrare. După ce notăm ID-ul piesei (2), putem extrage subtitrările într-un fișier SRT astfel:

mkvextract tracks Seinfeld.S01E01.The.Seinfeld.Chronicles.mkv 2:S01E01.srt

Formatul SRT este destul de simplu. Conține un contor, ora de începere, ora de încheiere și textul subtitrării. Folosind un analizor de genul subtitrare-analizor, putem itera cu ușurință peste subtitrări.

Următorul pas este să parcurgeți fiecare subtitlu și să extrageți intervalul de timp de la MKV într-un GIF animat. Există un articol excelent despre utilizarea ffmpeg pentru a codifica GIF de înaltă calitate dar dacă nu doriți să citiți acest lucru chiar acum, trucul este să extrageți o paletă specializată din secțiunea videoclipului care vă interesează și apoi să o utilizați pentru a codifica GIF.

Iată un script pe care l-am adaptat în scopul acestei etape de procesare:

320 se referă la cât de mulți pixeli vor avea GIF rezultat. Veți observa că, în loc să specific o oră de început și o dată de sfârșit, în schimb specific o durată. Deși ffmpeg susține că acceptă timpii de sfârșit, indiferent de versiunea pe care am încercat-o, nu am reușit să extrag corect intervalul corect, așa că am ajuns să calculez durata scăzând ora de început din ora de sfârșit și abuzând de epoca Unix astfel:

După aplicarea scriptului gifenc.sh, ne-a rămas un GIF animat frumos cu intervalul corect extras astfel:

1611304510 287 Roboti slack nefondabili

Dar am vrut să afișez textul subtitrării în partea de jos a GIF-ului și după ce am săpat prin documentația ImageMagick, am venit cu acest lucru:

Nu este cea mai elegantă soluție, dar face treaba. GIF-ul nostru final arată astfel:

1611304511 384 Roboti slack nefondabili

Acum, faceți asta de încă 104.782 de ori și ați terminat. Rularea unui episod întreg prin ffmpeg și ImageMagick a durat aproximativ 30 de minute pe Macbook Pro de vârf din 2011. Aceasta este partea poveștii în care aș vrea să vă spun că am reușit să folosesc Amazon Elastic Transcoder sau am făcut o treabă hadoop pentru a distribui încărcătura pe toate computerele din casa mea, dar într-adevăr ceea ce am făcut a fost să pun toate acestea pe mine server OVH buget recondiționat și lăsați-l să ruleze timp de 5 zile în timp ce am continuat să-mi trăiesc viața

Odată ce s-a terminat codificarea tuturor GIF-urilor, l-am lăsat pe Apache să le servească static cu un antet lung Expires și am pus Cloudflare în fața întregului domeniu. Numai timpul va spune dacă acest lucru va rezista efectiv cerințelor de trafic.

In cautarea

Am instalat Elasticsearch și am indexat conținutul fișierelor SRT. Iată unde am întâlnit câteva înțelegeri non-tehnice: în sezonul 6, episoadele 14 și 15 sunt o emisiune de clipuri de o oră numită Highlights of a Hundred, unde Jerry Seinfeld vă arată o grămadă de clipuri vechi din episoadele anterioare. Și în episodul final din Seinfeld, Sezonul 9, Episodul 23, ei fac o mulțime de flashback-uri la episoadele anterioare. Ambele vor fi returnate în mod obișnuit în rezultatele căutării, așa că tocmai le-am exclus din interogarea de căutare. Probabil că există o modalitate mai bună de a reduce calitatea scorurilor acelor episoade, dar documentația pentru a face acest lucru în Elasticsearch este la fel de ușor de citit ca documentația ImageMagick menționată mai sus. Și la sfârșitul zilei, nimeni nu vrea să vadă clipuri din niciunul dintre aceste două episoade. Scuze, Larry David, ultimul episod a fost groaznic.

Comanda Slash

Ultimul pas a fost doar să înfășurați totul împreună cu o comandă Slash slash, care este doar o aplicație simplă Express care acționează ca un client pentru instanța Elasticsearch. Există unele OAuth pentru a împacheta comanda ca aplicație Slack și pentru a gestiona butonul Adăugați la Slack, dar nu trebuie să verific autentificarea atunci când cererile vin, așa că nu salvez jetoanele de autorizare. Codul pentru server este disponibil aici: vandelayindustries-slack-server.

Asta e! Sper că această scriere tehnică o va ajuta pe următoarea persoană care dorește să extragă GIF-uri dintr-o întreagă emisiune de televiziune pentru un motiv mic sau deloc real.

1611304511 851 Roboti slack nefondabili