ffmpeg -i input.mp4 -map 0 -c copy -f segment -segment_time 120 -reset_timestamps 1 out%02d.mp4
... จะสร้างไฟล์ตามบรรทัดของ 'out01.mp4' out02.mp4 'แต่ละไฟล์มีระยะเวลา 120 วินาที (ยกเว้นไฟล์ล่าสุดซึ่งอาจสั้นกว่า) โปรดทราบว่าจะต้องแยกไฟล์ในคีย์เฟรมดังนั้นคุณจะไม่ได้รับการแยกที่แม่นยำ 100% ดูเอกสารส่วน
-force_key_frames
หากคุณยินดีที่จะเข้ารหัสอีกครั้งคุณจะได้รับการแยกที่ถูกต้องโดยใช้ หากต้องการบังคับให้มีเฟรมหลักทุก 120 วินาทีและแยกโดยใช้เซกเมนต์:
ffmpeg -i input.mp4 -map 0 -c:v libx264 -preset veryfast -crf 22 -c:a libfdk_aac -vbr 3 \
-force_key_frames expr:gte(t,n_forced*120) -f segment -segment_time 120 -reset_timestamps 1 out%02d.mp4
หรือคุณสามารถใช้-g
เพื่อกำหนดขนาด GOP - ซึ่งคุณต้องทราบอัตราเฟรมของวิดีโอของคุณ หากวิดีโอของคุณมีอัตราเฟรมที่ 25 เฟรมต่อวินาทีดังนั้น GOP ของ 120 * 25 = 3000 จะได้รับหนึ่งเฟรมหลักทุกสองนาที เห็นได้ชัดว่านี่มันน้อยเกินไป! การลดให้เหลือ 300 จะสมเหตุสมผลมากขึ้นและจะให้คีย์เฟรมกับสถานที่ที่คุณต้องการ:
ffmpeg -i input.mp4 -map 0 -c:v libx264 -preset veryfast -crf 22 -c:a libfdk_aac -vbr 3 \
-g 300 -f segment -segment_time 120 -reset_timestamps 1 out%02d.mp4
ตัวแปลงสัญญาณเฉพาะรุ่นที่รองรับ ffmpeg ของคุณอาจแตกต่างจากของฉัน (คุณไม่มี libfdk_aac เว้นแต่คุณจะรวบรวมจากแหล่งที่มา)
${infile/.mpg/.$((i/120)).mpg}
?