Tải xuống bản sao YouTube được tạo tự động


25

Có cách nào để tải xuống các bản sao YouTube được tạo tự động mà không cần tải xuống video không?

Tôi muốn kiểm tra các cuộc đàm phán TED, nhưng tôi có băng thông hạn chế và muốn xuất bản sao tự động (còn có thể được gọi là phụ đề hoặc chú thích đóng).


có ai biết cách làm điều này cho các video có phụ đề được sao chép tự động không?
kenwarner

Liên quan (đối với phụ đề không được tạo tự động): webapps.stackexchange.com/questions/25072/ săn
Ốc cơ khí

cũng đã trả lời tại đây: stackoverflow.com/questions/9611397/ từ
Tin Man

Có bất kỳ tin tức về điều này?
Leo

Câu trả lời:


8

Sử dụng chức năng "Trình kiểm tra mạng" của trình gỡ lỗi tập lệnh của trình duyệt của bạn và tìm yêu cầu thứ hai cho trang timedtext sau khi bật phụ đề được sao chép, sau đó chỉ cần sao chép tất cả yêu cầu đó vào thanh địa chỉ để tải xuống chúng ở định dạng xml YouTube gốc.

Để có phiên bản SRT chạy mã này trong bảng điều khiển trình gỡ lỗi cho trang 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)

Ngoài ra đây là phiên bản bookmarklet của tập lệnh:

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

Có một số cách để trích xuất phụ đề từ video YouTube -

Bằng cách chỉ định ngôn ngữ và VideoId trong URL chung này - http://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEOID}bạn có thể nhận được một .xmltệp chứa phụ đề bằng ngôn ngữ mong muốn cho một video đã chọn.

Để loại bỏ các thẻ trong tệp đó và để có bản ghi văn bản đơn giản , đây là những gì bạn phải làm:

  • Mở Microsoft Excel
  • Sao chép dán phụ đề bên trong một ô
  • Nhấn Ctrl+H
  • Trong tab thay thế, gõ <*> trong hộp văn bản "Tìm gì" và để trống hộp văn bản "Thay thế bằng" và nhấp vào Replace All. Biểu thức tìm kiếm sẽ xóa tất cả các thẻ trong văn bản gốc.

Ngoài ra, có một công cụ nguồn mở có tên Google2SRT , tải xuống tất cả các mục con có sẵn từ video YouTube chỉ bằng một cú nhấp chuột và chuyển đổi chúng thành .srtđịnh dạng để có thể sử dụng nó trong các trình phát phương tiện như VLC Media Player.

Cập nhật: Ted.com hiện cung cấp bảng điểm các cuộc đàm phán trên trang web của mình.


URL chung dường như không hoạt động. Tôi vào http://video.google.com/timedtext?lang=english&v=b11AXknrsEInhưng không được. Ngoài ra, đi đến các công cụ phát triển không giúp đỡ. Có hàng tấn tài nguyên trong đó và không ai trong số họ nói timedtext.
61897

Nevermind, tôi đã tìm thấy nó thông qua các công cụ dev. Vẫn không thể có được một url chung để làm việc mặc dù. Đó sẽ là điều dễ dàng nhất.
61897

Hãy dùng thử youtube.com/api/timedtext?lang= {LANG} & v = {VIDEOID}
mvark 17/03/2016

Tôi phải làm gì đó sai. Đối với video này tôi nhập cái này nhưng nó tải một trang trống. Tôi đã cố gắng thay đổi englishđể enengnhưng nó làm điều tương tự.
61897 17/03/2016

Có vẻ như phụ đề chỉ có thể được tìm nạp nếu chú thích được sao chép thủ công tức là không được tạo tự động. Liên kết video bạn chia sẻ chỉ có chú thích tự động.
mvark



0

Nếu đó là video của riêng bạn, bạn có thể tải xuống phụ đề từ trình quản lý video. Đi đến:

Trình quản lý video >> Chỉnh sửa (trên video bạn muốn) >> Chú thích >> (Nhấp vào bản nhạc bạn muốn tải xuống) >> Hành động (hộp thả xuống)

Tại thời điểm viết, có ba loại tệp có sẵn:

  • .vtt
  • .
  • .sbv

Chúng có những cách sử dụng khác nhau trong các ứng dụng khác nhau, nhưng rất giống nhau. SRT có lẽ là phổ biến nhất.

Mặt khác, nếu đó không phải là video của bạn, phương pháp tốt nhất (phương pháp duy nhất) là lấy tệp xml từ công cụ Nhà phát triển.

Sử dụng Google Chrome trong ví dụ này, điều hướng đến video sau đó làm theo các bước sau:

  1. Tạm dừng video. Đợi nó phát nếu có quảng cáo.
  2. Nhấn F12 trên bàn phím của bạn. Điều này mở ra các công cụ phát triển. Bạn có thể phải nhấp vào một số chỗ trống trong trang để video không hoạt động.
  3. Nhấp vào tab Mạng trong Công cụ dành cho nhà phát triển.
  4. Nhấp vào biểu tượng bảng điểm ngay bên dưới video. Hai mục sẽ xuất hiện trong tab Mạng trong Công cụ dành cho nhà phát triển.
  5. Cả hai mục có tiêu đề timedtext?cộng với một loạt các biến. Cái thứ hai thường là cái bạn muốn. Nó bắt đầu như thế này:
    <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>

Tệp xml này hữu ích nếu bạn muốn sử dụng bản ghi trong trang web. Ngoài ra, tôi không nghĩ bạn có thể sử dụng nó giống như cách bạn sử dụng tệp SRT. Nếu bạn giỏi lập trình, bạn có thể dễ dàng viết ra một chương trình sẽ chuyển đổi nó thành SRT. Tôi đã viết chương trình C # của riêng mình để trích xuất dữ liệu cho một mục đích khác và chỉ mất chưa đầy hai giờ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.