VideoDownloader เป็นโปรแกรมดาวน์โหลดวิดีโอที่พัฒนาขึ้นโดยใช้ไลบรารี่ yt-dlp
python
yt-dlp คือโปรแกรมดาวน์โหลดเสียง/วิดีโอ บรรทัดคำสั่ง ที่มีฟีเจอร์หลากหลาย ซึ่งรองรับเว็บไซต์นับพันแห่ง โปรเจ็กต์นี้เป็นทางแยกของ youtube-dl โดยอิงจาก youtube-dlc ที่เลิกใช้แล้วในขณะนี้
yt-dlp รองรับเว็บไซต์วิดีโอทั่วไปทั้งหมด เป็นโปรแกรมบรรทัดคำสั่งที่มีฟังก์ชันที่ทรงพลังและพารามิเตอร์ที่หลากหลาย โปรเจ็กต์นี้ได้รับการพัฒนาโดยอิงจากไลบรารี Python ของ yt-dlp (yt_dlp) โดยจะใช้ไลบรารี tkinter เพื่อสร้างแอปพลิเคชัน GUI สำหรับการดาวน์โหลดวิดีโอ ซึ่งช่วยลดความจำเป็นในการป้อนคำสั่งที่ยาวบนบรรทัดคำสั่ง และมอบประสบการณ์การดาวน์โหลดที่ง่ายดายให้กับคุณ .
สภาพแวดล้อม Windows ถูกใช้เป็นค่าเริ่มต้น ฉันใช้ pycharm+Anaconda:
หลาม>=3.8
ffmpeg ใช้เพื่อรวมเสียงและวิดีโอโดยอัตโนมัติหลังจากดาวน์โหลด โปรดทราบว่าเป็นไฟล์ปฏิบัติการแบบไบนารีของ ffmpeg ไม่ใช่ไลบรารี่ python อย่าลืมเพิ่มลงในตัวแปรสภาพแวดล้อม เช่น: D:ffmpegbin
(1) โคลนโครงการนี้
โคลนคอมไพล์ [email protected]:CQUPTLei/VideoDownloader.git
(2) สร้างสภาพแวดล้อมเสมือน conda ใหม่สำหรับโปรเจ็กต์ ตัวอย่าง:
conda create -n videodownload python=3.12
(3) ใช้ pip เพื่อติดตั้งไลบรารี yt_dlp:
conda เปิดใช้งานการดาวน์โหลดวิดีโอ pip ติดตั้ง yt-dlp
ภายใต้ Linux ให้ใช้ Ubuntu24.04 เป็นตัวอย่าง ใช้ vim เพื่อแก้ไข python venv สภาพแวดล้อมเสมือน (คุณสามารถใช้ conda ได้):
(1) โคลนโครงการในเครื่อง
โคลนคอมไพล์ [email protected]:CQUPTLei/VideoDownloader.git
(2) ติดตั้ง python venv
ฉลาดติดตั้ง python3.12-venv
(3) สร้างสภาพแวดล้อมเสมือนจริง
python3 -m ตัวดาวน์โหลด venv
(4) เปิดใช้งานสภาพแวดล้อมเสมือนจริง
ตัวดาวน์โหลดแหล่งที่มา / bin / เปิดใช้งาน
(5) ติดตั้งไลบรารีที่เกี่ยวข้อง
pip ติดตั้ง yt-dlp sudo apt ติดตั้ง python3-tk pip install Prettytable# สำหรับบรรจุภัณฑ์ ให้ใช้ pip install pyinstaller
(6) ให้สิทธิ์ปฏิบัติการ main.py
sudo chmod 775 main.py
(7) การดำเนินการ (สังเกตเส้นทาง)
python3 main.py
การแก้ไขที่เป็นไปได้: หากคุณใช้เพื่อรับไฟล์คุกกี้จากเบราว์เซอร์ คุณอาจต้องแก้ไขเส้นทาง และอาจจำเป็นต้องแก้ไขตำแหน่งที่เก็บข้อมูลเริ่มต้น
หน้าต่าง:
ติดตั้งไลบรารี pyinstaller:
pip ติดตั้ง pyinstaller
ตัวอย่างคำสั่งบรรจุภัณฑ์ ให้ความสนใจกับแต่ละเส้นทาง รหัสต่อไปนี้ถูกดำเนินการในไดเร็กทอรีที่ main.py ตั้งอยู่:
pyinstaller -F --paths=D:anacondaenvsvideodownloadLibsite-packages --python=D:anacondaenvsvideodownloadpythonw.exe --noconsole --icon=icon1.ico --name=ตัวดาวน์โหลด main.py
อูบุนตู:
ตัวอย่างง่ายๆ:
pyinstaller -F --paths=/home/moon/VideoDownloader/downloader/lib/python3.12/site-packages --python=/home/moon/VideoDownloader/downloader/bin/python312 --noconsole --icon=icon1.ico --name=Downloader main.py
แมคโอเอส:
เพิ่มการประมวลผลและการดาวน์โหลดรายการวิดีโอ
ดำเนินการดาวน์โหลดหลายรายการพร้อมกัน
รองรับพารามิเตอร์ที่กำหนดเองเพิ่มเติม
-
ไม่มีคู่มืออ้างอิงพิเศษสำหรับ yt_dlp บน pypi พารามิเตอร์ที่มีอยู่ของโปรแกรมบรรทัดคำสั่ง yt-dlp นั้นเขียนไว้ทั้งบน github และ pypi แต่คุณสามารถอ่านการใช้งานเฉพาะของ yt_dlp: YoutubeDL.py
เพื่อรับพารามิเตอร์และความหมายที่มีอยู่ .
ต่อไปนี้ส่วนใหญ่เป็นพารามิเตอร์ที่รองรับโดยเมธอด yt_dlp.YoutubeDL(download_opts)
วัตถุ YoutubeDL ยอมรับพารามิเตอร์จำนวนมาก เพื่อไม่ให้ตัวสร้างวัตถุอิ่มตัวด้วยอาร์กิวเมนต์ จึงได้รับพจนานุกรมของตัวเลือกแทน จะถูกเพิ่มเข้าไป ดังนั้น นี่คือ "การลงทะเบียนร่วมกัน" ตัวเลือกที่ใช้ได้:ชื่อผู้ใช้: ชื่อผู้ใช้เพื่อการตรวจสอบสิทธิ์ รหัสผ่าน: รหัสผ่านเพื่อวัตถุประสงค์ในการตรวจสอบสิทธิ์ รหัสผ่านวิดีโอ: รหัสผ่านสำหรับการเข้าถึงวิดีโอ ap_mso: ตัวระบุผู้ดำเนินการระบบหลายระบบของ Adobe Pass.ap_username : บัญชีผู้ดำเนินการหลายระบบ username.ap_password: รหัสผ่านบัญชีผู้ดำเนินการหลายระบบ usenetrc: ใช้ netrc สำหรับการตรวจสอบสิทธิ์แทน netrc_location: ตำแหน่งของไฟล์ netrc ค่าเริ่มต้นเป็น ~/.netrc.netrc_cmd: ใช้คำสั่งเชลล์เพื่อรับข้อมูลรับรอง: พิมพ์ข้อมูลเพิ่มเติมไปที่ stdout.quiet: ห้ามพิมพ์ข้อความไปที่ stdout.no_warnings: ห้ามพิมพ์สิ่งใด ๆ ออกมาเพื่อ warnings.forceprint: คำสั่งที่มีปุ่มเมื่อแมปกับรายการเทมเพลตที่จะพิมพ์ไปยัง stdout คีย์ที่อนุญาตคือวิดีโอหรือปุ่มอื่น ๆ ของรายการใน utils.POSTPROCESS_WHEN เพื่อความเข้ากันได้ รายการเดียวก็ได้รับการยอมรับเช่นกัน print_to_file: คำสั่งที่มีคีย์เมื่อ (เหมือนกับ Forceprint) แมปกับรายการสิ่งอันดับด้วย (เทมเพลต ชื่อไฟล์)forcejson: บังคับให้พิมพ์ info_dict เป็น JSON.dump_single_json: บังคับให้พิมพ์ info_dict ของเพลย์ลิสต์ทั้งหมด (หรือวิดีโอ) เป็น JSON line.force_write_download_archive: บังคับให้เขียนไฟล์ดาวน์โหลดโดยไม่คำนึงถึง 'skip_download' หรือ 'simulate'.simulate: อย่าดาวน์โหลดไฟล์วิดีโอ หากไม่ได้ตั้งค่า (หรือไม่มี) จำลองเฉพาะในกรณีที่ใช้ listsubtitles, listformats หรือ list_thumbnails รูปแบบ: ดูรายละเอียดเพิ่มเติมที่ "FORMAT SELECTION" สำหรับการใช้งานallow_unplayable_formats: อนุญาตให้แยกและดาวน์โหลดรูปแบบที่ไม่สามารถเล่นได้ ignore_no_formats_error: ละเว้นข้อผิดพลาด "ไม่มีรูปแบบวิดีโอ" มีประโยชน์สำหรับการแตกข้อมูลเมตาแม้ว่าวิดีโอจะไม่พร้อมให้ดาวน์โหลดจริง (ทดลอง) format_sort: รายการฟิลด์ที่จะจัดเรียง รูปแบบวิดีโอ ดู "รูปแบบการเรียงลำดับ" สำหรับรายละเอียดเพิ่มเติม format_sort_force: บังคับใช้ format_sort ที่กำหนด ดู "รูปแบบการเรียงลำดับ" สำหรับรายละเอียดเพิ่มเติม prefer_free_formats: เลือกใช้รูปแบบวิดีโอที่มีคอนเทนเนอร์ฟรีมากกว่ารูปแบบที่ไม่ฟรีซึ่งมีคุณภาพเท่ากันหรือไม่: อนุญาตให้รวมสตรีมวิดีโอหลายรายการเป็นไฟล์เดียวallow_multiple_audio_streams: อนุญาตให้รวมสตรีมเสียงหลายรายการเป็นไฟล์เดียวcheck_formats ว่าจะทดสอบว่ารูปแบบนั้นสามารถดาวน์โหลดได้หรือไม่ (เลือกทั้งหมด), เท็จ (เลือกไม่มี) เส้นทาง 'selected' (ตรวจสอบรูปแบบที่เลือก) หรือไม่มี (ตรวจสอบเฉพาะเมื่อมีการร้องขอโดยตัวแยกข้อมูล): พจนานุกรมของเส้นทางเอาต์พุต คีย์ที่อนุญาตคือ 'home' 'temp' และคีย์ของ OUTTMPL_TYPES (ใน utils/_utils.py)outtmpl : พจนานุกรมของเทมเพลตสำหรับชื่อเอาต์พุต คีย์ที่อนุญาตคือ 'ค่าเริ่มต้น' และคีย์ของ OUTTMPL_TYPES (ใน utils/_utils.py) เพื่อความเข้ากันได้กับ youtube-dl สามารถใช้สตริงเดียวได้outtmpl_na_placeholder: Placeholder สำหรับ meta fields.restrictfilenames : ไม่อนุญาตให้ใช้ "&" และการเว้นวรรคในไฟล์ namestrim_file_name: จำกัดความยาวของชื่อไฟล์ (ไม่รวมนามสกุล) ชื่อไฟล์ windows: บังคับให้ชื่อไฟล์เป็น windows ที่เข้ากันได้ignoreerrors: อย่าหยุดข้อผิดพลาดในการดาวน์โหลด/ภายหลังการประมวลผล สามารถเป็น 'only_download' เพื่อละเว้นเฉพาะข้อผิดพลาดในการดาวน์โหลด ค่าเริ่มต้นคือ 'only_download' สำหรับ CLI แต่เป็นเท็จสำหรับ APIskip_playlist_after_errors: จำนวนความล้มเหลวที่อนุญาตจนกว่าเพลย์ลิสต์ที่เหลือจะถูกข้ามไปallowed_extractors: รายการ regexes ที่จะจับคู่กับชื่อตัวแยกที่ได้รับอนุญาตเขียนทับ: เขียนทับไฟล์วิดีโอและข้อมูลเมตาทั้งหมดหากเป็น True ให้เขียนทับเท่านั้น ไฟล์ที่ไม่ใช่วิดีโอ หากไม่มี และอย่าเขียนทับไฟล์ใดๆ หาก Falseplaylist_items: ดัชนีเฉพาะของเพลย์ลิสต์ที่จะดาวน์โหลด playlistrandom: ดาวน์โหลดรายการเพลย์ลิสต์ตามลำดับแบบสุ่มlazy_playlist: ประมวลผลรายการเพลย์ลิสต์ตามที่ได้รับ matchtitle: ดาวน์โหลดเฉพาะชื่อที่ตรงกัน rejecttitle : ปฏิเสธการดาวน์โหลดสำหรับ titles.logger ที่ตรงกัน: บันทึกข้อความไปยัง logging.Logger instance.logtostderr: พิมพ์ทุกอย่างไปที่ stderr แทน stdout.consoletitle: แสดงความคืบหน้าใน titlebar.writedescription ของหน้าต่างคอนโซล: เขียนคำอธิบายวิดีโอไปยัง .description filewriteinfojson: เขียน คำอธิบายวิดีโอไปยังไฟล์ .info.jsonclean_infojson: ลบข้อมูลเมตาภายในออกจาก infojsongetcomments: แยกความคิดเห็นของวิดีโอ สิ่งนี้จะไม่ถูกเขียนลงดิสก์ เว้นแต่จะได้รับ writeinfojson ด้วยเขียนคำอธิบายประกอบ: เขียนคำอธิบายประกอบวิดีโอลงในไฟล์ .annotations.xml filewritethumbnail: เขียนภาพขนาดย่อ รูปภาพไปยัง fileallow_playlist_files: ไม่ว่าจะเขียนคำอธิบายของเพลย์ลิสต์, infojson ฯลฯ รวมถึงดิสก์เมื่อใช้ตัวเลือก 'write*' write_all_thumbnails: เขียนรูปแบบภาพย่อทั้งหมดลงใน fileswritelink: เขียนไฟล์ทางลัดอินเทอร์เน็ต ขึ้นอยู่กับแพลตฟอร์มปัจจุบัน (.url/. webloc /.desktop)writeurllink: เขียนไฟล์ทางลัดอินเทอร์เน็ต Windows (.url)writewebloclink: เขียนไฟล์ทางลัดอินเทอร์เน็ต macOS (.webloc)writedesktoplink: เขียนไฟล์ทางลัดอินเทอร์เน็ต Linux (.desktop)writesubtitles: เขียนคำบรรยายวิดีโอไปยัง filewriteautomaticsub : เขียนคำบรรยายที่สร้างขึ้นโดยอัตโนมัติลงในรายการไฟล์คำบรรยาย: แสดงรายการคำบรรยายที่มีอยู่ทั้งหมดสำหรับรูปแบบคำบรรยายวิดีโอ: รหัสรูปแบบสำหรับคำบรรยายคำบรรยาย: รายการภาษาของคำบรรยายที่จะดาวน์โหลด (สามารถเป็น regex) รายการอาจมี "ทั้งหมด" เพื่ออ้างอิงถึง คำบรรยายที่มีอยู่ทั้งหมด สามารถขึ้นต้นด้วย "-" เพื่อแยกออกจากภาษาที่ร้องขอ เช่น ['all', '-live_chat']keepvideo: เก็บไฟล์วิดีโอไว้หลังการประมวลผลภายหลัง: A utils.DateRange object ให้ดาวน์โหลดเฉพาะในกรณีที่ upload_date อยู่ในช่วง skip_download: ข้ามการดาวน์โหลดไฟล์วิดีโอจริง: ตำแหน่งของไฟล์แคชในระบบไฟล์ เท็จ เพื่อปิดการใช้งานระบบไฟล์แคช noplaylist: ดาวน์โหลดวิดีโอเดียวแทนที่จะเป็นเพลย์ลิสต์หากมีข้อสงสัย age_limit: จำนวนเต็มแทนอายุของผู้ใช้เป็นปี วิดีโอที่ไม่เหมาะสมสำหรับอายุที่กำหนดจะถูกข้ามไป min_views: จำนวนเต็มแทนจำนวนการดูขั้นต่ำ