57 votes

Descendre correctement un mixage 5.1 en stéréo avec ffmpeg

J'ai une piste audio 5.1 d'un film où l'avant gauche et l'avant droit contiennent la musique, et le centre les dialogues. La lecture de la piste 5.1 dans VLC permet de tout mélanger joliment.

J'essaye de convertir la piste 5.1 en stéréo en utilisant ffmpeg -ac 2 Cependant, le mélange stéréo qui en résulte a un volume beaucoup plus faible que la lecture native de la piste 5.1.

Añadir -af "pan=stereo|c0=FL|c1=FR" donne le volume correct, mais il n'y a pas de dialogue car le canal central n'est pas inclus.

Donc la solution est peut-être de mixer gauche/centre/droite en stéréo, et de jeter les canaux de subwoofer de l'arrière ? (Je devine ici...)

La question est donc : comment faire pour que ffmpeg fasse un downmix 5.1 en stéréo de la même manière que VLC le fait, avec le même volume fort dans le résultat final ?

3voto

Dave_750 Points 131

C'est une vieille question maintenant, mais elle m'a orienté dans la bonne direction et je voulais partager mon résultat :

-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"

En mettant la moitié du FC et du LFE dans la gauche et la droite, on obtient un total de 1 pour leurs volumes effectifs sur les deux enceintes. L'utilisation de 0,707 * Front/Back Left/Right ramène ces canaux à un bon niveau afin qu'ils ne dominent pas le centre.

2voto

Minty Points 81

J'ai examiné les réponses ici et, bien que Hashim Aziz ait fait un résumé fantastique, il manque une chose que je n'ai remarquée qu'après avoir mené ma propre enquête. Il y a deux layouts 5.1 que ffmpeg reconnaît (cf. ffmpeg -layouts ). 5.1 y 5.1(side) . Certains appareils d'enregistrement, etc. utilisent cette dernière, lorsqu'il y a ノー Les canaux BL et BR, mais plutôt SL et SR.

L'utilisation de BL/BR dans votre script ne soulèvera pas d'erreur : ce sont juste des silences. Je ne vois pas vraiment de moyen de le détecter, mais on n'en a pas besoin. On peut soit ajouter les canaux inexistants (encore une fois, un ensemble ou l'autre sera toujours vide) :

Gregory's ATSC formula (ffmpeg -ac 2)  FL<1.0*FL+0.707*FC+0.707*BL+0.707*SL|FR<1.0*FR+0.707*FC+0.707*BR+0.707*SR
Robert Collier's Nightmode Dialogue    FL=FC+0.30*FL+0.30*BL+0.30*SL|FR=FC+0.30*FR+0.30*BR+0.30*SR
Dave_750                               FL=0.5*FC+0.707*FL+0.707*BL+0.707*SL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.707*SR+0.5*LFE
RFC 7845 Section 5.1.1.5               FL=0.374107*FC+0.529067*FL+0.458186*BL+0.458186*SL+0.264534*BR+0.264534*SR+0.374107*LFE|FR=0.374107*FC+0.529067*FR+0.458186*BR+0.458186*SR+0.264534*BL+0.264534*SL+0.374107*LFE

Ou simplement utiliser les numéros de canaux (qui correspondent aux deux 5.1 y 5.1(side) ):

5.1            FL+FR+FC+LFE+BL+BR
5.1(side)      FL+FR+FC+LFE+SL+SR
               c0+c1+c2+ c3+c4+c5

J'ai personnellement opté pour la formule de Dave (RFC était en deuxième position pour mes usages) et l'utilisation des numéros de canaux :

ffmpeg.exe -i input51.mkv -c:s copy -c:v copy -c:a libopus -b:a 104k -af "pan=stereo|FL<0.5*c2+0.707*c0+0.707*c4+0.5*c3|FR<0.5*c2+0.707*c1+0.707*c5+0.5*c3" output20.mkv

1voto

user1076138 Points 11
-ac 2

Le volume des canaux dans le downmix est inchangé avec le codec à virgule flottante. -> pcm_f32le, aac

Le volume en downmix (5.1 à 2.0 sans LFE) est réduit de 1/2.5 = -7.96 dB avec le codec integer. -> pcm_s16le, libfdk_aac

Dans les films, le son est dirigé dans une seule direction, et il n'y a pas de pression sonore maximale sur tous les canaux. Donc, réduire le volume du downmix est une erreur, mais une petite compression de niveau est la bonne solution. C'est ce que fait Dolby.

0voto

Mephisto Points 241

Si l'option -ac 2 vous donne un downmix équilibré où ni la musique ni la parole ne sonnent plus que les autres composants, il vous suffit d'augmenter le volume avec

-vol 512

J'ai utilisé 512 dans l'exemple, ce qui augmente le son en le rendant deux fois plus fort. La règle est que 256 est équivalent à 100%.

N'allez pas trop loin avec la valeur, et assurez-vous de vérifier les résultats dans les parties du film avec des explosions ou des bruits forts. Il est très facile d'introduire de la distorsion en utilisant une valeur trop élevée.

0voto

Gringo Suave Points 1109

Après avoir lu cette page entière et quelques expériences, j'ai trouvé ce script appelé "down_mix" :

#!/bin/bash -x

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_FMT="libopus"
CONTAINER="mkv"

ffmpeg -i "$1" -c:v copy -c:s copy \
    -c:a $AUDIO_FMT \
    -af "pan=stereo|FL=$FL|FR=$FR" \
    "${1%.*}"_dm.$CONTAINER

    # how to test a snippet of movie
    # -ss 41:07.0 -t 4 \

Modifiez les variables ci-dessus à votre convenance. Je n'avais pas de problème avec le faible volume, donc je l'ai laissé de côté, mais je peux facilement l'ajouter.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X