Question

Cette question est liée à href="https://superuser.com/questions/86809/how-to-download-subtitles-for-ted-talks"> SuperUser.

Je veux télécharger le TED Talks et les sous-titres respectifs pour une consultation hors ligne, par exemple permet de prendre < a href = "http://www.ted.com/talks/lang/eng/richard_st_john_s_8_secrets_of_success.html" rel = "nofollow noreferrer"> ce bref discours de Richard St. John , le téléchargement de vidéo haute résolution URL est la suivante:

  

http://www.ted.com/talks/download / vidéo / 5118 / talk / 70

Et peut être téléchargé les sous-titres codés JSON respectifs:

  

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

Voici une exception du Début de sous-titres réelle:

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

de la end du sous-titre:

{"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}]}

Je veux écrire une application qui télécharge automatiquement la version haute résolution de la vidéo et tous les sous-titres disponibles, mais je vais avoir une période très difficile depuis Je dois convertir le sous-titre à un (VLC ou tout autre lecteur vidéo décent) compatible (.srt ou .sub sont mes premiers choix) Je ne sais pas ce que les clés de startTime et duration du fichier JSON représentent .

Ce que je sais à ce jour est le suivant:

  • La vidéo téléchargée dure 3 minutes et 30 secondes , et a 29 FPS = 6090 images .
  • startTime commence à 0 avec un duration de 3000 = 3000
  • startTime se termine à 184000 avec un duration 2000 = 186000

Il peut aussi être intéressant de remarquer les éléments suivants Javascript extrait:

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

Alors, ma question est, quelle logique dois-je appliquer à convertir les valeurs de startTime et duration à un format compatible .srt :

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!

Ou .sub format compatible :

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

Quelqu'un peut-il me aider avec ça?


Ninh Bui cloué, la formule est la suivante:

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

Cette approche permet de me convertir directement au format .srt (pas besoin de connaître la longueur et FPS) de deux façons:

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.

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.
Était-ce utile?

La solution

Je dirais que les temps dans le JSON sont exprimés en millisecondes, par exemple 1000 = 1 seconde. Il y a probablement un maintimer, où startTime indique l'heure sur la ligne de temps au cours de laquelle le sous-titre doit apparaître et la durée est probablement la quantité de temps le sous-titre doit rester dans la vision. Cette théorie est en outre confirmé par la division 186000/1000 = 186 secondes = 186/60 = 3,1 minutes = 3 minutes et 6 secondes. Les secondes restantes sont probablement des applaudissements ;-) Avec cette information, vous devez également être en mesure de calculer de ce cadre à ce cadre, vous devez appliquer votre conversion, à savoir que vous savez déjà ce que les images par seconde est tout ce que vous devez faire est de multiplier le nombre de secondes de starttime avec le FPS pour obtenir le cadre commencer. La trame de fin peut être obtenu par: (durée startTime +) * fps: -)

Autres conseils

J'ai fait un programme simple sur console pour télécharger les sous-titres. Je pensais à le rendre disponible via le web en utilisant un système de script comme singe de graisse ... Voici le lien vers mon blogpost avec le code .: http://estebanordano.com.ar/ted-talks-download-subtitles/

J'ai trouvé un autre site qui a utilisé ce format. Je me suis vite piraté une fonction pour les convertir en srt, devrait être explicite:

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: mon programme: http://sourceforge.net/projects/tedgrabber/

J'ai écrit un script python qui télécharge une vidéo TED et crée un fichier mkv avec tous les sous-titres / métadonnées intégrées dans ce ( https://github.com/oxplot/ted2mkv ).

J'ai utilisé la pad_seconds variable dans le code javascript de la page de discussion TED comme un décalage à ajouter à tous les horodateurs dans JSON fichiers de sous-titres. Il est ce que le lecteur flash utilise, je suppose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top