เว็บไซต์อย่างเป็นทางการ https://ffmpeg.org/download.html
และเพิ่มเข้าไปในตัวแปรสภาพแวดล้อม
ffmpeg -v ffmpeg เวอร์ชัน 6.0 ลิขสิทธิ์ (c) 2000-2023 นักพัฒนา FFmpeg ที่สร้างด้วย Apple clang เวอร์ชัน 14.0.3 (clang-1403.0.22.14.1)
การแสดงหมายเลขเวอร์ชันบ่งบอกถึงความสำเร็จ
ที่ฝั่งเบราว์เซอร์ กด F12 เพื่อเข้าสู่อินเทอร์เฟซเพื่อดูคำขอเครือข่าย กรองข้อมูล m3u8
ค้นหาเนื้อหาตัวอย่าง คลิกที่วิดีโอ ค้นหาการเล่นถ่ายทอดสด คลิกแล้วลากแถบความคืบหน้าไปข้างหลัง หากไม่มี รีเฟรชเนื้อหา คำขอนี้อยู่ใน Accessed ก่อนโหลดวิดีโอ อาจไม่ได้รับการบันทึก
ขั้นตอนแรกคือการดูห้องคอมพิวเตอร์ที่มาของ header
ในขั้นตอนที่สอง Ctrl + A จะเลือกเนื้อหาทั้งหมดของการแสดงตัวอย่าง
บางสิ่งเช่นนี้:
#EXTM3U#EXT-X-VERSION:3#EXT-X-MEDIA-SEQUENCE:1#EXT-X-TARGETDURATION:35#EXTINF:33.000,xxx/1.ts?auth_key=xxx -
บันทึกเป็น aa.bj.m3u8
ในไดเร็กทอรีเดียวกับสคริปต์ python โปรดทราบว่า bj ที่อยู่ตรงกลางอาจแตกต่างกัน sz หมายถึงเซินเจิ้น และ bj หมายถึงปักกิ่ง
จากนั้นรันสคริปต์ python3 a.py
โฟลเดอร์แคชจะถูกสร้างขึ้นซึ่งรองรับการดาวน์โหลดต่อและจะถูกลบโดยอัตโนมัติหลังจากการดาวน์โหลดเสร็จสิ้น
ไม่สามารถใช้พารามิเตอร์ -mac-crf
ในการบีบอัดวิดีโอ และจำเป็นต้องเปลี่ยนคำแนะนำในการเข้ารหัส
เวอร์ชันสาธิตแตกต่างจากสคริปต์อัตโนมัติ
คำขอนำเข้า, os, re, time# sz หมายถึงเซินเจิ้น, bj หมายถึงปักกิ่ง, base_url = "https://dtliving-sz.dingtalk.com/live_hp/" def get_url(): url_list = [] พร้อมด้วย open("aa. m3u8", "r") as f: s = f.readlines() for i in s: if re.match(r".*?ts.*?", i): url_list.append(base_url + i) return url_listdef download(): urls = get_url() for i, url in enumerate(urls): with open(f"{i + 1}.ts", "wb") as f: response =ร้องขอ.get(url[: -1]) # ลบอักขระขึ้นบรรทัดใหม่ print(i, "ok") # time.sleep(1)# รวมชื่อไฟล์เพื่ออำนวยความสะดวกในการรวม FFmpeg def parse_filename(): base_path = os.getcwd() urls = get_url() ด้วย open ("file.txt", "w+") เป็น f: สำหรับฉันอยู่ในช่วง (1, 1 + len(urls)): path = f"file '{base_path}/{i}.ts'n" print( path) f.write(path)if __name__ == "__main__": download() print("ดาวน์โหลดเสร็จแล้ว...") parse_filename()
หากสำเร็จ ชุดของไฟล์二进制
จะถูกดาวน์โหลด 1.ts, 2.ts, 3.ts, ...
หากไม่ถูกต้อง แสดงว่าเป็นไฟล์ที่มีเนื้อหาในรูปแบบ xml
และข้อความแสดงข้อผิดพลาดจะปรากฏขึ้นเมื่อเปิด
วิธีแก้ไขคือดูว่า base_url
ไม่ตรงกัน หรือ sz และ bj ผิด
ffmpeg -f concat -safe 0 -i file.txt -c คัดลอก a.mp4
ฉันเชื่อว่าหากไฟล์ใหญ่เกินไปหลังจากรวมเข้าด้วยกัน คุณสามารถใช้ ffmpeg
เพื่อบีบอัดใหม่ หรือใช้ h256/hevc
เพื่อเข้ารหัสอีกครั้งเพื่อให้ไฟล์มีขนาดเล็กลง
ขอแนะนำให้ใช้การบีบอัดซอฟต์แวร์ดัดแปร
การใช้รูปแบบการเข้ารหัสวิดีโอที่มีประสิทธิภาพมากขึ้นเป็นวิธีการทั่วไปในการลดขนาดไฟล์วิดีโอโดยใช้รูปแบบการเข้ารหัสวิดีโอที่มีอัตราการบีบอัดที่สูงกว่า นี่คือตัวอย่างของการใช้ FFmpeg เพื่อแปลงวิดีโอเป็นรูปแบบการเข้ารหัส H.265:
ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4
คำสั่งดังกล่าวจะแปลงอินพุตวิดีโอ input.mp4 เป็นรูปแบบการเข้ารหัส H.265 และบันทึกผลลัพธ์เป็นไฟล์ output.mp4 ในบรรดาตัวเลือกเหล่านี้ ตัวเลือก -c:v ระบุตัวเข้ารหัสวิดีโอ libx265 ระบุการใช้ตัวเข้ารหัส x265 ตัวเลือก -crf ระบุคุณภาพวิดีโอ และ 28 ระบุคุณภาพวิดีโอเป้าหมาย ยิ่งค่าน้อย คุณภาพวิดีโอก็จะยิ่งสูงขึ้น ขนาดไฟล์ใหญ่ขึ้น
ทดสอบ วิดีโอ 1.3g ถูกบีบอัดเป็นขนาด 231m แต่ความเร็วช้าเกินไป = 0.8 การบีบอัดวิดีโอ 3 ชั่วโมงใช้เวลา 4 ชั่วโมง ค้นหาวิธีอื่น
hevc_videotoolbox ไม่ดีเท่า libx265 แต่มันเร็วมากใน m1 MacBook air 13 ของฉัน
เช่นเดียวกับตัวเข้ารหัสที่เร่งด้วยฮาร์ดแวร์ส่วนใหญ่ hevc_videtoolbox จะไม่มีประสิทธิภาพเท่ากับ libx265 ดังนั้น คุณอาจจำเป็นต้องให้บิตเรตที่สูงกว่าอย่างมากเมื่อเทียบกับ libx265 เพื่อให้ตรงกับคุณภาพที่เทียบเท่ากัน ซึ่งอาจทำลายวัตถุประสงค์ของการเข้ารหัสจาก H.264 เป็น HEVC/H.265
เว็บไซต์อย่างเป็นทางการ https://trac.ffmpeg.org/wiki/HWAccelIntro#VideoToolbox
# VideoToolbox [¶](https://trac.ffmpeg.org/wiki/HWAccelIntro#VideoToolbox "链接到这一节") [VideoToolbox](https://developer.apple.com/documentation/videotoolbox) is the macOS framework for video decoding and encoding. The following codecs are supported: - Decoding: H.263, H.264, HEVC, MPEG-1, MPEG-2, MPEG-4 Part 2, ProRes - Encoding: H.264, HEVC, ProRes To use H.264/HEVC hardware encoding in macOS, just use the encoder `-c:v h264_videotoolbox` or `-c:v hevc_videotoolbox` for H.264 or HEVC respectively. Check `ffmpeg -h encoder=...` to see encoder options. VideoToolbox supports two types of rate control: - Bitrate-based using `-b:v` - Constant quality with `-q:v`. Note that the scale is 1-100, with 1 being the lowest and 100 the highest. Constant quality mode is only available for Apple Silicon and from ffmpeg 4.4 and higher.
เปิดการเร่งความเร็ว GPU 3 และระบุตัวเข้ารหัสวิดีโอสำหรับการเข้ารหัส ควรสังเกตว่า VideoToolbox ไม่รองรับ CRF ดังนั้นจึงต้องระบุบิตเรตผ่าน -b:v
Codec AVOption crf (เลือกคุณภาพสำหรับโหมดคุณภาพคงที่) ไม่ได้ถูกนำมาใช้กับสตรีมใดๆ สาเหตุที่เป็นไปได้มากที่สุดคือประเภทที่ไม่ถูกต้อง (เช่น ตัวเลือกวิดีโอที่ไม่มีสตรีมวิดีโอ) หรือเป็นตัวเลือกส่วนตัวของตัวเข้ารหัสบางตัวซึ่ง ไม่ได้ใช้จริงสำหรับสตรีมใด ๆ
การทดสอบตัวเลือกเริ่มต้นจะเร็วขึ้นประมาณ 10 เท่า
ffmpeg video -i input.mp4 -c:v hevc_videotoolbox output.mp4
frame=126360 fps=114 q=-0.0 Lsize= 413400kB time=02:55:29.95 bitrate= 321.6kbits/s dup=663 drop=0 ความเร็ว=9.51x วิดีโอ: 315854kB เสียง: 93814kB คำบรรยาย: 0kB สตรีมอื่น ๆ: 0kB ส่วนหัวส่วนกลาง: 0kB ค่าใช้จ่ายในการ Muxing: 0.910847%
เร็วกว่ารุ่นก่อนหน้าประมาณ 10 เท่า และขนาดไฟล์เพิ่มขึ้นจาก 800 ม. เป็น 400 ม. แต่อัตราการบีบอัดลดลง ฉันจะทดสอบไฟล์เพิ่มเติมอีกสองสามไฟล์
การเข้ารหัสที่สอดคล้องกับ h264 ใน macOS ได้แก่ libx264 และ h264_videotoolbox ความเร็วทั้งสองนั้นใกล้เคียงกัน แต่ libx264 มีการใช้งาน CPU สูงและขนาดไฟล์ที่แปลงรหัสก็เล็กเช่นกัน ฉันได้ยินมาว่าข้อกำหนดในการถอดรหัสสำหรับการเล่นวิดีโอจะสูงกว่า
หลังจากการทดสอบของฉัน ฉันพบว่าไฟล์การบันทึกและการออกอากาศใช้การเข้ารหัส H265 มีข้อได้เปรียบที่ชัดเจนในฉากกีฬา 4k และการเล่นสด DingTalk มีเพียง 12 เฟรมและคุณภาพของภาพ 1080p และไม่จำเป็นต้องใช้ h265 การบันทึกและการออกอากาศที่ฉันเรียนส่วนใหญ่เป็น PPT และมีช็อตกีฬาน้อยมาก
ขอแนะนำคำแนะนำต่อไปนี้:
find ./ -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -c:v libx264 -crf 30 -c:a aac "${0%%.mp4}-hevc.mp4"' {} ;
ที่มาโค้ด https://blog.51cto.com/u_15366127/6084937 ↩
หลายวิธีในการใช้ ffmpeg เพื่อลดขนาดวิดีโอ https://juejin.cn/post/7222575963564654648 ↩
การเร่งด้วยฮาร์ดแวร์ FMPEG https://blog.xm.mk/posts/1a3h/ ↩