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 ยอมรับพารามิเตอร์จำนวนมาก เพื่อไม่ให้ตัวสร้างวัตถุอิ่มตัวด้วยอาร์กิวเมนต์ จึงได้รับพจนานุกรมของตัวเลือกแทน ถูกเพิ่มเข้าไป ดังนั้นนี่คือ "การลงทะเบียนร่วมกัน" ตัวเลือกที่ใช้ได้: ชื่อผู้ใช้: ชื่อผู้ใช้เพื่อวัตถุประสงค์ในการตรวจสอบสิทธิ์ รหัสผ่าน: รหัสผ่านสำหรับวัตถุประสงค์ในการตรวจสอบสิทธิ์ รหัสผ่านวิดีโอ: รหัสผ่านสำหรับ การเข้าถึง video.ap_mso: ตัวระบุผู้ดำเนินการหลายระบบ Adobe Pass.ap_username: ชื่อผู้ใช้บัญชีผู้ดำเนินการหลายระบบ.ap_password: รหัสผ่านบัญชีผู้ดำเนินการหลายระบบ.usenetrc: ใช้ netrc สำหรับการตรวจสอบสิทธิ์แทน netrc_location: ตำแหน่งของไฟล์ netrc ~/.netrc.netrc_cmd: ใช้คำสั่งเชลล์เพื่อรับข้อมูลประจำตัว verbose: พิมพ์ข้อมูลเพิ่มเติมไปที่ 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.force_write_download_archive: บังคับให้เขียนไฟล์ดาวน์โหลดโดยไม่คำนึงถึง 'skip_download' หรือ 'simulate'.simulate: ห้ามดาวน์โหลดไฟล์วิดีโอ หากไม่ได้ตั้งค่า ( หรือไม่มี) จำลองเฉพาะเมื่อมีการใช้ listsubtitles, listformats หรือ list_thumbnails รูปแบบ: โค้ดรูปแบบวิดีโอ โปรดดูที่ "FORMAT SELECTION" สำหรับรายละเอียดเพิ่มเติม คุณยังสามารถส่งผ่านฟังก์ชันได้ ฟังก์ชันนี้รับ 'ctx' เป็นอาร์กิวเมนต์และส่งกลับรูปแบบที่จะดาวน์โหลด ดู "build_format_selector" สำหรับการ Implementallow_unplayable_formats: อนุญาตให้แยกและดาวน์โหลดรูปแบบที่ไม่สามารถเล่นได้ ignore_no_formats_error: ละเว้น "ไม่ ข้อผิดพลาดรูปแบบวิดีโอ" มีประโยชน์สำหรับการดึงข้อมูลเมตาแม้ว่าวิดีโอจะไม่พร้อมให้ดาวน์โหลดจริง (ทดลอง) format_sort: A รายการช่องที่ใช้จัดเรียงรูปแบบวิดีโอ ดู "การเรียงลำดับรูปแบบ" สำหรับรายละเอียดเพิ่มเติม format_sort_force: บังคับใช้ format_sort ที่กำหนด ดู "การเรียงลำดับรูปแบบ" สำหรับรายละเอียดเพิ่มเติมprefer_free_formats: ระบุว่าต้องการรูปแบบวิดีโอที่มีคอนเทนเนอร์ฟรีมากกว่าที่ไม่ฟรี อันที่มีคุณภาพเดียวกันallow_multiple_video_streams: อนุญาตให้รวมสตรีมวิดีโอหลายรายการเป็นไฟล์เดียวallow_multiple_audio_streams: อนุญาตให้รวมสตรีมเสียงหลายรายการเข้าด้วยกัน filecheck_formats เดียวว่าจะทดสอบว่ารูปแบบนั้นสามารถดาวน์โหลดได้หรือไม่ เส้นทาง 'selected' (ตรวจสอบรูปแบบที่เลือก) หรือไม่มี (ตรวจสอบเฉพาะเมื่อมีการร้องขอโดยตัวแยกข้อมูล): พจนานุกรมของเส้นทางเอาต์พุต คีย์ที่อนุญาตคือ 'home' 'temp' และคีย์ของ OUTTMPL_TYPES (ใน utils/_utils.py)outtmpl : พจนานุกรมของเทมเพลตสำหรับชื่อเอาต์พุต คีย์ที่อนุญาตคือ 'ค่าเริ่มต้น' และคีย์ของ OUTTMPL_TYPES (ใน utils/_utils.py) ด้วย youtube-dl คุณสามารถใช้สตริงเดี่ยวได้ outtmpl_na_placeholder: ตัวยึดตำแหน่งสำหรับฟิลด์เมตาที่ไม่พร้อมใช้งาน จำกัดชื่อไฟล์: ไม่อนุญาตให้ใช้ "&" และการเว้นวรรคในไฟล์ 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: ปฏิเสธการดาวน์โหลดสำหรับชื่อที่ตรงกัน logger: บันทึกข้อความไปยังการบันทึก Logger instance.logtostderr: พิมพ์ทุกอย่างไปที่ stderr แทน stdout.consoletitle: แสดงความคืบหน้าใน titlebar.writedescription ของหน้าต่างคอนโซล: เขียนคำอธิบายวิดีโอลงใน .description filewriteinfojson: เขียนคำอธิบายวิดีโอไปที่ .info.json fileclean_infojson: ลบข้อมูลเมตาภายในออกจาก infojsongetcomments: แยกความคิดเห็นของวิดีโอ สิ่งนี้จะไม่ถูกเขียนลงดิสก์ เว้นแต่จะได้รับ writeinfojson ด้วยเขียนคำอธิบายประกอบ: เขียนคำอธิบายประกอบวิดีโอลงในไฟล์ .annotations.xml filewritethumbnail: เขียนภาพขนาดย่อไปยัง fileallow_playlist_files: ไม่ว่าจะเขียนคำอธิบายเพลย์ลิสต์ infojson ฯลฯ ลงดิสก์เมื่อใช้คำสั่ง 'write*' หรือไม่ optionswrite_all_thumbnails: เขียนรูปแบบภาพย่อทั้งหมดไปที่ fileswritelink: เขียนไฟล์ทางลัดอินเทอร์เน็ต ขึ้นอยู่กับแพลตฟอร์มปัจจุบัน (.url/.webloc/.desktop)writeurllink: เขียนไฟล์ทางลัดอินเทอร์เน็ต Windows (.url)writewebloclink: เขียนไฟล์ทางลัดอินเทอร์เน็ต macOS (.webloc)writedesktoplink: เขียนไฟล์ทางลัดอินเทอร์เน็ต Linux (.desktop)writesubtitles: เขียนคำบรรยายวิดีโอไปที่ filewriteautomaticsub: เขียนคำบรรยายที่สร้างขึ้นโดยอัตโนมัติลงในรายการไฟล์คำบรรยาย: แสดงรายการคำบรรยายที่มีอยู่ทั้งหมดสำหรับรูปแบบคำบรรยายวิดีโอ: รหัสรูปแบบสำหรับคำบรรยายคำบรรยาย: รายการภาษาของคำบรรยายที่จะดาวน์โหลด (อาจเป็น regex) รายการอาจมี "ทั้งหมด" เพื่ออ้างอิงถึงทั้งหมด คำบรรยายที่มีอยู่ ภาษาสามารถขึ้นต้นด้วย "-" เพื่อแยกออกจากภาษาที่ร้องขอ เช่น ['all', '-live_chat']keepvideo: เก็บไฟล์วิดีโอไว้หลังการประมวลผลภายหลัง: วัตถุ utils.DateRange ให้ดาวน์โหลดเฉพาะในกรณีที่ upload_date อยู่ในช่วงเท่านั้น ข้าม_ดาวน์โหลด: ข้ามการดาวน์โหลดจริงของไฟล์แคชวิดีโอ: ตำแหน่งของไฟล์แคชในระบบไฟล์ เท็จ เพื่อปิดใช้งานแคชของระบบไฟล์ .noplaylist: ดาวน์โหลดวิดีโอเดี่ยวแทนเพลย์ลิสต์หากมีข้อสงสัย age_limit: จำนวนเต็มที่แสดงอายุของผู้ใช้เป็นปี ข้าม.min_views: จำนวนเต็มที่แสดงถึงจำนวนการดูขั้นต่ำ</span