Có bao nhiêu phiên bản lệnh FFmpeg tôi có thể chạy song song?


18

Tôi mệt mỏi khi chạy song song 8 lệnh để sử dụng đầy đủ CPU và tăng tốc chuyển đổi Video, đại loại như thế này:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/b.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/c.mp4 > /dev/null 2>&1  &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/d.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/e.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/f.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60  -f mp4 /mnt/g.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4  /mnt/h.mp4 > /dev/null 2>&1 &

2 đến 3 trong số họ được dừng lại. Lý do tại sao điều này xảy ra? Đây có phải là một giới hạn FFmpeg? Tôi đã thử điều này trên các máy 16 lõi và 4 lõi, EC2 c1.xlarge và cc2.8xlarge. Hành vi tương tự. Tôi đã thử các lệnh phức tạp và các lệnh đơn giản, vẫn như vậy, 2 hoặc 3 bị dừng.


3
Theo hiểu biết của tôi, không nên có bất cứ điều gì trong FFmpeg ngăn bạn làm như vậy. Có thể là một vấn đề vỏ?
slhck

Nếu tôi có đầu vào khác nhau cho mỗi lệnh thì sao? Làm thế nào tôi có thể làm cho họ độc lập, bởi vì nếu một người dừng lại thì tất cả đều dừng lại.
Samson

Bạn đã tìm thấy bất kỳ tham số cho việc sử dụng nhiều bộ xử lý?!
Dr.jacky

bạn có ý gì khi "dừng lại" ở đây? Bash cho thấy họ là tạm dừng?
rogerdpack

Câu trả lời:


21

Khi trả lời câu hỏi ban đầu, tại sao một số công việc dừng lại, ffmpeg trên dòng lệnh có tính tương tác. Nó liên tục đọc đầu vào trên dòng lệnh. Để bạn chạy tất cả chúng trong nền, bạn nên thay đổi điều này:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &

đến đây:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 </dev/null > /dev/null 2>&1 &

việc bổ sung thông báo </dev/nullcho ffmpeg không tìm kiếm đầu vào và tất cả các công việc của bạn sẽ chạy trong nền.


1
Đây là gì: 2> & 1
Dr.jacky

Cảm ơn rât nhiều! Tôi đã có cùng một vấn đề và điều này làm việc như một cơ duyên, xin vui lòng chấp nhận!
fr_andres Hỗ trợMonicaCellio

3
@ Mr.Hyde Cuối buổi tiệc tôi biết, nhưng 2> & 1 cho biết luồng lỗi đi đến cùng một nơi với luồng mạnh mẽ - vì vậy / dev / null. Đó là viết tắt cho > /dev/null 2>/dev/null.
berry120

7

Chỉ cần một suy nghĩ về lệnh của bạn: một cách dễ dàng hơn để đập máy bằng một lệnh duy nhất là ghép mọi thứ thành một dòng duy nhất:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 \
 -f mp4 /mnt/b.mp4 \
 -f mp4 /mnt/c.mp4 \
 -f mp4 /mnt/d.mp4 \
 -f mp4 /mnt/e.mp4 \
 -f mp4 /mnt/f.mp4 \
 -f mp4 /mnt/g.mp4 \
 -f mp4  /mnt/h.mp4 > /dev/null 2>&1

Bạn có thể muốn thêm (tùy thuộc vào phiên bản ffmpeg của bạn) một cờ để báo cho máy chủ sử dụng tất cả các bộ xử lý có sẵn

-threads 0

Để tham khảo: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20mult Môn% 20outputs


Tôi đã thử điều này, nó không sử dụng tất cả các bộ xử lý một cách hiệu quả. Tải vẫn duy trì ở mức 20-30%, các siêu luồng không được sử dụng.
d33pika

2
Có lẽ nó có liên quan đến máy EC2? Tôi chỉ chạy lệnh trên trên máy lõi 16 xeon với 16 đầu ra và đây là những gì tôi nhận được: ảnh chụp màn hình htop
NublaII

Bạn có trên phiên bản mới nhất của FFmpeg?
d33pika

@NublaII> / dev / null 2> & 1!?
Dr.jacky

1
@ Mr.Hyde Nó ẩn đầu ra tiêu chuẩn từ bạn và hiển thị cho bạn đầu ra lỗi. Đọc này: xaprb.com/blog/2006/06/06/what-does-devnull-21-mean
Yuri Sucupira
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.