Mendapatkan URL video YouTube dengan `youtube-dl` lambat, tanpa mengunduh video


10

Saya ingin mendapatkan URL menggunakan youtube-dl, dan opsi "simulasikan" -gyang tidak mengunduh video.

Jadi saya memberi perintah berikut:

youtube-dl -g https://www.youtube.com/watch?v=k4JGSAmu4lg

Ini memberikan output berikut setelah 7 hingga 8 detik

https://r20---sn-cvh7zn7d.googlevideo.com/videoplayback?initcwndbps=1113000&mt=1408702970&requiressl=yes&ipbits=0&sver=3&fexp=901454%2C902408%2C919145%2C924626%2C927622%2C927904%2C931330%2C931983%2C934024%2C934030%2C934804%2C945118%2C945308%2C946023%2C951914&ratebypass=yes&signature=38F111D46D72FFC50B47D50B3C9A631099BF5F83.FA134C91F407989B95ACADC1F1F6946B8F18C158&upn=tU0u5t7A2Uw&sparams=id%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Cmm%2Cms%2Cmv%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&mm=31&expire=1408724634&id=o-AJNPuDp9TKMKiwzUwvSk76W7JdA0cx0bRSum9mPJJ7Vo&mv=u&source=youtube&ms=au&key=yt5&ip=115.113.1.50&itag=18

Tetapi masalahnya adalah butuh sekitar 7 hingga 8 detik untuk menanyakan URL.
Apakah ada cara agar bisa lebih cepat?


Apa yang Anda maksud dengan "simulasi", tepatnya?
Volker Siegel

ketika kita memberikan opsi -g diikuti oleh youtube-dl, itu akan menghasilkan (mensimulasikan) URL seperti yang saya sebutkan sebagai keluaran.
bharath kumar reddy bojja

Jawaban:


9

Waktu dihabiskan untuk melakukan pekerjaan

Perintah tidak menggantung atau menunggu sesuatu membuang-buang waktu,
itu sebenarnya bekerja yang membutuhkan waktu; Kemungkinan besar membutuhkan waktu dengan menambahkan beberapa penundaan jaringan kecil. Tapi bisa juga ada penundaan di sisi youtube, yang bertambah.

Itu hanya waktu yang diperlukan untuk mengunduh HTML yang diperlukan;
Perintah perlu membuat setidaknya dua permintaan HTTP, satu demi satu, dan mungkin lebih.

Jadi, jika ada yang lambat, sudah dikalikan dengan jumlah permintaan.

Bagi saya perlu 1,5 detik pada jalur yang sangat cepat - tidak jauh dari 8 detik.


Cara mengetahuinya

Saya akan menunjukkan perintah yang saya gunakan untuk mencari tahu:

Untuk membuat contoh lebih rapi, kami menggunakan variabel untuk URL:

$ u="https://www.youtube.com/watch?v=k4JGSAmu4lg"

Kami ingin mengukur durasi perintah; Menggunakan perintah timeperlu berhati-hati untuk tidak mencampur perintah dan shell builtin. Kami menggunakan fungsi kecil untuk membuat garis lebih pendek:

$ t(){/usr/bin/time -f 'Time: %es' "$@";}

Perintah Anda menulis URL file video (terpotong ke 80 kolom):

$ youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823

Mari kita ukur waktu yang diperlukan untuk berjalan di komputer saya:

$ t youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823
Time: 1.44s

Oke, satu setengah detik. Lebih cepat dari pada pertanyaan, tapi tidak lebih cepat. Tapi bagaimana cara menghabiskan waktu? Mungkin itu mengunduh video dengan cara tersembunyi dan membuangnya? Video ini berukuran 11 menit dalam 360p. Mengunduhnya tanpa opsi membutuhkan waktu sekitar 13 - sepuluh kali lebih lama.
Perlu melihat lebih dekat, dengan opsi verbose -v:

$ t youtube-dl -v -g "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-g', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?sparams=id%2Cinitcwn
Time: 1.40s

Oh, ada beberapa keterlambatan sebelum baris '[debug]' dicetak. Sepertinya youtube-dlmenghabiskan waktu untuk pengaturan konfigurasi sendiri. Sekitar seperempat detik, bukan penundaan yang kita cari. Tetapi yang dapat kita pelajari darinya adalah bahwa youtube-dlimplementasinya sendiri mungkin lambat.
Setelah pesan, tidak ada yang terjadi sampai URL hasil dicetak. Jadi kita masih belum melihat bagian yang menarik.
Pilihannya -gadalah untuk "mensimulasikan" unduhan video dalam arti bahwa ia melakukan bagian yang rumit untuk mengetahui URL semi-rahasia itu, mencetaknya, tetapi kemudian melewatkan unduhan yang sebenarnya pada akhirnya. Ada opsi serupa -syang tidak menampilkan URL, dan tampaknya serupa. Mari kita asumsikan itu cukup mirip jika membutuhkan waktu yang hampir bersamaan; Kita perlu memeriksanya.

