자동 생성 된 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 입력 이 있지만 빈 페이지를로드합니다. 나는 변화를 시도 english를 en하고 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.