Saya melihat bahwa ada -threads <count>
opsi baris perintah di ffmpeg. Berapa nilai default dari opsi ini?
Saya melihat bahwa ada -threads <count>
opsi baris perintah di ffmpeg. Berapa nilai default dari opsi ini?
Jawaban:
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.
Pada 2014, ia menggunakan angka optimal.
Anda dapat memverifikasi ini pada komputer multi-inti dengan memeriksa beban CPU (Linux:, top
Windows: 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 top
menunjukkan 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."
Pada 2015 pada Ubuntu 14.04 dengan ffmpeg 0.8.10-6, digunakan 1 inti pada sistem 4 inti.
htop
menunjukkan ini; hanya satu inti yang digunakan, dan saya mendapat tingkat konversi 16 fps untuk video FullHD.
Menggunakan -threads 4
membuat 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
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 -thread
argumen.
-vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecode
jadi itu beberapa variabel untuk diisolasi. Menambahkan -threads 12
tidak berpengaruh.
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 htop
untuk menontonnya).
Tidak menggunakan -threads
opsi 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 -threads
opsi dapat meningkatkan kinerja, jadi jalankan beberapa pengujian pada mesin khusus Anda di tingkat yang berbeda untuk menemukan sweet spot pengaturan Anda.
dengan asumsi Anda telah mengaktifkan threading, itu menetapkan jumlah inti 1,5x.
-x264-params sliced-threads=1
. Atau melalui penggunaan -tune zerolatency
.