นี่คือการใช้ 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 คุณจะต้องตั้งค่าช่วงด้วยตนเองมิฉะนั้นผลลัพธ์จะไม่ถูกต้อง
- กำลังแปลง yuvj420p ถึง yuv420p - มีปัญหากับระดับสีดำหรือไม่ : ffmpegพร้อมตัวอย่าง "แก้ไข" ที่ใช้ colourspace
... แต่ฉันไม่รู้ว่าจะระบุสีของรูปภาพอย่างไร
ปัญหาที่สอง: ไม่แน่ใจว่าเกี่ยวข้องกับปัญหาแรกหรือไม่ แต่วิดีโอเอาต์พุตเนื่องจากคำสั่งด้านบนหยุดที่เฟรม = 421 - และฉันเห็นได้ภาพ 249 ส่วนใหญ่ไม่ได้เข้ารหัส! Vlc เห็นวิดีโอ 16 วินาทีในรูปแบบเอาต์พุตด้านล่าง 2490 เฟรมหรือ 99.6 วินาทีที่ฉันคาดไว้
ดังนั้นการเรียกใช้บรรทัดคำสั่งที่ถูกต้องคืออะไรเพื่อให้ได้การนำเสนอภาพนิ่งจากลำดับภาพโดยไม่จางหายโดยไม่มีคำเตือนการคัดค้านและการเข้ารหัสภาพทั้งหมด?
deprecated pixel format
ยังคงปรากฏตลอดระยะเวลาการทำงาน (แต่ดูเหมือนว่าจะไม่ค่อยบ่อยนัก) และน่าเสียดายที่วิดีโอยังถูกตัดทอน (นั่นคือมีเพียง 421 เฟรมในวิดีโอเอาต์พุตแทนที่จะเป็น 2k +)
-pix_fmt yuv420p
และวางไว้ใน filterchain ของคุณเป็นตัวกรองแรก:-vf 'format=yuv420p,...
. คุณยังอาจได้รับdeprecated pixel format
ข้อความ "" ที่คุณสามารถเพิกเฉยได้ แต่จะปรากฏเพียงครั้งเดียวเท่านั้นและจะไม่ส่งสแปมในคอนโซล ฉันขอแนะนำให้ใช้รูปแบบแทน-pix_fmt
เพื่อให้คุณสามารถควบคุมได้ดีขึ้นเมื่อการแปลงรูปแบบเกิดขึ้นเมื่อเทียบกับตัวกรองอื่น ๆ