สร้างภาพทุกๆ XX วินาทีของวิดีโอ [FFMPEG]


4

ภาพหน้าจอ: ฟิล์มภาพยนตร์

ฉันเหนื่อย ffmpeg -i video.mkv -vf fps=1 out%d.png

แต่มันสร้างภาพทีละภาพ ฉันต้องการภาพขนาดย่อทั้งหมดเป็นภาพเดียว ดังภาพข้างบน

คำตอบ:


4

enter image description here

ffmpeg -i input -filter_complex \
"select='not(mod(n,30))',scale=120:-1,tile=layout=3x2" \
-vframes 1 -q:v 2 output.jpg
  • เลือก หนึ่งเฟรมทุกๆ 30 วินาที
  • ขนาด แต่ละเฟรมให้มีขนาดเล็กลง (หรือคุณสามารถปรับขนาดหลังไทล์ได้)
  • กระเบื้อง แต่ละเฟรมเป็นภาพเดียว ขนาดกริดเริ่มต้นคือ 6x5 ดังนั้นคุณอาจต้องปรับด้วย layout ขึ้นอยู่กับจำนวนภาพที่คุณต้องการแสดง

กระบวนการอาจใช้เวลาขึ้นอยู่กับระยะเวลาและรูปแบบการป้อนข้อมูล


คงจะ fps=1 ทำงานเช่นเดียวกับ select='not(mod(n,30))'?
Damian Yerrick

@DamianYerrick คุณสามารถทำได้แทนที่จะเลือกให้แต่ละไทล์เลือกจากเฟรมเดียวต่อวินาที แต่มันจะไม่ทำงานเหมือนกันทุกประการ
llogan

0

คุณสามารถใช้สิ่งที่ชอบ

ffmpeg -i video.mkv -filter:v "select=not(mod(n\,10)),setpts=N/((25)*TB)" -qscale:v 2 frame%03d.jpg
  • select ควบคุมว่าเฟรมใดที่คุณกำลังโลภ
  • setps ควบคุมอัตราเฟรมและขึ้นอยู่กับแหล่งที่มาของคุณ - 25 สำหรับ PAL หรือ 30000/1001 สำหรับวิดีโอ NTSC
  • qscale ควบคุมคุณภาพ (quantizing scale) ของเฟรมเอาต์พุตจาก 2 (ดีที่สุด) ถึง 31 (แย่ที่สุด)

เพิ่งสังเกตเห็นการแก้ไขของคุณด้านบนหากที่ให้เฟรมที่คุณต้องการใช้ควรเป็นจุดเริ่มต้น

จากนั้นคุณจะต้องต่อภาพเข้าด้วยกันเป็นสินทรัพย์เดียวโดยใช้เครื่องมือเช่น ImageMagick

montage -background "transparent" -depth 8 -type TrueColorMatte frame??.jpg \
    -geometry 50x50 -tile 10x10 -matte -transparent "transparent" \
    -type TrueColorMatte -depth 8 allframes.jpg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.