Cách thay đổi cài đặt ffmpeg -threads


14

Làm việc trên một trang web ống . Tôi đang chạy video thông qua ffmpeg trên máy chủ chuyên dụng linux để chuyển đổi sang mp4 .

Thông số kỹ thuật của máy chủ:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Stepping:              3
CPU MHz:               3491.749
BogoMIPS:              6983.49
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7

Vấn đề trong quá trình thử nghiệm là thậm chí chỉ thực hiện 4-5 lần một lần, máy chủ tải skyrockets lên mức trung bình khoảng 36. Đây chỉ là một người. Tôi tưởng tượng khi nó mở ra, nhiều người sẽ tải lên cùng một lúc.

Có vẻ như ffmpeg cố gắng sử dụng tất cả các tài nguyên có sẵn cho mỗi chuyển đổi.

Tôi đã nghe nói có một cài đặt -threads bạn có thể thay đổi, nhưng tôi không thể tìm thấy nó. Tôi có một máy chủ 8 CPU. Nó chỉ được sử dụng cho chuyển đổi, vì vậy tôi đã nghe cài đặt tốt nhất sẽ nằm trong khoảng từ 2 đến 4. Tôi có thể kiểm tra nó.

Nhưng làm cách nào để thay đổi cài đặt này? Tất cả mọi thứ tôi thấy trực tuyến thảo luận về cài đặt này, nhưng không phải là các bước để thay đổi nó.

linux  ffmpeg  cpu  mp4 

Câu trả lời:


17

Cờ tùy chọn bạn muốn thực sự là chính xác -threadsvà bạn sẽ sử dụng nó như thế này (chỉ cho một luồng):

ffmpeg -i somefile.wmv -c:a libfdk_aac -c:v libx264  -threads 1 transcoded.mp4

Tuy nhiên, có khá nhiều sự tinh tế sẽ tăng tải máy chủ của bạn và thời gian hoạt động, chẳng hạn như thay đổi kích thước, áp dụng các bộ lọc và chất lượng khung hình / tốc độ khung hình cuối cùng - chưa kể đến việc một số kiến ​​trúc VM thực sự đọc và viết mọi thứ hai lần (một cách tự nhiên và một lần hầu như !!!)

Dưới đây là một số mẹo để tăng tốc độ của bạn:

  1. sử dụng hàng đợi để mỗi lần chỉ có một mục được chuyển mã
  2. yêu cầu các tệp nhỏ hơn từ người dùng của bạn
  3. sử dụng toàn bộ mã lực của máy bằng cách:
    • đọc và viết từ một ramdisk
    • chuyển sang kim loại trần cho các nhiệm vụ chuyển mã
    • sử dụng -threads 0

Dù bạn làm gì, hãy thông báo cho người dùng về quá trình chuyển mã, bởi vì nó chỉ mất thời gian. (IJTT)

[lệnh được chỉnh sửa để phản ánh nhận xét của LordNeckbeard]


10
Lựa chọn vị trí quan trọng. Với -threadstrước đầu vào, bạn đang áp dụng tùy chọn này đầu vào (bộ giải mã). Một cách sử dụng tổng quát là ffmpeg [global options] [input options] -i input [output options] output.
llogan

Vì vậy, nơi bạn sẽ đề nghị đặt nó? Tôi nghĩ lúc đầu nó đã được áp dụng trên toàn cầu?
denjello

3
Là một tùy chọn đầu ra để nó trở thành một tùy chọn mã hóa. Xem tài liệu FFmpeg để xem tùy chọn nào được đánh dấu là (global).
llogan

Có vấn đề gì không nếu bạn đặt -threadsarg trước hoặc sau -iarg? Ngoài ra, làm thế nào tôi nên xác định có bao nhiêu chủ đề tôi nên sử dụng? Về cơ bản tôi chỉ đang làm-c copy
chovy

3