$ t youtube-dl -v -s "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-s', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
[youtube] Setting language
[youtube] k4JGSAmu4lg: Downloading webpage
[youtube] k4JGSAmu4lg: Downloading video info webpage
[youtube] k4JGSAmu4lg: Extracting video information
Time: 1.45s

Ok, -smembutuhkan waktu yang sama -g, jadi tidak apa-apa untuk menggantinya untuk pengujian.
Lebih menarik adalah bahwa kita mendapat lebih banyak output sekarang. Dan itu dicetak dengan waktu yang menarik: Garis-garis dicetak dengan penundaan yang sama satu sama lain, jadi sepertinya mereka tentang tindakan yang sebenarnya mengambil waktu yang kita cari.
Dari pesan, setidaknya dua halaman web diunduh. Tetapi kita dapat mengasumsikan bahwa kata "halaman" tidak akan berarti satu permintaan HTTP dan satu dokumen HTML.

Apa yang kami pelajari?

Intinya adalah, pekerjaan program sebenarnya membutuhkan waktu, tidak menunggu sesuatu, atau menggantung.
Kami juga melihat beberapa langkah mengambil jumlah waktu yang sama. Tidak banyak yang bisa dihitung, jadi itu adalah perjalanan pulang-pergi dalam beberapa cara, bertambah.
Itu artinya, latensi koneksi kita hanya penting di sini. Throughput koneksi tidak relevan.

Jika Anda membuat koneksi internet Anda lebih cepat sehingga dapat mentransfer data dengan kecepatan ganda - itu tidak akan membantu sama sekali. Tetapi jika Anda bisa mendapatkan pingwaktu yang lebih baik , itu akan membuatnya lebih cepat.
Ini bukan tentang 'ping' kali ke penyedia layanan internet Anda; Waktu ping sampai ke YouTube itu yang penting - dan mungkin tidak mungkin diubah.

Menariknya, untuk langkah selanjutnya, mengunduh video, persyaratan untuk jalur cepat adalah kebalikannya: latensi tidak relevan sama sekali, dan throughput sangat penting.


Belum lelah?

Ingin lebih detail untuk memahami apa yang sebenarnya menghabiskan waktu?
Langkah selanjutnya adalah melacak koneksi HTTP; Saya menduga bahwa itu mungkin menunjukkan lebih banyak bolak-balik daripada dua, untuk pengalihan misalnya. Anda dapat menggunakan wireshark, atau proksi HTTP logging, atau stracehanya menghitung panggilan sistem untuk menghubungkan atau menulis.

Untuk hari ini, kami berdua telah melihat cukup dalam ke dalam lubang jaringan kelinci.


Jadi, apa yang bisa menjadi alasan untuk waktu yang lama? Apakah karena koneksi jaringan yang lambat?
bharath kumar reddy bojja

Tergantung seberapa lambat itu - apa pertanyaannya? Tunggu sebentar untuk detail contoh saya, saya sedang menulis mereka.
Volker Siegel

Pertanyaan saya adalah: Apakah penundaan itu disebabkan koneksi jaringan yang lambat?
bharath kumar reddy bojja

Ya sebagian. Pertanyaannya kurang sederhana daripada kedengarannya;) Ini bukan tentang throughput koneksi. Latensi itu penting di sini. Dari apa yang saya tahu, setidaknya ada tiga pulang-pergi HTTP - tapi mungkin lebih. Semua penundaan dikalikan dengan angka ini, yang bertambah. Saya tidak tahu apa-apa tentang koneksi Anda; Mungkin lambat di YouTube, sulit untuk mengatakan tanpa mengukur. Cobalah beberapa hal lain di internet yang Anda tahu seberapa cepatnya, dan periksa apakah rasanya lebih lambat, atau normal.
Volker Siegel

Jadi, saya menambahkan beberapa detail :)
Volker Siegel

6

Lakukan saja:

youtube-dl -j --flat-playlist 'https://www.youtube.com/watch?v=k4JGSAmu4lg' | jq -r '.id' | sed 's_^_https://youtube.com/v/_'

Sumber


1

Mungkin ada alasan lain. youtube-dldidistribusikan sebagai aplikasi Python zip. Setiap kali Anda menjalankannya, ia mengekstraknya lalu menjalankannya.

Anda dapat mengekstraknya secara manual dengan unzipperintah. Kemudian jalankan __main__.pyseperti yang Anda jalankan youtube-dl. Pada komputer berdaya rendah, seperti Pi, yang secara nyata akan meningkatkan kinerja Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.