Satu instance / build ffmpeg lebih lambat 3x dari instance / build ffmpeg lainnya. Mengapa?

3

Saya memiliki 2 instance ffmpeg terpisah pada mesin macOS saya (10.14.2 Mojave dan Intel Core i5-8259U Quad-core CPU @ 2.30GHz, jika itu membantu):

1 - Diinstal dengan brew (dan ditautkan dengan dylib lokal saya)

2 - Bangun statis yang diunduh dari ffmpeg Zeranoe

Keduanya v4.1. Tapi, ketika transcoding file yang sama (OGG -> MP3) dengan opsi perintah yang sama, dengan beban sistem yang sama, dan semua yang lain sama ... instance # 1 kira-kira 3x lebih cepat daripada instance # 2. Saya perlu tahu mengapa karena saya harus membundel ffmpeg statis dengan aplikasi saya, dan perlu berkinerja optimal . Lihat output perintah di bawah ini:

Instance ffmpeg yang lebih cepat (Perhatikan kecepatannya adalah 46.5x):

$ ffmpeg -v quiet -stats -i ~/Reiki2.ogg -vn -sn ~/Reiki2.mp3
size=   26290kB time=00:28:02.54 bitrate= 128.0kbits/s speed=46.5x

Instance ffmpeg yang lebih lambat (Perhatikan kecepatannya adalah 17.2x)

$ ./ffmpeg -v quiet -stats -i ~/Reiki2.ogg -vn -sn ./Reiki2.mp3
size=   26290kB time=00:28:02.54 bitrate= 128.0kbits/s speed=17.2x

Mengapa perbedaan besar dalam kinerja ???

Jika saya mengetahuinya, saya kemudian dapat membangun ffmpeg sendiri dengan kinerja yang dioptimalkan yang cocok dengan ffmpeg yang diinstal lebih cepat (yaitu # 1).

Apakah ini cara kedua instance dikonfigurasikan sebelum membuatnya ? Apakah Anda melihat opsi konfigurasi signifikan yang menjadi alasan perbedaan kinerja yang sangat besar ini?

Saya sangat ingin mengetahui hal ini karena aplikasi saya tergantung pada kinerja ffmpeg. Saya akan sangat menghargai wawasan apa pun. Terima kasih sebelumnya !

Mesin virtual # 1 (lebih cepat) dikonfigurasikan sebagai berikut:

ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)

configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1 --enable-shared
--enable-pthreads --enable-version3 --enable-hardcoded-tables
--enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay 
--enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy
--enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 
--enable-libx265 --enable-libxvid --enable-lzma --enable-opencl 
--enable-videotoolbox

libavutil      56. 22.100 / 56. 22.100
libavcodec     58. 35.100 / 58. 35.100
libavformat    58. 20.100 / 58. 20.100
libavdevice    58.  5.100 / 58.  5.100
libavfilter     7. 40.101 /  7. 40.101
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  3.100 /  5.  3.100
libswresample   3.  3.100 /  3.  3.100
libpostproc    55.  3.100 / 55.  3.100

Mesin virtual # 2 (lebih lambat) dikonfigurasikan sebagai berikut:

ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers

built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)

configuration: --enable-gpl --enable-version3 --enable-sdl2 
--enable-fontconfig --enable-gnutls --enable-iconv --enable-libass
--enable-libbluray --enable-libfreetype --enable-libmp3lame 
--enable-libopencore-amrnb --enable-libopencore-amrwb 
--enable-libopenjpeg --enable-libopus --enable-libshine 
--enable-libsnappy --enable-libsoxr --enable-libtheora 
--enable-libtwolame --enable-libvpx --enable-libwavpack 
--enable-libwebp --enable-libx264 --enable-libx265 
--enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib 
--enable-gmp --enable-libvidstab --enable-libvorbis 
--enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex 
--enable-libxvid --enable-libaom --enable-appkit 
--enable-avfoundation --enable-coreimage --enable-audiotoolbox

libavutil      56. 22.100 / 56. 22.100
libavcodec     58. 35.100 / 58. 35.100
libavformat    58. 20.100 / 58. 20.100
libavdevice    58.  5.100 / 58.  5.100
libavfilter     7. 40.101 /  7. 40.101
libswscale      5.  3.100 /  5.  3.100
libswresample   3.  3.100 /  3.  3.100
libpostproc    55.  3.100 / 55.  3.100

