ภาพท่อ ffmpeg ที่ดึงมาจากวิดีโอ


8

ฉันสามารถใช้คำสั่งต่อไปนี้เพื่อดึงภาพจากวิดีโอโดยใช้ ffmpeg บันทึกไว้ในระบบไฟล์:

... | ffmpeg -i - -f image2 'img-%03d.png'

ฉันต้องการไพพ์อิมเมจเหล่านี้ไปยังแอปพลิเคชันอื่นแทนที่จะบันทึกลงในระบบไฟล์ - วิธีที่จะแยกพวกเขาในไพพ์มีความสำคัญเล็กน้อยเนื่องจากมันจะเป็นสคริปต์ NodeJS ที่ฉันควบคุมตัวเอง

ต่อไปนี้ใช้ไม่ได้:

... | ffmpeg -i - -f image2 pipe: | ...

เกิดข้อผิดพลาดกับ

[image2 @ 0xe1cfc0] Could not get frame filename number 2 from pattern 'pipe:' (either set updatefirst or use a pattern like %03d within the filename pattern)
av_interleaved_write_frame(): Invalid argument

มีวิธีใดบ้างในการไพพ์รูปภาพที่ดึงมาจากวิดีโอโดยใช้ ffmpeg โดยไม่ต้องใช้ระบบไฟล์?


ลอง-f png - | ...
Gyan

@Mulvya ผลลัพธ์นี้มี[NULL @ 0x10e2860] Requested output format 'png' is not a suitable output format pipe:: Invalid argumentข้อผิดพลาดกับ
Birjolaxew

2
ลอง-f image2pipe -vcodec png - | ...ดู PNG อาจใช้งานไม่ได้หากผลลัพธ์ออกมาเป็น MJPEG หลังจากลบ vcodec
Gyan

@Mulvya ที่ได้ผลแน่นอน ขอบคุณมาก :)
Birjolaxew

คำตอบ:


7

ใช่แล้ว!

เพิ่มอาร์กิวเมนต์-f image2pipeและระบุชื่อไฟล์เอาต์พุตเป็นไฮเปอร์เดียว ( -ในบริบทนี้หมายถึงstdout) และระบุชื่อไฟล์อินพุตเป็นไฮเปอร์เดียว ( -i -ในบริบทนี้หมายถึงstdin) และระบุรูปแบบเอาต์พุตอย่างชัดเจน (เช่นสำหรับ png : -c:v png) ที่นี่เป็นตัวอย่างที่สมบูรณ์:

ffmpeg -i - -ss 00:00:3 -s 650x390 -vframes 1 -c:v png -f image2pipe -
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.