เป็นไปได้ไหมที่จะใช้ ffmpeg เพื่อตัดค่า X วินาทีจากจุดเริ่มต้นของวิดีโอด้วยความยาวที่ไม่ระบุ


20

ฉันต้องตัดแต่ง 1 หรือ 2 วินาทีแรกจากชุดการบันทึก FLV ที่มีความยาวที่แตกต่างและไม่ระบุรายละเอียด ฉันได้พบแหล่งข้อมูลมากมายสำหรับการดึงช่วงเวลาที่ระบุจากวิดีโอ (เช่นคลิป 30 วินาที) แต่ไม่มีการดำเนินการใด ๆ จนสิ้นสุดวิดีโอ

ความพยายามทั้งสองนี้เพียงแค่ให้วิดีโอที่คัดลอกมา

ffmpeg -ss 2 -vcodec copy -acodec copy -i input.flv output.flv

ffmpeg -ss 2 -t 120 -vcodec copy -acodec copy -i input.flv output.flv

ความคิดในเรื่องที่สองคือ: บางทีถ้าฉันระบุความยาวเกินกว่าที่จะเป็นไปได้มันก็จะจบลง ไม่มีลูกเต๋า

ฉันรู้ว่ามันไม่ใช่ปัญหากับตัวแปลงสัญญาณหรือใช้เวลาเป็นวินาทีแทนที่จะใช้รหัสเวลาเพราะต่อไปนี้ใช้งานได้ดี:

ffmpeg -ss 2 -t 5 -vcodec copy -acodec copy -i input.flv output.flv

ความคิดอื่น ๆ ? ฉันเปิดให้ใช้เครื่องมือบรรทัดคำสั่งอื่น ๆ (ที่ใช้ Windows) แต่ฉันชอบ ffmpeg อย่างมากเนื่องจากฉันใช้มันสำหรับการสร้างภาพขนาดย่อและคุ้นเคยกับมัน

หากช่วยได้วิดีโอของฉันจะใช้เวลาไม่ถึง 2 นาที

UPDATE:

ฉันเปลี่ยนไปใช้ Mencoder ( http://www.mplayerhq.hu/ ) เนื่องจากดูเหมือนว่า ffmpeg จะไม่ประสบความสำเร็จหากไม่มีแฮ็คเพิ่มเติม

ไวยากรณ์ Mencoder เพื่อให้บรรลุสิ่งที่ฉันทำคือ:

mencoder.exe -ss 2 -oac copy -ovc copy input.flv -o output.flv

ดังนั้นที่คุณชอบ; mencoderตัวอย่างข้างต้น หรือffmpegตัวอย่างด้านล่าง?
เสียง

คำตอบ:


16

ลอง:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

ฉันคิดว่าพารามิเตอร์อินพุตควรเป็นอันดับแรก


ขอบคุณสำหรับคำตอบ การเรียงลำดับพารามิเตอร์ที่ฉันใช้ด้านบนให้ผลลัพธ์เหมือนกันดังนั้นฉันไม่คิดว่ามันเป็นคำสั่งซื้อ หลังจากยอมแพ้กับ ffmpeg ช่วงเวลาเฟรมหลักของฉันทำให้เกิดปัญหากับเครื่องมืออื่น ๆ หลังจากที่เพิ่งมาถึงตอนนี้มันเป็นช่วงเวลาของเฟรมหลักหลังจากทั้งหมด มันถูกตั้งค่าเป็น 5 วินาทีก่อนหน้านี้และตั้งแต่ฉันตั้งค่าเป็น 1 วินาที ในเวลา 5 วินาทีทั้งคำสั่งของคุณและคำสั่งที่ฉันลองไว้ด้านบนทำให้ได้พื้นที่สีดำในตอนเริ่มต้น (มีค่า 3 วินาทีน่าแปลกใจ) ในเวลา 1 วินาทีมันทำงานได้ตามที่คาดไว้
marcelebrate

มันใช้งานได้กับ mp3 ด้วย
geotheory

4
ตามที่อธิบายในการค้นหา FFmpegโดยใช้ -ss เป็นพารามิเตอร์อินพุต (ก่อนหน้า-i) ขณะทำการคัดลอกหรือแม้แต่แปลงรหัสด้วย FFmpeg เวอร์ชันเก่าใช้การค้นหาคีย์เฟรม มันเร็วกว่ามาก แต่เสียสละความแม่นยำ หากคุณใช้เป็นพารามิเตอร์เอาต์พุตกระบวนการอาจช้ากว่ามาก (อินพุตถูกถอดรหัสเฟรมทีละเฟรมแม้จะเป็นชิ้นส่วนที่ถูกทิ้ง) แต่มีความแม่นยำ แม้ว่าคำถามจะเก่า แต่ฉันคิดว่านี่ควรเป็นคำตอบที่ยอมรับได้
Jonathan Y.

23

การเปิดคำสั่งนี้จะตัดวิดีโอจาก 2 วินาทีตามที่คาดไว้:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

ปัญหานี้เกิดขึ้นกับช่วงคีย์เฟรมใน input.flv มันถูกตั้งค่าเป็น 5 วินาทีซึ่งให้ผลเฟรมสีดำ 3 วินาทีที่จุดเริ่มต้นของวิดีโอ (5 - 2 = 3) ฉันเปลี่ยนช่วงคีย์เฟรมของฉันเป็น 1 วินาทีแม้ว่า 2 วินาทีอาจจะให้ผลลัพธ์ที่ต้องการในกรณีของฉัน

อัปเดต: การสั่งซื้อ-iและ-ssพารามิเตอร์ที่อัปเดตต่อคำตอบของเดฟซึ่งฉันได้รับเครดิตแล้ว


2
ฉันมีปัญหานี้เช่นกัน โพสต์นี้ทำเพื่อฉัน ฉันกระสุนเล็กน้อยและหยุดพยายามที่จะใช้-vcodec copy -acodec copyสำหรับคำสั่งแก้ไขทั้งหมดของฉัน ต้องเข้ารหัสป้องกันไม่ให้เกิดกรอบสีดำจากจุดเริ่มต้นของวิดีโอของฉันหรือไม่ตัดในจุดที่เหมาะสม (ความแตกต่างของวินาทีโดยไม่ต้องเข้ารหัสถูกแปลไปเกือบ 5 ความแตกต่างที่สองในวิดีโอ) ดังนั้นฉันจึงจบลงด้วยการแทนที่ด้วย-vcodec copy -vcodec libx264 -crf 0
Hendy

2
ฉันเพิ่งพบสิ่งเดียวกันนี้ ฉันค้นพบว่าฉันไม่สามารถทำได้เพียง-vcodec copyเพราะชิ้นส่วนไม่ได้เริ่มต้นที่คีย์เฟรม ฉันได้รับภาพนิ่งหรือภาพสีดำเป็นเวลา N วินาทีจนกระทั่งคีย์เฟรมถัดไป หากฉันเข้ารหัสอีกครั้งจริง ๆ แทนที่จะทำสำเนาจะทำงานได้ตามที่คาดไว้ ดังนั้นแม้ว่าอินพุตและเอาต์พุตของฉันจะเป็น H264 ทั้งฉันยังคงต้องเข้ารหัสอีกครั้ง (ใช้-vcodec libx264แทน-vcodec copy)
Karl Wilbur

คำตอบของ Daves เป็นคำที่ถูกต้องเหมือน ffmpeg รุ่นล่าสุด ควรจะมาก่อน-i -ss
Arete


0

อัปเดตคำตอบนี้ตั้งแต่ปี 2019 คำสั่งอยู่ในขณะนี้:

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