Điều này có thể hơi cũ nhưng điều này nghe có vẻ như là một nhiệm vụ hoàn hảo cho một container như docker.

  • Hãy để ffmpeg chạy với full horsepower(như denjello đã gọi nó)
  • nhưng hãy để nó chạy bên trong docker

Bây giờ bạn có thể giới hạn số lượng tài nguyên mà một cá thể ffmpeg có thể tiêu thụ mà không cần sử dụng các tùy chọn dòng lệnh ffmpeg. Và không chỉ cpu mà còn cả bộ nhớ và IO.

Thậm chí nhiều hơn: Có thể bạn có các nhiệm vụ khác nhau có thể chạy trong nền và bạn không quan tâm chúng mất bao lâu và bạn có các nhiệm vụ nên chạy nhanh, do đó bạn có thể đặt trọng số lên các nhiệm vụ khác nhau.

Xem https://docs.docker.com/engine/reference/run/#rp4-constraint-on-resours

Đã có một hình ảnh ffmpeg được xác định trước trên github: https://github.com/jrottenberg/ffmpeg

docker run jrottenberg/ffmpeg \
        -i http://url/to/media.mp4 \
        -stats \
        $ffmpeg_options  - > out.mp4

Một chuyển đổi có thể sẽ chạy chậm hơn do chi phí hoạt động nhưng nếu bạn chạy các trường hợp đột biến đồng thời thì đây có thể là một lợi ích rất lớn. Bất kỳ điều này sẽ mở rộng rất tốt, chưa kể đến việc bảo mật được cải thiện vì mỗi tác vụ được tách biệt khỏi HĐH cơ bản.


Không phải là một chút cực đoan để chạy nó trong docker? Có nhiều cách khác tốt hơn để hạn chế sử dụng bộ xử lý trên Linux scoutapm.com/blog/ mẹo
yurtesen

Tại sao? Hãy xem xét bạn đã cài đặt docker, chạy một container có --rmcờ để thực hiện một nhiệm vụ và loại bỏ container sau khi thoát là điều hoàn toàn bình thường mà quản trị viên có thể và nên làm trong năm 2019. Đặc biệt đối với những việc như chuyển đổi tài liệu. Chuyển đổi thất bại? Hãy thử một phiên bản chuyển đổi khác mà không nâng cấp / hạ cấp chuỗi công cụ cục bộ của bạn? Bạn không tin tưởng tài liệu vì nó đã được tải xuống từ internet? Cô lập nhiệm vụ trong một container. Ffmpeg không phải là một ngoại lệ. cvedetails.com/vulnerability-list/vendor_id-3611/Ffmpeg.html
Jürgen Steinblock

Nghe có vẻ như nói chuyện tiếp thị. Docker không hoàn hảo như bạn đặt nó -> techbeacon.com/security/ trộm Trong Linux, một người dùng bình thường cũng thích truy cập hạn chế và bảo mật hệ thống. Cần hạ cấp phiên bản chương trình là rất hiếm và có thể được thực hiện thông qua kho lưu trữ. Nhiều hình ảnh docker được thực hiện bởi những người ngẫu nhiên. Có lẽ hình ảnh docker chuyển đổi tài liệu đã bị xâm phạm và gửi bản sao của tất cả các tài liệu của bạn đến một máy chủ từ xa. Vì vậy, sử dụng hình ảnh docker làm tăng khả năng dễ bị tổn thương như vậy. Sau đó thì sao?
yurtesen

Perhaps the document converter docker image was compromised and sent copy of all your documents to a remote server. So, using docker images increase possibility such vulnerability. What then?kiểm tra repo, điều tra dockerfile và sử dụng docker build -t myimageđể tự tạo một hình ảnh cục bộ. Hoặc tạo dockerfile của riêng bạn, đó không phải là khoa học tên lửa github.com/alfg/docker-ffmpeg/blob/master/Dockerfile
Jürgen Steinblock 22/11/19
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.