Berapa banyak utas yang digunakan ffmpeg secara default?

47

Saya melihat bahwa ada -threads <count>opsi baris perintah di ffmpeg. Berapa nilai default dari opsi ini?

Edward Dale
sumber

Jawaban:

24

itu tergantung pada codec yang digunakan, versi ffmpeg dan jumlah inti CPU Anda. Terkadang hanya satu utas per inti. Terkadang lebih kompleks seperti:

Dengan libx264, core x 1,5 untuk thread frame dan core x 1 untuk thread slice.

mOlind
sumber
Terima kasih. Apakah Anda memiliki referensi ke default untuk beberapa codec standar yang didukung oleh ffmpeg?
Edward Dale
6
Jangan mengandalkan itu. Ffmpeg 0.7.8 saya di Linux menggunakan 1 utas secara default, apa pun yang terjadi.
Barafu Albino
Nilai apa yang bisa digunakan untuk mendapatkan hasil yang lebih baik? PS Saya menggunakan FFMpeg dalam kerangka Android.
Pembunuh
23

Pada 2014, ia menggunakan angka optimal.

Anda dapat memverifikasi ini pada komputer multi-inti dengan memeriksa beban CPU (Linux:, topWindows: task manager) dengan berbagai opsi untuk ffmpeg:

  • -threads 0 (optimal);

  • -threads 1 (single-threaded);

  • -threads 2 (2 utas untuk mis. Intel Core 2 Duo);

  • tidak ada (default, juga optimal).

Sunting 2015: pada CPU 12-core, beberapa perintah ffmpeg memiliki Linux yang topmenunjukkan paling banyak 200% cpu (hanya 2 core), tidak peduli berapa nomor yang diberikan -threads. Jadi defaultnya mungkin masih optimal dalam arti "sebagus biner ffmpeg ini bisa", tetapi tidak optimal dalam arti "sepenuhnya mengeksploitasi CPU leet saya."

Camille Goudeseune
sumber
1
Perhatikan bahwa ini sepertinya benar untuk pengkodean, bukan pemrosesan umum. Jika tidak benar-benar menghasilkan frame output maka itu tidak akan sejajar. misal, jika Anda menghilangkan getaran mulai pukul 02:00 dan seterusnya, maka Anda hanya akan mendapatkan paralelisme mulai pukul 02:00 dan seterusnya, tetapi semuanya hingga pukul 02:00 masih perlu diproses secara serial.
Mehrdad
6

Pada 2015 pada Ubuntu 14.04 dengan ffmpeg 0.8.10-6, digunakan 1 inti pada sistem 4 inti. htopmenunjukkan ini; hanya satu inti yang digunakan, dan saya mendapat tingkat konversi 16 fps untuk video FullHD.

Menggunakan -threads 4membuat semua core CPU saya pergi ke 100% dan saya mendapat tingkat konversi 47 fps.

Saya menggunakan perintah berikut:

$ ffmpeg -i foo.mp4 -y -target pal-dvd -aspect 16:9 dvd-out.mpg
cweiske
sumber
6

Beberapa jawaban ini agak lama, dan saya hanya ingin menambahkannya dengan saya ffmpeg 4.1, penyandian dengan libx264, semua 6 core / 12 utas sistem Ryzen 5 2600X saya dimaksimalkan tanpa -threadargumen.

Matt M.
sumber
Saya memiliki 1800X dan saya mengamati pemanfaatan utilisasi tidak cukup 20% di 16 utasnya, tapi saya menggunakan beberapa argumen opsional juga: -vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecodejadi itu beberapa variabel untuk diisolasi. Menambahkan -threads 12tidak berpengaruh.
Elaskanator
3

Saya bermain dengan mengkonversi dalam CentOS 6.5 VM (Ryzen 1700 8c / 16t - vm ditugaskan 12 dari 16 core). Eksperimen dengan film 480p terjaring berikut ini:

Opsi utas / Tingkat Konversi (fps @ 60 dtk)

(none/default)/130fps
-threads 1/70fps
-threads 2/120fps
-threads 4/185fps
-threads 6/228fps
-threads 8/204fps
-threads 10/181fps

Bagian yang menarik adalah pemuatan CPU (gunakan htopuntuk menontonnya).
Tidak menggunakan -threadsopsi berakhir pada kisaran 130fps dengan beban tersebar di semua core pada level beban rendah.
Menggunakan 1 utas melakukan hal itu, memuat satu inti pada 100%. Menggunakan apa pun menghasilkan situasi spread-load yang lain.

Seperti yang Anda lihat, ada juga titik pengembalian yang berkurang, jadi Anda harus menyesuaikan opsi -threads untuk mesin khusus Anda. Khusus untuk pengaturan saya, menggunakan -threads 6 (pada mesin 12 core) menghasilkan FPS terbaik saat mengkonversi video (dari h264 ke x264 pada bitrate yang berbeda untuk memaksa konversi) dan mengembalikan benar-benar berkurang semakin banyak utas yang saya masukkan ke dalam saya t.

Itu bisa menjadi masalah memori juga - hanya memiliki 1GB ditugaskan untuk VM. Saya dapat mengubah itu dan melihat apakah itu mengubah sesuatu. Tetap saja - ini menunjukkan bahwa menggunakan -threadsopsi dapat meningkatkan kinerja, jadi jalankan beberapa pengujian pada mesin khusus Anda di tingkat yang berbeda untuk menemukan sweet spot pengaturan Anda.

Bill Rookard
sumber
Bisakah Anda menambahkan apa yang Anda maksud dengan "mengubah"? Idealnya, perintah yang tepat.
Ondra Žižka
4.1.3 pada Ubuntu 18.04 dan hasilnya sangat mirip. Defaultnya adalah "beban rendah pada semua core".
Roel Van de Paar
Saya kira alasan mengapa Anda mendapatkan optimal pada 6 utas pada mesin "12 inti" (cpu tidak ditentukan, berbeda dari yang pertama terdaftar) adalah bahwa 6 mungkin jumlah inti sebenarnya, dan 12 jumlah utas?
Roel Van de Paar
1

dengan asumsi Anda telah mengaktifkan threading, itu menetapkan jumlah inti 1,5x.

rogerdpack
sumber
1,5 x jumlah inti untuk utas bingkai. 1 x jumlah core untuk slice threads. Ini khusus untuk (lib) x264. Saya tidak yakin apa alokasi untuk pembuat enkode lain.
Logan
@ LordNeckbeard Bagaimana cara beralih antara frame threading dan slice threading !?
Dr.jacky
1
@ Mr.Hyde Mungkin dengan -x264-params sliced-threads=1. Atau melalui penggunaan -tune zerolatency.
llogan