자동 생성 된 YouTube 기록 다운로드


25

동영상을 다운로드하지 않고 자동 생성 된 YouTube 기록을 다운로드 할 수있는 방법이 있습니까?

TED 강연을 확인하고 싶지만 대역폭이 제한되어 있으며 자동 대본 (자막 또는 자막이라고도 함)을 내보내고 싶습니다.


자막이 자동으로 작성된 동영상에이 작업을 수행하는 방법을 아는 사람이 있습니까?
kenwarner

관련 (자동 생성되지 않은 자막의 경우) : webapps.stackexchange.com/questions/25072/…
기계 달팽이

또한 여기에 답변했습니다 : stackoverflow.com/questions/9611397/…
Tin Man

이것에 대한 뉴스가 있습니까?
Leo

답변:


8

브라우저 스크립트 디버거의 "네트워크 검사기"기능을 사용하고 기록 된 자막을 활성화 한 후 시간 표시 텍스트 페이지에 대한 두 번째 요청을 찾은 다음 해당 요청을 모두 주소 표시 줄에 복사하여 기본 YouTube XML 형식으로 다운로드하십시오.

SRT 버전을 얻으려면 해당 XML 페이지의 디버거 콘솔에서이 코드를 실행하십시오.

function makeTimeline (time) {
    var string, time_array = [], milliseconds = Math.round(time % 1 * 1000).toString();

    while (3 > milliseconds.length) {
        milliseconds = '0' + milliseconds;
    }

    time_array.push(Math.floor(time / (60 * 60)));
    time_array.push(Math.floor((time - (time_array[0] * 60 * 60)) / 60));
    time_array.push(Math.floor(time - ((time_array[1] * 60) + (time_array[0] * 60 * 60))));

    for (var i = 0, il = time_array.length; i < il; i++) {
        string = '' + time_array[i];
        if (1 === string.length) {
            time_array[i] = '0' + string;
        }
    }
    return time_array.join(':') + ',' + milliseconds;
};

function returnSRT (data) {
    var caption, previous_start, start, end, temp, captions = data.getElementsByTagName('text'), srt_output = '';

    for (var i = 0, il = captions.length; i < il; i++) {
        caption = captions[i];
        start = +caption.getAttribute('start');

        if (0 <= previous_start) {
            temp = captions[i - 1].textContent.replace(/</g, '&lt;').replace(/>/g, '&gt;');
            srt_output += i + '\n' + makeTimeline(previous_start) + ' --> ' + makeTimeline(start) + '\n' + temp + '\n\n';
            previous_start = -1;
        }

        if ( end = +caption.getAttribute('dur'))
            end = start + end;
        else {
            if (captions[i + 1]) {
                previous_start = start;
                continue;
            }
        }

        temp = caption.textContent.replace(/</g, '&lt;').replace(/>/g, '&gt;');
        srt_output += i + '\n' + makeTimeline(start) + ' --> ' + makeTimeline(end) + '\n' + temp + '\n\n';
    };
    return srt_output;
}

returnSRT(document.documentElement)

또한 여기에 스크립틀릿 버전의 스크립트가 있습니다 :

javascript:(function(){function%20makeTimeline(time)%7Bvar%20string%2Ctime_array%3D%5B%5D%2Cmilliseconds%3DMath.round(time%251*1000).toString()%3Bwhile(3%3Emilliseconds.length)%7Bmilliseconds%3D'0'%2Bmilliseconds%3B%7Dtime_array.push(Math.floor(time%2F(60*60)))%3Btime_array.push(Math.floor((time-(time_array%5B0%5D*60*60))%2F60))%3Btime_array.push(Math.floor(time-((time_array%5B1%5D*60)%2B(time_array%5B0%5D*60*60))))%3Bfor(var%20i%3D0%2Cil%3Dtime_array.length%3Bi%3Cil%3Bi%2B%2B)%7Bstring%3D''%2Btime_array%5Bi%5D%3Bif(1%3D%3D%3Dstring.length)%7Btime_array%5Bi%5D%3D'0'%2Bstring%3B%7D%7Dreturn%20time_array.join('%3A')%2B'%2C'%2Bmilliseconds%3B%7D%3Bfunction%20returnSRT(data)%7Bvar%20caption%2Cprevious_start%2Cstart%2Cend%2Ctemp%2Ccaptions%3Ddata.getElementsByTagName('text')%2Csrt_output%3D''%3Bfor(var%20i%3D0%2Cil%3Dcaptions.length%3Bi%3Cil%3Bi%2B%2B)%7Bcaption%3Dcaptions%5Bi%5D%3Bstart%3D%2Bcaption.getAttribute('start')%3Bif(0%3C%3Dprevious_start)%7Btemp%3Dcaptions%5Bi-1%5D.textContent.replace(%2F%3C%2Fg%2C'%26lt%3B').replace(%2F%3E%2Fg%2C'%26gt%3B')%3Bsrt_output%2B%3Di%2B'%5Cn'%2BmakeTimeline(previous_start)%2B'%20--%3E%20'%2BmakeTimeline(start)%2B'%5Cn'%2Btemp%2B'%5Cn%5Cn'%3Bprevious_start%3D-1%3B%7Dif(end%3D%2Bcaption.getAttribute('dur'))end%3Dstart%2Bend%3Belse%7Bif(captions%5Bi%2B1%5D)%7Bprevious_start%3Dstart%3Bcontinue%3B%7D%7Dtemp%3Dcaption.textContent.replace(%2F%3C%2Fg%2C'%26lt%3B').replace(%2F%3E%2Fg%2C'%26gt%3B')%3Bsrt_output%2B%3Di%2B'%5Cn'%2BmakeTimeline(start)%2B'%20--%3E%20'%2BmakeTimeline(end)%2B'%5Cn'%2Btemp%2B'%5Cn%5Cn'%3B%7D%3Breturn%20srt_output%3B%7Dwindow.location.href%3D'data%3Atext%2Fplain%3Bbase64%2C'%2Bbtoa(returnSRT(document.documentElement))})();

