12

この質問は、この他の質問@SuperUserに関連しています。

TEDトークとそれぞれの字幕をダウンロードしてオフラインで視聴したいのですが、たとえば、リチャードセントジョンによるこの短いトークを見てみましょう。高解像度ビデオのダウンロードURLは次のとおりです。

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

また、それぞれのJSONエンコードされた英語字幕は次の場所からダウンロードできます。

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

これが実際の字幕の最初からの例外です:

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

そして字幕の終わりから:

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

ビデオの高解像度バージョンと利用可能なすべての字幕を自動的にダウンロードするアプリを作成したいのですが、字幕を(VLCまたはその他の適切なビデオプレーヤー)に変換する必要があるため、非常に苦労しています。互換性のある形式(.srtまたは.subが私の最初の選択肢です)で、JSONファイルのキーとキーが何をstartTimeduration表しているのかわかりません。

私がこれまでに知っていることはこれです:

  • ダウンロードされたビデオは3分30秒続き、29 FPS = 6090フレームです。
  • startTimeduration3000= 3000のaで0から始まります
  • startTimeduration2000= 186000のaで184000で終了します

次のJavascriptスニペットに注意することも価値があるかもしれません。

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

だから私の質問は、値を.srt互換形式に変換するためstartTimedurationにどのロジックを適用する必要があるかということです:

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!

または.sub互換形式に:

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

誰かがこれで私を助けることができますか?


ニンブイはそれを釘付けにしました、式は次のとおりです:

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

このアプローチでは、次の2つの方法で.srt形式(長さとFPSを知る必要はありません)に直接変換できます。

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

5 に答える 5

4

私の推測では、jsonの時間はミリ秒で表されます(例:1000 = 1秒)。おそらくメインタイマーがあり、startTimeは字幕が表示されるタイムライン上の時間を示し、期間はおそらく字幕が視界に留まる時間の長さです。この理論は、186000/1000=186秒=186/60=3.1分=3分6秒で割ることによってさらに確認されます。残りの秒数はおそらく拍手です;-)この情報を使用すると、変換を適用するフレームからフレームまでを計算できるはずです。つまり、1秒あたりのフレーム数がわかっているので、乗算するだけです。開始フレームを取得するためのFPSでの開始時間の秒数。終了フレームは次の方法で取得できます:(startTime + duration)* fps :-)

于 2009-12-23T22:51:05.673 に答える
3

字幕をダウンロードするための簡単なコンソールベースのプログラムを作成しました。グリースモンキーのようなスクリプトシステムを使用してWeb経由で利用できるようにすることを考えていました...コードを含む私のブログ投稿へのリンクは次のとおりです。http://estebanordano.com.ar/ted-talks-download-subtitles/

于 2010-01-05T22:47:15.057 に答える
1

このフォーマットを使用している別のサイトを見つけました。私はすぐにそれらをsrtに変換する関数をハッキングしました、自明であるはずです:

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')))
于 2012-04-07T23:53:56.860 に答える
0

TEDGrabber beta2:私のプログラム: http ://sourceforge.net/projects/tedgrabber/

于 2010-09-21T05:57:34.427 に答える
0

TEDビデオをダウンロードし、すべての字幕/メタデータが埋め込まれたmkvファイルを作成するPythonスクリプトを作成しました(https://github.com/oxplot/ted2mkv)。

pad_secondsTEDトークページのjavascriptコードの変数を、JSON字幕ファイルのすべてのタイムスタンプに追加されるオフセットとして使用しました。それはフラッシュプレーヤーが使用するものだと思います。

于 2012-12-16T05:24:57.917 に答える