FFmpeg สามารถจับภาพจากวิดีโอที่สามารถใช้เป็นภาพขนาดย่อเพื่อแสดงวิดีโอ วิธีที่พบมากที่สุดของการทำที่ถูกจับในFFmpeg วิกิพีเดีย
แต่ฉันไม่ต้องการเลือกเฟรมสุ่มในบางช่วงเวลา ฉันพบตัวเลือกบางตัวที่ใช้ตัวกรองบน FFmpeg เพื่อจับการเปลี่ยนแปลงของฉาก:
ตัวกรองthumbnail
พยายามค้นหาเฟรมตัวแทนมากที่สุดในวิดีโอ:
ffmpeg -i input.mp4 -vf "thumbnail,scale=640:360" -frames:v 1 thumb.png
และคำสั่งต่อไปนี้เลือกเฉพาะเฟรมที่มีการเปลี่ยนแปลงมากกว่า 40% เมื่อเทียบกับก่อนหน้า (และอาจจะเป็นการเปลี่ยนฉาก) และสร้างลำดับ 5 PNG
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4),scale=640:360" -frames:v 5 thumb%03d.png
เครดิตข้อมูลสำหรับคำสั่งข้างต้นเพื่อFabio Sonnati ภาพที่สองดูดีขึ้นเพราะฉันสามารถรับภาพและเลือกที่ดีที่สุดได้ ฉันลองแล้วมันก็สร้างภาพเดียวกัน 5 ครั้ง
การตรวจสอบเพิ่มเติมบางอย่างทำให้ฉันไปที่:
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.png
-vsync vfr
ให้แน่ใจว่าคุณได้รับภาพที่แตกต่าง นี่ยังคงเลือกเฟรมแรกของวิดีโอเสมอส่วนใหญ่เฟรมแรกคือเครดิต / โลโก้และไม่มีความหมายดังนั้นฉันจึงเพิ่ม-ss
3 เพื่อละทิ้ง 3 วินาทีแรกของวิดีโอ
คำสั่งสุดท้ายของฉันดูเหมือนว่า:
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.jpg
นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถทำได้ ฉันสังเกตว่าตั้งแต่ฉันเลือกวิดีโอเพียง 5 วิดีโอพวกเขาส่วนใหญ่มาจากจุดเริ่มต้นของวิดีโอและอาจพลาดฉากสำคัญที่เกิดขึ้นในภายหลังในวิดีโอ
ฉันต้องการที่จะเลือกสมองของคุณสำหรับตัวเลือกที่ดีกว่าอื่น ๆ
mjpeg
ไฟล์สำหรับฉันเช่นกันและฉันก็ตรวจสอบjpegoptim
และexiv2
ทั้งสองอย่างนี้ทำงานได้ดีสำหรับฉันด้วยผลลัพธ์ JPG ทั้งหมดจากคำสั่งตัวอย่างของคุณ
libopenjpeg
.. ไม่แน่ใจว่าจะสร้างความแตกต่าง