Frage

Diese Frage im Zusammenhang @ Super-User- diese andere Frage an .

Ich möchte die TED Talks und die jeweiligen Untertitel für die Offline-Wiedergabe herunterzuladen, zum Beispiel nehmen können < a href = "http://www.ted.com/talks/lang/eng/richard_st_john_s_8_secrets_of_success.html" rel = "nofollow noreferrer"> dieser kurze Vortrag von Richard St. John , der hochauflösende Video-Download URL ist folgende:

  

http://www.ted.com/talks/download / Video / 5118 / talk / 70

Und die jeweiligen JSON codiert wird, kann Englisch Untertitel unter folgenden Adresse heruntergeladen werden:

  

http://www.ted.com/talks/subtitles / id / 70 / lang / eng

Hier ist eine Ausnahme von der Anfang der aktuellen Untertitel:

{"captions":[{"content":"This is really a two hour presentation I give to high school students,","startTime":0,"duration":3000,"startOfParagraph":false},{"content":"cut down to three minutes.","startTime":3000,"duration":1000,"startOfParagraph":false},{"content":"And it all started one day on a plane, on my way to TED,","startTime":4000,"duration":3000,"startOfParagraph":false},{"content":"seven years ago."

Und von dem Ende des Untertitels:

{"content":"Or failing that, do the eight things -- and trust me,","startTime":177000,"duration":3000,"startOfParagraph":false},{"content":"these are the big eight things that lead to success.","startTime":180000,"duration":4000,"startOfParagraph":false},{"content":"Thank you TED-sters for all your interviews!","startTime":184000,"duration":2000,"startOfParagraph":false}]}

Ich möchte eine App schreiben, die automatisch lädt die hochauflösende Version des Videos und alle verfügbaren Untertitel, aber ich bin eine wirklich harte Zeit, da Ich habe mit den Untertitel zu einer (VLC oder anderer anständiger Video-Player) kompatibles Format (srt oder .sub ist meine erste Wahl) und ich habe keine Ahnung, was die startTime und duration Schlüssel der JSON-Datei darstellen .

Was ich weiß, so weit ist diese:

  • Das heruntergeladene Video dauert 3 Minuten und 30 Sekunden , und hat 29 FPS = 6090 Frames .
  • startTime beginnt bei 0 mit einem duration von 3000 = 3000
  • startTime Ende bei 184.000 mit einem duration von 2000 = 186000

Es kann auch sinnvoll sein Bemerken der folgenden Javascript-Snippet:

introDuration:16500,
adDuration:4000,
postAdDuration:2000,

Also meine Frage ist, welche Logik soll ich mich bewerben zu convert startTime und duration Werte zu einem srt-kompatibles Format :

1
00:01:30,200 --> 00:01:32,201
MEGA DENG COOPER MINE, INDIA

2
00:01:37,764 --> 00:01:39,039
Watch out, watch out!

oder auf .sub kompatibles Format :

{FRAME_FROM}{FRAME_TO}This is really a two hour presentation I give to high school students,
{FRAME_FROM}{FRAME_TO}cut down to three minutes.

Kann mir jemand helfen mit dieser aus?


Ninh Bui genagelt es ist die Formel folgende:

introDuration - adDuration + startTime ... introDuration - adDuration + startTime + duration

Dieser Ansatz ermöglicht es mir konvertiere direkt an srt-Format (ohne die Notwendigkeit zu wissen, Länge und FPS) auf zwei Arten:

00:00:12,500 --> 00:00:15,500
This is really a two hour presentation I give to high school students,

00:00:15,500 --> 00:00:16,500
cut down to three minutes.

Und:

00:00:00,16500 --> 00:00:00,19500
And it all started one day on a plane, on my way to TED,

00:00:00,19500 --> 00:00:00,20500
seven years ago.
War es hilfreich?

Lösung

Meine Vermutung wäre die Zeiten in der json werden, dass in Millisekunden ausgedrückt, z.B. 1000 = 1 Sekunde. Es ist wahrscheinlich ein maintimer, wo Startzeit, die Zeit auf der Zeitleiste anzeigt, bei der sollen die Untertitel angezeigt werden und die Dauer ist wahrscheinlich die Zeit, die Untertitel in Sicht bleiben sollen. Diese Theorie wird ferner durch bestätigt 186000/1000 = 186 Sekunden = 186/60 = 3,1 Minuten = 3 Minuten und 6 Sekunden dividiert wird. Die verbleibenden Sekunden sind wahrscheinlich Applaus ;-) Mit dieser Information können Sie auch in der Lage sein sollte, von dem, was Rahmen zu berechnen, was Frame Sie Ihre Conversion angewendet werden soll, das heißt, Sie wissen schon, was die Frames pro Sekunde ist so alles, was Sie tun müssen, ist mehrfach die Anzahl der Sekunden der Startzeit mit der FPS bekommen den Rahmen beginnen. Der Endrahmen ist erhältlich: (Startzeit + Dauer) * fps: -)

Andere Tipps

Ich habe ein einfaches konsolenbasierte Programm die Untertitel zum Download bereit. Ich dachte an sie verfügbar über Web macht einiges Script-System wie fettaffe mit ... Hier der Link mit dem Code zu meinem Blogpost ist .: http://estebanordano.com.ar/ted-talks-download-subtitles/

finde ich eine andere Seite, die dieses Format verwendet. Ich habe schnell eine Funktion gehackt, um sie in srt zu umwandeln, sollte selbsterklärend sein:

import urllib2
import json

def json2srt(url, fname):
    data = json.load(urllib2.urlopen(url))['captions']

    def conv(t):
        return '%02d:%02d:%02d,%03d' % (
            t / 1000 / 60 / 60,
            t / 1000 / 60 % 60,
            t / 1000 % 60,
            t % 1000)

    with open(fname, 'wb') as fhandle:
        for i, item in enumerate(data):
            fhandle.write('%d\n%s --> %s\n%s\n\n' %
                (i,
                 conv(item['startTime']),
                 conv(item['startTime'] + item['duration'] - 1),
                 item['content'].encode('utf8')))

TEDGrabber Beta2: mein Programm: http://sourceforge.net/projects/tedgrabber/

Ich habe einen Python-Skript geschrieben, dass Downloads jeden TED Video und erstellt eine MKV-Datei mit allen Untertiteln / Metadaten darin eingebettet ( https://github.com/oxplot/ted2mkv ).

habe ich die Variable pad_seconds im JavaScript-Code der TED Talk Seite als ein Offset in JSON Untertitel-Dateien zu allen Zeitstempel hinzugefügt werden. Es ist, was der Flash Player verwendet, nehme ich an.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top