FFMPEG แยก MP4 ด้วยคุณภาพเดียวกัน


51

ฉันมีไฟล์ MP4 ขนาดใหญ่หนึ่งไฟล์ ฉันกำลังพยายามแยกไฟล์เป็นไฟล์ขนาดเล็กลง

ffmpeg -i largefile.mp4 -sameq -ss 00:00:00 -t 00:50:00 smallfile.mp4

ฉันคิดว่าการใช้ -sameq จะทำให้การตั้งค่าคุณภาพคงเดิม อย่างไรก็ตามฉันต้องไม่เข้าใจในสิ่งที่ทำ

ฉันกำลังมองหาคุณภาพเดียวกัน (เสียง / วิดีโอ) และการบีบอัดด้วยไฟล์แยก อย่างไรก็ตามการตั้งค่านี้ทำให้ไฟล์แยกมีขนาดใหญ่กว่ามาก

ฉันต้องตั้งค่าสถานะใดเพื่อรักษาคุณภาพและคุณลักษณะเดียวกันในไฟล์แยกขณะที่รักษาอัตราส่วนคุณภาพต่อขนาดเดิมไว้

ตัวอย่างเช่นหากไฟล์ดั้งเดิมของฉันมีขนาดประมาณ 12 GB และ 1920x1080 ด้วยอัตราบิต 10617kbps และอัตราเฟรม 23 เฟรม / วินาทีและเสียง 6 ช่องทางที่มี 317kbps ฉันต้องการไฟล์แยกเป็นขนาดเดียวในสามของขนาดนี้ ( ถ้าฉันแบ่งมันออกเป็นสามชิ้น)


3
FYI สำหรับทุกคนที่อ่านข้อความนี้: อย่าใช้-sameqมันไม่ได้หมายความว่า "คุณภาพเดียวกัน"
Zaz

คำตอบ:


81

หากคุณต้องการแยกวิดีโอโดยไม่ต้องเข้ารหัสอีกครั้งให้ใช้copyตัวแปลงสัญญาณสำหรับเสียงและวิดีโอ ลองสิ่งนี้:

ffmpeg -ss 00:00:00 -t 00:50:00 -i largefile.mp4 -acodec copy \
-vcodec copy smallfile.mp4

โปรดทราบว่านี่จะสร้างการแยกแรกเท่านั้น ffmpeg -ss 00:50:00หนึ่งต่อไปสามารถทำได้ด้วยคำสั่งที่เริ่มต้นด้วย

สิ่งนี้สามารถทำได้ด้วยคำสั่งเดียว:

ffmpeg -i largefile.mp4 -t 00:50:00 -c copy smallfile1.mp4 -ss 00:50:00 -c copy smallfile2.mp4

สิ่งนี้จะสร้าง smallfile1.mp4 ซึ่งลงท้ายด้วย 50 นาทีในวิดีโอของ largefile.mp4 และ smallfile2.mp4 เริ่มต้นที่ 50 นาทีและสิ้นสุดที่ท้ายของ largefile.mp4


2
เมื่อใช้วิธีนี้กับไฟล์ mp4 ฉันได้รับสองวินาทีแรกของทุกไฟล์ที่สร้างขึ้นเป็นเฟรมที่ตรึง (เสียงเล่นตามปกติ) มีเหตุผลอะไรบ้างที่รู้เรื่องนี้?
Ron Harlev

ฟังดูเหมือนแมลง อัปเดตเป็น ffmpeg ล่าสุด
Robert

@ Robert ฉันได้อัปเดตหลายครั้งตั้งแต่ปี 2010 ขอบคุณ
fideli

@RonHarlev นี่เป็นพฤติกรรมที่คาดไว้ในปัจจุบัน หากไม่มีการเข้ารหัสซ้ำคุณสามารถตัดวิดีโอได้ที่ "คีย์เฟรม" เท่านั้น เฟรมที่อยู่ระหว่างเฟรมหลักนั้นมีข้อมูลไม่เพียงพอที่จะสร้างเป็นภาพที่สมบูรณ์ ดู: trac.ffmpeg.org/wiki/Seeking#Seekingwhiledoingacodeccopy
Philip Thrasher

3

วิธีอื่นในการทำคือ:

// create a 2-min clip
ffmpeg -i input.mp4 -ss 00:10:00 -to 00:12:00 -c copy output.mp4

/**
* -i  input file
* -ss start time in seconds or in hh:mm:ss
* -to end time in seconds or in hh:mm:ss
* -c codec to use 
*/

คุณภาพของไฟล์ยังคงเหมือนเดิมเพราะเราใช้-c copyเพื่อคัดลอกสตรีมเสียง + วิดีโอต้นฉบับไปยังเอาต์พุต

การอ้างอิง, รายการคำสั่ง FFmpeg ที่ใช้กันทั่วไป: DigitalFortress

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.