ฉันจะไพพ์เอาต์พุตของ ffmpeg ไปยัง ffplay ได้อย่างไร


22

ฉันจะไพพ์เอาต์พุตของ ffmpeg ไปยัง ffplay ได้อย่างไร

ตอนนี้ฉันใช้วิธีแก้ปัญหาในการทุบตี:

mkfifo spam
(ffplay spam 2> /dev/null &) ; capture /dev/stdout | ffmpeg -i - spam

คำตอบ:


18

ฉันไม่ทราบว่าเป็นffmpegสิ่งที่ไม่สามารถส่งออกข้อมูลไปยัง stdout หรือffplayไม่สามารถรับข้อมูลจาก stdin

หากffmpegไม่สามารถส่งออกข้อมูลไปยัง stdout:

capture /dev/stdout | ffmpeg -i - >(ffplay 2> /dev/null)

(คุณย้ายข้อมูลจำเป็นต้องเพิ่ม-อาร์กิวเมนต์เข้าไปffplayเพื่อรับข้อมูลจาก stdin)

หากเป็นffplayสิ่งที่ไม่สามารถรับอินพุตจาก stdin:

ffplay <(capture /dev/stdout | ffmpeg -i -) 2> /dev/null

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ<(command)และ>(command)สร้างดูส่วนการทดแทนกระบวนการของคู่มือทุบตี


4
สำหรับฉันมันใช้ไม่ได้โดยไม่ระบุรูปแบบผลลัพธ์ด้วย "-f" อย่างชัดเจน ตามที่ระบุในffmpeg.org/ffmpeg.html : "รูปแบบปกติจะตรวจพบโดยอัตโนมัติสำหรับไฟล์อินพุตและเดาจากส่วนขยายไฟล์สำหรับไฟล์เอาต์พุต" ในคำตอบที่ได้รับ ffmpeg จะไม่สามารถเดารูปแบบผลลัพธ์ได้ ดังนั้นฉันคิดว่า ffmpeg ควรเพิ่ม "-f fmt" ไว้
Pavel K.

1
ffmpeg 2.8.6 รองรับอินพุต stdin ตามที่กล่าวไว้ในคำตอบอื่น ๆ คุณสามารถตรวจสอบการสนับสนุนได้ที่: stackoverflow.com/questions/12999674/ …
Ciro Santilli 新疆改造中心中心法轮功六四事件

17
ffmpeg -i input.avi <options> -f matroska - | ffplay -

จะทำงาน; คุณต้องตั้งค่ารูปแบบคอนเทนเนอร์สำหรับผลลัพธ์ แห่งนี้ตั้งอยู่ตามปกติ ffmpeg มองไปที่ส่วนขยายที่คุณให้การส่งออก -fแต่ที่นี่คุณจะต้องตั้งได้ด้วยตนเองด้วย ฉันแนะนำ matroska (MKV) เพราะมันสามารถมีวิดีโอเกือบทุกวิดีโอดังนั้นสิ่งที่คุณแปลงรหัสมันควรจะทำงานได้ดีอย่างสมบูรณ์

โปรดทราบว่าถ้าคุณใช้ Ubuntu 12.04, ffmpeg ถูกแทนที่ด้วย libav fork และคุณควรใช้avconvและavplayแทน ไวยากรณ์เป็นอย่างอื่นเหมือนกัน มี ffmpeg เรียงลำดับอยู่ที่นั่น แต่พิการด้วยการออกแบบ


Win10: ข้อผิดพลาดเกิดขึ้นpipe:: Invalid data found when processing inputKใน Power Shell แต่ทำงานได้ดีใน command prompt
John

11

ffmpeg รองรับการใช้งาน piping ดูในส่วนของเอกสารที่นี่

ฉันไม่ทราบวิธีการทำงานของ ffplay แต่เพื่อไพพ์เอาต์พุตของ ffmpeg ไปยังเอาต์พุตมาตรฐานคุณสามารถเพิ่มคำสั่งไพพ์ไปยังท้ายคำสั่ง ffmpeg ตัวอย่าง:

ffmpeg -i input.flv pipe:1 | ffplay -i -

1
ขอบคุณฉันคิดถึงส่วนของ man page อย่างใดอย่างหนึ่ง .. แต่ฉันไม่สามารถสร้างสิ่งนี้ให้ทำงานได้ชื่อไฟล์ที่ส่งออกจะต้องถูกลบออกจาก ffmpeg และ input pipe ที่เพิ่มเข้าไปใน ffplay args ฉันจะแก้ไขโพสต์ของคุณตาม ..
Wim

ขอบคุณ อย่างที่ฉันพูดฉันไม่เคยใช้ ffplay มาก่อน แต่ฉันรู้จัก ffmpeg
matzahboy

ในฉันman ffplayฉันไม่เห็นffplayการสนับสนุน-iสวิตช์ - อาจเป็นffmpegเพียงแค่
sdaau

1
pipe:1VS -? -ทำงานบน ffmpeg 2.8.6
Ciro Santilli 新疆改造中心法轮功六四事件

9

ดูเหมือนว่าการทำงานปกติของท่อ (อย่างน้อยในหน้าต่าง):

ffmpeg -i sintel.mpg -pix_fmt yuv420p -f rawvideo - | ffplay -f rawvideo -pix_fmt yuv420p -s 720x480 -

ยังไม่ได้ลองกับอินพุต / เอาต์พุตที่ซับซ้อนกว่านี้ ...

ffmpeg -f dshow -i video=screen-capture-recorder -pix_fmt yuv420p -f mpegts - | ffplay -analyzeduration 10 -f mpegts -

เป็นการเริ่มต้นที่เร็วขึ้นเล็กน้อย


5
ผมได้รับUnable to find a suitable output format for 'pipe:'- -fฉันต้องการที่จะระบุตัวแปลงสัญญาณด้วย
i336_

ใช้งานได้ แต่คุณภาพของภาพที่ต่ำมาก
John

หากคุณภาพของภาพต่ำให้ตรวจสอบให้แน่ใจว่าสิ่งที่คุณกำลังถ่ายในขั้นต้นคือคุณภาพของภาพสูง (บันทึกลงในไฟล์ก่อน ฯลฯ ) มัน "ควร" เป็นคุณภาพปกติ ...
rogerdpack
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.