สไลด์โชว์ลำดับภาพ ffmpeg พร้อมภาพจางหายไป?


0

นี่คือการใช้ ffmpeg รุ่น 3.4.4-0ubuntu0.18.04.1 บน Ubuntu 18.04

ฉันต้องการให้บรรลุเช่นเดียวกับในการสร้างวิดีโอที่มี 5 ภาพที่มีผล fadeIn / out ใน ffmpeg (ส่วนใหญ่ "Dip to black" ถึงแม้ว่าฉันต้องการทราบเกี่ยวกับ "Crossfade" ด้วย) - แต่ฉันมีไฟล์จำนวนมาก และฉันต้องการใช้พา ธ สัมบูรณ์และฉันเกรงว่าฉันจะพบข้อ จำกัด บรรทัดคำสั่งบางรายการหากฉันแสดงรายการแต่ละไฟล์ในบรรทัดคำสั่ง

ดังนั้นฉันได้พบสิ่งนี้แล้ว (เหมือนกันคือบันทึกบนสไลด์โชว์ ffmpeg พร้อม crossfade ):

... ที่กล่าวถึง:

"A" คือระยะเวลาเป็นวินาทีที่รูปภาพแต่ละรูปแสดง (โดยไม่มีระยะเวลาของ crossfade) และ "B" เป็นระยะเวลาของ crossfade ในหน่วยวินาที

ffmpeg -i IMG_%3d.jpg -vf zoompan=d=(A+B)/B:fps=1/B,framerate=25:interp_start=0:interp_end=255:scene=100 -c:v mpeg4 -maxrate 5M -q:v 2 out.mp4

ดังนั้นฉันมีภาพเหล่านี้:

$ ls /path/to/test_*.jpg | wc -l
249

ฉันต้องการให้เฟรมเป็น 25 เฟรมต่อวินาทีระยะเวลาของแต่ละภาพโดยไม่จางหาย: ไตรมาสที่สอง 0.25 วินาที (ดังนั้น 6.25 เฟรมหรือพื้น, 6 เฟรม) และระยะเวลาจางหาย 4 เฟรม (ดังนั้น 0.16 วินาที @ 25 เฟรมต่อวินาที) ดังนั้นฉันคาดหวังอย่างน้อย 249 * (6 + 4) = 2490 เฟรมหรือ 99.6 วินาทีที่ 25 เฟรมต่อวินาที

นี่คือรูปแบบของภาพ (จากกล้องโทรศัพท์):

$ mediainfo /path/to/test_IMG_11a.jpg
General
Complete name                            : /path/to/test_IMG_11a.jpg
Format                                   : JPEG
File size                                : 1 001 KiB

Image
Format                                   : JPEG
Width                                    : 3 840 pixels
Height                                   : 2 160 pixels
Color space                              : YUV
Chroma subsampling                       : 4:2:2
Bit depth                                : 8 bits
Compression mode                         : Lossy
Stream size                              : 1 001 KiB (100%)

ดังนั้นฉันลองบรรทัดคำสั่งนี้:

ffmpeg -an -f image2 -pattern_type glob -i '/path/to/test_*.jpg' \
-vf 'fps=25,zoompan=d=(0.25+0.16)/0.16:fps=1/0.16,framerate=25:interp_start=0:interp_end=255:scene=100' \
-vcodec libx264 -pix_fmt yuv420p -profile:v baseline -level 3 \
-y out.mp4

ผลลัพธ์นี้มีสองปัญหา:


ปัญหาแรกคือ:

[swscaler @ 0x5582a63a4500] deprecated pixel format used, make sure you did set range correctly
    Last message repeated 3 times

ในขณะที่ฉันไม่เรียกสเกลโดยตรงเห็นได้ชัดว่ามันเป็นนัยเพราะฉันเห็นในhttps://trac.ffmpeg.org/wiki/colorspace :

YUV-to-RGB หรือ scaling ต้องการ swscale

โพสต์https://stackoverflow.com/questions/43038294/im-getting-error-deprecated-pixel-format-used-make-sure-you-did-set-range-corrหมายเหตุคำเตือนนี้สามารถละเว้นได้ อย่างไรก็ตามฉันต้องการทำให้ถูกต้อง ฉันได้พบ:

แต่ถ้าคุณใช้ swscale คุณจะต้องตั้งค่าช่วงด้วยตนเองมิฉะนั้นผลลัพธ์จะไม่ถูกต้อง

... แต่ฉันไม่รู้ว่าจะระบุสีของรูปภาพอย่างไร


ปัญหาที่สอง: ไม่แน่ใจว่าเกี่ยวข้องกับปัญหาแรกหรือไม่ แต่วิดีโอเอาต์พุตเนื่องจากคำสั่งด้านบนหยุดที่เฟรม = 421 - และฉันเห็นได้ภาพ 249 ส่วนใหญ่ไม่ได้เข้ารหัส! Vlc เห็นวิดีโอ 16 วินาทีในรูปแบบเอาต์พุตด้านล่าง 2490 เฟรมหรือ 99.6 วินาทีที่ฉันคาดไว้


ดังนั้นการเรียกใช้บรรทัดคำสั่งที่ถูกต้องคืออะไรเพื่อให้ได้การนำเสนอภาพนิ่งจากลำดับภาพโดยไม่จางหายโดยไม่มีคำเตือนการคัดค้านและการเข้ารหัสภาพทั้งหมด?


1
ลบ-pix_fmt yuv420pและวางไว้ใน filterchain ของคุณเป็นตัวกรองแรก: -vf 'format=yuv420p,.... คุณยังอาจได้รับdeprecated pixel formatข้อความ "" ที่คุณสามารถเพิกเฉยได้ แต่จะปรากฏเพียงครั้งเดียวเท่านั้นและจะไม่ส่งสแปมในคอนโซล ฉันขอแนะนำให้ใช้รูปแบบแทน-pix_fmtเพื่อให้คุณสามารถควบคุมได้ดีขึ้นเมื่อการแปลงรูปแบบเกิดขึ้นเมื่อเทียบกับตัวกรองอื่น ๆ
llogan

ขอบคุณ @llogan - พยายามที่deprecated pixel formatยังคงปรากฏตลอดระยะเวลาการทำงาน (แต่ดูเหมือนว่าจะไม่ค่อยบ่อยนัก) และน่าเสียดายที่วิดีโอยังถูกตัดทอน (นั่นคือมีเพียง 421 เฟรมในวิดีโอเอาต์พุตแทนที่จะเป็น 2k +)
sdaau

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