6

YouTube 동영상에서 추출 자막에 몇 가지 방법이 있습니다 -

이 일반 URL에 언어와 VideoId를 지정하면 선택한 동영상에 원하는 언어로 자막이 포함 http://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEOID}.xml파일을 얻을 수 있습니다 .

해당 파일에서 태그를 제거하고 일반 텍스트 스크립트를 작성 하려면 다음을 수행해야합니다.

  • Microsoft Excel을 엽니 다.
  • 한 셀 안에 자막 붙여 넣기
  • Ctrl+를 누르십시오H
  • 바꾸기 탭의 "찾을 내용"텍스트 상자에 <*>를 입력하고 "바꾸기"텍스트 상자를 비워두고을 클릭하십시오 Replace All. 검색 표현식은 원본 텍스트 내의 모든 태그를 제거합니다.

또는 한 번의 클릭으로 YouTube 비디오에서 사용 가능한 모든 서브를 다운로드하고 형식으로 변환하여 VLC Media Player와 같은 미디어 플레이어에서 사용할 수있는 Google2SRT 라는 오픈 소스 도구 .srt가 있습니다.

업데이트 : Ted.com은 이제 해당 사이트의 대화 내용을 제공합니다.


일반 URL이 작동하지 않는 것 같습니다. 입력 http://video.google.com/timedtext?lang=english&v=b11AXknrsEI했지만 작동하지 않습니다. 또한 개발자 도구로 이동해도 도움이되지 않습니다. 거기에는 많은 자원이 있으며 그중 어느 것도 timedtext를 말하지 않습니다.
61897

신경 쓰지 마십시오. 개발 도구를 통해 찾았습니다. 그래도 여전히 일반적인 URL을 얻을 수는 없습니다. 가장 쉬운 방법입니다.
61897

시도 youtube.com/api/timedtext?lang= {LANG} V = {동영상 ID}
mvark

나는 뭔가 잘못하고 있어야합니다. 이 비디오를 들어 I 입력 있지만 빈 페이지를로드합니다. 나는 변화를 시도 englishen하고 eng있지만, 같은 일을한다.
61897

자막이 수동으로 전사 된 경우에만 자막을 가져올 수있는 것처럼 보입니다 (예 : 자동 생성되지 않음). 공유 한 비디오 링크에는 자동 캡션 만 있습니다.
mvark



0

자신의 비디오 인 경우 비디오 관리자에서 자막을 다운로드 할 수 있습니다. 이동 :

비디오 관리자 >> 편집 (원하는 비디오에서) >> 캡션 >> (다운로드하려는 트랙을 클릭하십시오) >> 작업 (드롭 다운 상자)

작성 시점에는 세 가지 파일 유형이 있습니다.

  • .vtt
  • .srt
  • .sbv

응용 프로그램마다 용도가 다르지만 매우 비슷합니다. SRT가 가장 일반적 일 것입니다.

그렇지 않으면 비디오가 아닌 경우 가장 좋은 방법은 유일한 방법은 개발자 도구에서 xml 파일을 얻는 것입니다.

이 예에서 Chrome을 사용하여 동영상으로 이동 한 후 다음 단계를 따르십시오.

  1. 비디오를 일시 정지하십시오. 광고가 있으면 재생 될 때까지 기다리십시오.
  2. 키보드에서 F12를 누릅니다. 개발자 도구가 열립니다. 비디오가 활성화되지 않도록 페이지에서 빈 공간을 클릭해야 할 수도 있습니다.
  3. 개발자 도구에서 네트워크 탭을 클릭하십시오.
  4. 동영상 바로 아래의 대화 내용 아이콘을 클릭하십시오. 개발자 도구의 네트워크 탭에 두 개의 항목이 나타납니다.
  5. 두 항목 모두 제목 timedtext?에 여러 변수가 있습니다. 두 번째는 일반적으로 원하는 것입니다. 다음과 같이 시작됩니다.
    <transcript> <text start="4.14" dur="3.049">my name is doctor john rush</text> <text start="7.189" dur="3.731">I'm the CEO and president</text>

이 xml 파일은 웹 페이지에서 대화 내용을 사용하려는 경우에 유용합니다. 그 외에는 SRT 파일을 사용하는 것과 같은 방식으로 사용할 수 있다고 생각하지 않습니다. 프로그래밍에 능숙하다면 SRT로 변환 할 프로그램을 쉽게 작성할 수 있습니다. 다른 목적으로 데이터를 추출하는 자체 C # 프로그램을 작성했으며 2 시간 미만이 걸렸습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.