------ PEMBARUAN: ------

1 - Saya mencoba membuat libmp3lame sendiri dengan --enable-nasm dan kemudian ffmpeg menggunakan lame bawaan. Tidak ada perbedaan yang diperhatikan ... masih lambat.

2 - Saya menjalankan tes transcoding yang sama pada Mac yang jauh lebih tua, dan hasilnya hampir identik (diperkecil karena komputernya lebih lambat).

yaitu libmp3lame jelas merupakan masalah!

Jadi, saya telah memutuskan, untuk aplikasi saya, bahwa saya akan menggunakan solusi - Saya hanya akan lebih suka transcoding ke AAC daripada MP3. Transcoding AAC sangat cepat pada semua instance ffmpeg saya dan aplikasi saya mendukung AAC dengan baik. Saya juga akan terus menyelidiki masalah lambatnya libmp3lame, tetapi untuk sekarang, saya membuka blokir aplikasi saya.

Terima kasih semua atas bantuannya! (Terima kasih khusus kepada @Gyan dan @ llogan)

waldenCalms
sumber
1
Aneh. Semuanya terlihat identik dan tidak ada perbedaan yang berarti. Saya bertanya-tanya apakah itu bisa optimasi CPU tetapi tidak dapat menemukan bukti encoder atau decoder menggunakan SIMD.
Mokubai
1
Sudahkah Anda mencoba penyandi lainnya - aac? Juga, encoding video?
Gyan
1
AIFF tidak terlalu instruktif, karena codec default tidak terkompresi. Coba transcoding AAC dan video. Tujuannya adalah untuk mengidentifikasi masalah; tidak masalah jika Anda tidak akan benar-benar melakukan hal-hal video.
Gyan
1
Baik. Jadi sepertinya menjadi masalah libmp3lame. Kompilasi LAME dan ffmpeg sendiri dan periksa.
Gyan
1
Perintah ini menggunakan dekoder inbuilt, jadi tidak libvorbis.
Gyan

Jawaban:

2

Ini kemungkinan adalah bug dari LAME

# 491 lumpuh 3.100 lebih lambat dari 3.99.5

Saya memberi tahu Zeranoe dan johnvansickle.com tentang ini. John mengatakan ini akan diperbaiki dengan rilis git-nya pada 20 Desember. Dia mengatakan dia mengkompilasi lumpuh dengan CFLAGS="-O3" CPPFLAGS="-DNDEBUG"menghasilkan speedup 3x.

Waspadai nasm

Mengaktifkan nasm tampaknya membuat perbedaan yang signifikan untuk 3.100 dibandingkan dengan 3.99.5 dalam tes malas saya di Arch Linux.

Baik Zeranoe dan John mengkompilasi lumpuh --enable-nasm, sehingga kelambatan pada build mereka disebabkan oleh bug yang disebutkan sebelumnya.

llogan
sumber
Terima kasih banyak atas informasi ini dan untuk melakukan pengujian! Saya akan mencoba ini dan melaporkan kembali. BTW, jika mungkin, dapatkah Anda memperbarui posting Anda dengan output perintah dari pengujian Anda? Saya ingin tahu tentang detailnya. (Diputuskan jawaban Anda tetapi tidak akan ditampilkan karena saya pengguna baru.)
waldenCalms
Saya membangun libmp3lame sendiri, dengan --enable-nasm ... tidak ada perbedaan yang diamati :( Namun, saya menemukan solusi (baca posting asli yang diperbarui). Terima kasih!
waldenCalms
1
@waldenCalms Saya memperbarui jawabannya. Itu bug.
Logan
Wow, terima kasih, tuan! Anda luar biasa :) Akan melihat keluar untuk membangun libmp3lame tetap dan uji ulang dengannya !!! Saya harus menunggu Zeranoe karena saya menggunakan MacOS, bukan Linux.
waldenCalms
1
@waldenCalms Saya sarankan terus menggunakan AAC jika itu dapat diterima untuk Anda. Secara umum, biasanya kualitas per bitrate sedikit lebih baik (tergantung pada encoder dan pengaturan tentu saja). Dan jika Anda muxing ke MP4 maka AAC lebih baik didukung daripada MP3.
Logan