Bu sorunun yanıtları o zamandan beri, birçoğu gereksiz bilgiler içeren ve diğerleri tam yanlışlıklar içeren biraz karışıklık haline geldi. Bu cevap, bu cevaplardaki bilgileri, problemleri ortadan kaldırırken düzene sokma girişimidir.
En önemlisi, şu anda bu sorunun en çok oy alan cevabı olan Gregory'nin cevabının -ac 2
anahtarı kullanmaktan farklı olmadığını akılda tutmak gerekir - daha fazlası aşağıda.
5.1 kanal ses akışını stereo ile aşağı karıştırma -ac 2
FFmpeg, 5.1 parçanın stereoya karıştırılması için yerleşik yeteneklerle birlikte gelir ve bu aynı zamanda FFmpeg'in kendi belgelerinin önerdiği çözümdür :
Not: ffmpeg -ac
, çok özel gereksinimleriniz olmadıkça tava filtresi yerine tercih edilmesi gereken bir varsayılan aşağı karıştırma (ve yukarı karıştırma) sistemini entegre eder .
-ac 2
Arka Sol, Arka Sağ, Ön Sol, Ön Sağ ve Ön Merkezi - - anahtarı kaynağın 6 kanallı akışından ilk 5 kanal oranlarda karıştırılmasıyla çalışır çıkış stereo akışının Ön Sol ve Ön Sağ kanallara:
Bunu yaparken, LFE kanalından gelen ses ( subwoofer için ayrılmış ve derin, düşük frekanslı efektler için kullanılan 5.1'deki .1 ) bu seçenek kullanıldığında tamamen atılır .
Ne yazık ki, testlerimde -ac 2
, kaynaktan en farklı olan hem müzik hem de diyalogun genel seviyeleri ile sonuçlandı, bunu test edebildiğiniz ve bulabileceğinizi fark etmenize rağmen, test ettiğim tüm formüllerden en kötü çıktıyı veren downmix formülü haline geldi. ihtiyaçlarınız için mükemmel bir downmix sağlar, bu durumda başka bir formül kullanmak sizin için aşırıya kaçar.
İle DTS parçayı düşük uyarlamak için -ac 2
olmadan bunu transkodlamak (yani onun codec'i ve uzantısı aynı tutmak için):
ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 "stereotrack.dts"
Mephisto'nun cevabında belirtildiği gibi, diyalog ve müzik birbiriniz arasında iyi dengelenmiş, ancak sadece ses seviyesi düşükse, ses seviyesini arttırırken akışı karıştırabilirsiniz:
ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 -vol 425 "stereotrack.dts"
İçin -vol
anahtar, kaynağa% 100 hacim tamsayı değerine 256 ve bu ses akışının toplam hacmi artacak daha büyük bir değeri kullanılarak eşdeğerdir. Bununla birlikte, çok fazla yapmanın, özellikle daha yüksek bölümleri sırasında bozulmaya veya artefaktlara neden olabileceğini unutmayın.
Bir ses akışını stereoya karıştırmak ve AC3 kodekine kodlamak için, örneğin:
ffmpeg -i "sourcetrack.dts" -c:a ac3 -ac 2 "stereotrack.ac3"
5.1 kanal ses akışını özel bir karma algoritmayla stereoya indirgeme
Daha yüksek kalitede bir downmix istiyorsanız veya çıkışınıza LFE akışını kesinlikle eklemeniz gerekiyorsa, -af
özel bir karışım formülü kullanarak sesi karıştırmak için FFmpeg'in ses filtresi anahtarını ( ) kullanabilirsiniz.
ATSC formülü ile downmixing (Gregory'nin cevabı)
Bu cevabı gönderirken, bu sorunun en çok oylanan yanıtı , formülü ATSC spesifikasyonundan (bkz. Bölüm 7.8.2, İki Kanala Aşağı Karıştırma ) bir FFmpeg ses filtresine yerleştiren Gregory'nin idi . Bu belirtimin kendisi doğrudan konuyla ilgili FFmpeg belgeleriyle bağlantılıdır, bu da FFmpeg'in anahtarı için zaten uyguladığı formülün büyük olasılıkla olduğunu gösterir . Bu doğruysa, tüm formülü Gregory'nin cevabına yazmak, anahtarı kullanmaktan ve dolayısıyla zaman kaybından farklı olmaz .-ac 2
-ac 2
Bunu, her ikisini -ac 2
ve -af
Gregory'nin cevabındaki filtreyi kullanarak aynı giriş sesini yeniden kodlayarak kesin olarak test etmeye karar verdim (kullanılan komutlar, bu cevabın dipnotlarında görülebilir).
Daha sonra elde edilen çıktı dosyalarının boyutlarını karşılaştırdım ve bayt-byte-byte için aynı boyutta olduklarını gördüm:
Son olarak, iki çıktı dosyasının her ikisini de Audacity'de açtım ve aynı olduklarını doğrulamak için dalga formlarını karşılaştırdım (büyütmek için tıklayın):
Bu nedenle Gregory'nin cevabında detaylandırılan ATSC formülünün FFmpeg tarafından halihazırda uygulanmış olduğu ile aynı olduğu ve bunu yapmayan -ac 2
ve çok daha hantal bir komut olduğu zaman onu kullanmanın tamamen gereksiz olduğu son derece net görünüyor .
LFE kanalını atmadan küçültme (Dave_750'nin cevabı)
Cevaplarda yer alan birkaç kişiden, bu, LFE kanalını tamamen atmak yerine çıkış stereouna karıştırdığı görülen ve sonuçta kaynaktan en az sesi sağlayan tek downmix formüllerinden biridir. kayıp.
Genel ses seviyesi yapmaktan daha yüksek ve dolgun -ac 2
, ancak yine de aşağıdaki Gece Modu Diyaloğu downmix'inden daha düşük. Bununla birlikte, müzik seviyeleri kaynağa Nightmode Dialogue downmix'ten çok daha yakındır ve LFE parçasının dahil edilmesi nedeniyle, bu downmix formülünü kullanırken çıktının ses seviyesini artırmak, 5.1 kaynağına diğerlerinden daha doğru ses veren bir çıkış akışı oluşturabilir test ettiğim formüller.
Bu yeteneğe sahipseniz, hem bu downmix formülünü hem de Nightmode Dialogue downmixini kullanarak ses akışlarınızı kodlamanızı ve hangisinin daha iyi olduğunu belirlemek için iki dalga formunu dikkatlice karşılaştırmanızı şiddetle tavsiye ederim.
5.1 formunu stereoya bu formülü kullanarak karıştırmak ve ses seviyesini 425'e yükseltmek için (burada 256, orijinal kaynağın ses seviyesinin% 100'üdür):
ffmpeg -i "sourcetrack.dts" -c dca -vol 425 -af "pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE" "outputstereo.dts"
Robert Collier'in Nightmode Dialogue ile downmixing (Shane Harrelson'ın cevabı)
Robert Collier tarafından Doom9 forumunda oluşturulan ve yanıtında Shane Harrelson tarafından sağlanan Nightmode Dialogue formülü, anahtardan çok daha iyi bir downmix ile sonuçlanıyor -ac 2
- aşırı sessiz diyaloglar yerine, onları çok daha yakın seviyelere geri getiriyor. kaynak.
Robert Collier'in karışımın açıklamasından:
Birçok DTS film parçasını eac3to kullanarak 5.1'den 2.0'a dönüştürdükten sonra, çok sessiz diyaloglar ve aşırı yüksek sesli müzik ve aksiyon sahneleri için varsayılan eac3to kanal eşlemelerini buldum. Her ne kadar eac3to kanalı downmix katsayıları bilimsel bir temele sahip olsa da, düşük diyalog hacminden dolayı pratikte genellikle iyi görünmemektedir. Bu ön ayar, sol ve sağ kanal müziği hala duyulabilir, ancak arka planda daha fazla olan net diyaloglar arayanlar içindir.
Gördüğünüz gibi - ön merkez (diyaloglar) şimdi düzgün bir şekilde geliyor ve orijinal seviyesinde kalıyor - müzik ve patlamalar arka plan efekti olarak kalıyor ve sizi aşırı etkilemiyor. Bu ön ayar, diyalogları duymak için 2.0 filme dönüştürülen DTS 5.1'i izlerken ses seviyesi düğmesiyle sürekli uğraşmanız sorununu çözer. (Özellikle geceleri başkalarını uyandırmak istemediğiniz, ancak yine de diyalogları duymak istediğiniz filmleri izlemek için).
Ne yazık ki, bu downmix formülünün müziği 5.1 kaynağından çok daha düşüktür (Collier'ın bir "gece modu" karışımı oluşturma niyeti göz önünde bulundurularak tasarlandı) ve LFE parçasının tamamen kaybedilmesi nedeniyle, genel çıkış sesi ses düzeyi Dave_750'nin artırılmış hacimli formülü kadar dolu veya kaynağa yakın .
Bununla birlikte, herhangi bir nedenden dolayı akışın genel hacmini artırmaktan kaçınmak istiyorsanız, Nightmode Dialogue muhtemelen en iyi seçenek olacaktır - yine de, ses akışınızı ikisine de kodlamanızı ve ikisinin dalga formlarını dikkatlice karşılaştırmanızı şiddetle tavsiye ederim. .
FFmpeg'deki Nightmode Dialogue formülüyle karıştırmak için:
ffmpeg -i "sourcetrack.dts" -c dca -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" "stereotrack.dts"
Tarc'ın cevabı
Bu cevap, Shane Harrelson'ın cevabından gelen Nightmode Dialogue downmix formülünü basitçe bir MKV kapsayıcısındaki ses akışını dönüştürme komutuna koyar. Bu cevapta verilen komut böyle bir ses akışında iyi çalışır, ancak bağımsız bir ses parçası için uyarlanması hatayı verir:
Filtreleme ve akış kopyası birlikte kullanılamaz
Bunun nedeni, aşağı karıştırma sırasında ses kodekinin kopyalanamamasıdır - FFmpeg'in diğer tüm değişiklikler bir çıkış akışında yaptığı gibi, bir downmix , değişikliklerin uygulanması için parçanın yeniden kodlanmasını gerektirir .
Bu komut ayrıca -ac 2
FFmpeg'in yok saydığı bir yedek anahtarı da içeriyordu .
Test komutları
Bu cevap için yaptığım testlerin güvenilirliğini göstermek için, her downmix formülünü test etmek için kullandığım tüm komutlar aşağıdadır.
-ac 2
Seçenek için kullanılan test komutu :
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -ac 2 "Audio 1 (-ac 2).wav"
Gregory'nin cevabı için kullanılan test komutu:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -af "pan=stereo|FL < 1.0*FL + 0.707*FC + 0.707*BL|FR < 1.0*FR + 0.707*FC + 0.707*BR" "Audio 2 (ATSC Algorithm Downmix).wav"
Dave_750'nin cevabı için kullanılan test komutu:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -vol 425 -af "pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE" "Audio 4 (Dave750 Downmix).wav"
Shane Harrelson'un cevabı için kullanılan test komutu:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" "Audio 3 (Nightmode Dialogue Downmix).wav"