Làm cách nào tôi có thể chuyển đầu ra của ffmpeg sang ffplay?


22

Làm cách nào tôi có thể chuyển đầu ra của ffmpeg sang ffplay?

Hiện tại tôi sử dụng một cách giải quyết trong bash:

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

Câu trả lời:


18

Tôi không biết nếu nó ffmpegkhông thể xuất dữ liệu của nó thành thiết bị xuất chuẩn, hoặc ffplaykhông thể lấy đầu vào từ stdin.

Nếu ffmpegkhông thể xuất dữ liệu của nó ra thiết bị xuất chuẩn:

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

(Bạn di chuyển cần thêm một -đối số để ffplaynó lấy đầu vào từ stdin.)

Nếu ffplaykhông thể lấy đầu vào từ stdin:

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

Để biết thêm thông tin về <(command)>(command)xây dựng, hãy xem phần Thay thế quy trình trong hướng dẫn sử dụng bash.


4
đối với tôi điều này không hoạt động mà không chỉ định rõ ràng định dạng đầu ra với "-f". như được chỉ định trên ffmpeg.org/ffmpeg.html : "định dạng thường được tự động phát hiện cho các tệp đầu vào và được đoán từ phần mở rộng tệp cho các tệp đầu ra". trong câu trả lời đã cho, ffmpeg sẽ không thể đoán định dạng đầu ra. vì vậy tôi nghĩ rằng ffmpeg nên thêm "-f fmt" vào nó.
Pavel K.

1
ffmpeg 2.8.6 không hỗ trợ đầu vào stdin như được đề cập trong các câu trả lời khác. Bạn có thể kiểm tra sự hỗ trợ đó với: stackoverflow.com/questions/12999674/ từ
Ciro Santilli 改造 心 心

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

sẽ làm việc; bạn cần đặt định dạng chứa cho đầu ra. Điều này thường được đặt với ffmpeg nhìn vào phần mở rộng bạn cung cấp đầu ra, nhưng ở đây bạn phải đặt bằng tay -f. Tôi khuyên dùng matroska (MKV) vì nó có thể chứa hầu hết mọi video, vì vậy bất cứ điều gì bạn đang chuyển mã đều phải hoạt động hoàn hảo.

Lưu ý rằng nếu bạn đang sử dụng Ubuntu 12.04, ffmpeg đã được thay thế bằng ngã ba libav và bạn nên sử dụng avconvavplaythay vào đó; cú pháp là giống hệt nhau. Có một loại ffmpeg ở đó, nhưng nó bị tê liệt bởi thiết kế.


Win10: Lỗi xảy ra như pipe:: Invalid data found when processing inputKtrong Power Shell, nhưng hoạt động tốt trong dấu nhắc lệnh
John

11

ffmpeg hỗ trợ các hoạt động đường ống. Xem phần đó của tài liệu ở đây .

Tôi không biết ffplay hoạt động như thế nào, nhưng để chuyển đầu ra của ffmpeg thành đầu ra tiêu chuẩn, bạn có thể thêm lệnh pipe vào cuối lệnh ffmpeg. Thí dụ:

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

1
cảm ơn, bằng cách nào đó tôi đã bỏ lỡ phần đó của các trang man .. tuy nhiên tôi không thể làm cho cấu trúc này hoạt động, tên tệp đầu ra cần phải được xóa khỏi ffmpeg và đường ống đầu vào được thêm vào ffplay args. tôi sẽ chỉnh sửa bài viết của bạn cho phù hợp ..
wim

Cảm ơn. Như tôi đã nói, tôi chưa bao giờ sử dụng ffplay trước đây, nhưng tôi biết ffmpeg.
matzahboy

Theo tôi man ffplay, tôi không thể thấy ffplayhỗ trợ -ichuyển đổi - có lẽ ffmpegchỉ có vậy không?
sdaau

1
pipe:1vs -? -hoạt động trên ffmpeg 2.8.6.
Ciro Santilli 心 心

9

trông giống như các đường ống bình thường hoạt động (ít nhất là trong các cửa sổ):

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

chưa thử nó với đầu vào / đầu ra phức tạp hơn mặc dù ...

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

khởi động nhanh hơn một chút


5
Tôi đã nhận được Unable to find a suitable output format for 'pipe:'- tôi cần chỉ định một codec với -f.
i336_

Hoạt động, nhưng chất lượng hình ảnh rất thấp
John

Nếu đó là chất lượng hình ảnh thấp thì hãy đảm bảo rằng những gì bạn chụp ban đầu là chất lượng hình ảnh cao (trước tiên hãy lưu nó vào một tệp, v.v.) nó "nên" có chất lượng bình thường ...
rogerdpack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.