Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/02/2014, à 19:13

Coeur Noir

[help needed] Script utilisant SoX + FFmpeg (vidéo pseudo 5.1)

Hello,

l'idée n'est pas neuve, obtenir une bande son en (pseudo) 5.1 à partir d'une source stéréo. Je sais faire quelquechose de "potable" via audacity mais j'aimerais quelquechose de plus "automatisable" et rapide.

Je voulais tester ça voir doc sox : pour convertir un fichier stéreo en "fake"-surround

sauf qu'apparemment aujourd'hui sous ubuntu 13.10 certaines commandes ne sont plus là :

normalize et multimux

et sox a dû évoluer aussi puisqu'il renvoit des avertissements "mixer is deprecated"

Auriez-vous des suggestions ?

Dernière modification par Coeur Noir (Le 06/06/2014, à 13:20)


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#2 Le 15/02/2014, à 21:26

Coeur Noir

Re : [help needed] Script utilisant SoX + FFmpeg (vidéo pseudo 5.1)

Pour ceux à qui ça pourrait servir :

#!/bin/bash

#############
#  Stéréo vers 5.1 (pseudo) surround
#############
#  très librement inspiré de, et mercis à :
#  http://www.projectionniste.net/forums/viewtopic.php?f=45&t=5231
#  http://jeanbruenn.info/2011/10/22/stereo-to-fake-surround/
#  http://www.pfast.fr/IMG/pdf/UPMIXCicmHd3d.pdf
#  http://home-made-dcp.over-blog.fr/article-d-un-son-stereo-vers-un-pseudo-5-1-avec-audacity-84744383.html

#############
# utilisation :
# placez-vous dans le dossier où se situe votre fichier son stéréo à traiter,
# puis lancez ce script depuis le terminal sur ce modèle :
# bash nom_du_script nom_fichier_source nom_fichier_sortie
# les noms de fichier s'entendent avec leur extension, .wav recommandé pour la sortie

f_source="$1";
f_sortie="$2";

# paramètres de sox
dft="-S -V"

echo "Préparation du fichier de travail";
# transformation du fichier source en .wav 48khz 24 bits stereo
# normalisé à -1 dbfs
sox $f_source -r 48k -b 24 /tmp/00.wav sinc 20-20000 gain -n -1
if [ -f /tmp/00.wav ]; then
        echo "Ok, le fichier temporaire est créé !"
else
        echo "Un problème est survenu : lisez attentivement les divers retours de commande."
exit
fi

# les différents upmix

rep_fq()
{
# gauche
sox $dft /tmp/00.wav /tmp/01.wav remix -l sinc 1900-4800
# droite
sox $dft /tmp/00.wav /tmp/02.wav remix -r sinc 1900-4800
# centre
sox $dft /tmp/00.wav /tmp/03.wav remix 1v0.5,2v0.5 sinc 150-1900
# basses
sox $dft /tmp/00.wav /tmp/04.wav remix 1v0.5,2v0.5 sinc 20-150
# ambiance gauche
sox $dft /tmp/00.wav /tmp/05.wav remix -l sinc 4800-20000
# ambiance droite
sox $dft /tmp/00.wav /tmp/06.wav remix -r sinc 4800-20000
# valeur de peak dbfs
peak="-10"
}

mix_rep()
{
# gauche
sox $dft /tmp/00.wav /tmp/01.wav remix 1v0.7,2v-0.11
# droite
sox $dft /tmp/00.wav /tmp/02.wav remix 1v-0.11,2v0.7
# centre
sox $dft /tmp/00.wav /tmp/03.wav remix 1v0.354,2v0.354
# basses
sox $dft /tmp/00.wav /tmp/04.wav remix 1v0.5,2v0.5 lowpass -2 100 0.71
# ambiance gauche
sox $dft /tmp/00.wav /tmp/05.wav remix 1v0.67,2v-0.22
# ambiance droite
sox $dft /tmp/00.wav /tmp/06.wav remix 1v-0.22,2v0.67
# valeur de peak dbfs
peak="-11"
}

inv_rep()
{
# mono_mix
sox $dft -c 2 /tmp/00.wav -c 1 /tmp/mono_mix.wav mixer 0.5,0.5
# inversion de phase pour gauche et droite qu'on soustrait au centre
sox $dft -c 2 /tmp/00.wav -c 1 /tmp/00gauche.wav mixer -l
sox $dft -M -c 1 -v -1 /tmp/00droite.wav -c 1 /tmp/mono_mix.wav -c 1 /tmp/gauche.wav
sox $dft -c 2 /tmp/00.wav -c 1 /tmp/00droite.wav mixer -r
sox $dft -M -c 1 -v -1 /tmp/00gauche.wav -c 1 /tmp/mono_mix.wav -c 1 /tmp/droite.wav
# gauche
sox $dft -c 1 /tmp/gauche.wav -c 1 /tmp/01.wav sinc 120-20000
# droite
sox $dft -c 1 /tmp/droite.wav -c 1 /tmp/02.wav sinc 120-20000
# centre
sox $dft -c 1 /tmp/mono_mix.wav -c 1 /tmp/03.wav sinc 120-12000
# basses
sox $dft -c 1 /tmp/mono_mix.wav -c 1 /tmp/04.wav sinc 20-120
# ambiance gauche
sox $dft -c 1 /tmp/gauche.wav -c 1 /tmp/05.wav delay 0.02 sinc 120-6000 reverb
# ambiance droite
sox $dft -c 1 /tmp/droite.wav -c 1 /tmp/06.wav delay 0.02 sinc 120-6000 reverb
# valeur de peak dbfs
peak="-12"
}

# FIN des différents upmix

echo -n "
Quel style d'upmix 5.1 désirez-vous effectuer ?

- par répartition des bandes de fréquences,   tapez 1
- par mixage des canaux + répartition,        tapez 2
- par répartition + inversion de phases,      tapez 3

                                                    ";

while [ 1 ]; do

read choix

case $choix in
1 ) rep_fq
break;;
2 ) mix_rep
break;;
3 ) inv_rep
break;;
* ) echo -n "
Aheum. Réponses possibles 1, 2, ou 3.
Quel est donc votre choix ?                         "
esac
done

echo "
Création des différentes pistes";

echo "
Création du fichier final multi-piste";
# sortie dans un fichier multipiste, peak déterminé dans les différents upmix
sox $dft -M /tmp/01.wav /tmp/02.wav /tmp/03.wav /tmp/04.wav /tmp/05.wav /tmp/06.wav --comment "" -e s -L -c 6 $PWD/$f_sortie gain -e $peak

if [ -f $PWD/$f_sortie ]; then
        echo "Le fichier $f_sortie est dans $PWD/ !"
else
        echo "Un problème est survenu : lisez attentivement les divers retours de commande."
fi

exit 0

Les explications par là

Dernière modification par Coeur Noir (Le 16/03/2014, à 13:09)


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#3 Le 05/06/2014, à 12:03

Coeur Noir

Re : [help needed] Script utilisant SoX + FFmpeg (vidéo pseudo 5.1)

Le script évolue :

- à partir d'une vidéo en stéréo, il en sort une vidéo avec 6 pistes son,
- 3 choix possibles de remix :

  • le 1 est prudent (répartition de fréquences selon les canaux sans remix)

  • le 2 est un peu boum-boum, bien pour des concerts, des clips musicaux, du "live" (un peu de répartition de fréquence, un peu de remix)

  • le 3 est cinématographique (répartition de fréquences, remix avec inversion et soustraction de phases…)

- ce script est destiné à une conversion vers DCP (d'où le codec particulier pour l'audio, et pas de modification de la vidéo)
- vérifie la présence de SoX et FFmpeg et les installe si besoin,
- propose de supprimer ou conserver les fichiers de travail temporaires (permet ainsi de récupérer chaque piste son séparèment, ou la vidéo "muette")

Ce que je ne parviens pas à faire pour l'instant :
- faire en sorte qu'il accepte des noms de fichier ou des chemins vers des fichiers en "entrée" pour le fichier source. Donc pour l'instant ne mettez pas d'espace ni caractères spéciaux dans vos noms de fichier,
- faire de ce script quelque chose de plus "graphique" peut-être avec Zenity mais j'ai du mal à m'y mettre,
- du fait des propriétés audio particulières VLC (par exemple) ne le voit pas comme un 5.1 (ça doit pouvoir s'améliorer avec -map dans FFmpeg mais pour l'instant je n'ai pas obtenu les résultats escomptés),
- Le traduire dans la langue de Shakespeare…

#!/bin/bash

#############
#  Stéréo vers 5.1 (pseudo) surround - version 0.04 - 20140605
#############
#  très librement inspiré de, et mercis à :
#  http://www.projectionniste.net/forums/viewtopic.php?f=45&t=5231
#  http://jeanbruenn.info/2011/10/22/stereo-to-fake-surround/
#  http://www.pfast.fr/IMG/pdf/UPMIXCicmHd3d.pdf
#  http://home-made-dcp.over-blog.fr/article-d-un-son-stereo-vers-un-pseudo-5-1-avec-audacity-84744383.html

#############
# utilisation :
# placez-vous dans le dossier où se situe votre VIDEO avec son stéréo à traiter,
# puis lancez ce script depuis le terminal sur ce modèle :
# bash nom_du_script nom_fichier_source nom_fichier_sortie
# les noms de fichier s'entendent avec leur extension, .mov recommandé pour la sortie

f_source="$1";
f_sortie="$2";

# les différents upmix

rep_fq()
{
echo "Répartition des fréquences sur les 6 canaux,
Création des pistes..."
# gauche
sox $dft $ddt/00.wav $ddt/01.wav remix -l sinc 1900-4800
# droite
sox $dft $ddt/00.wav $ddt/02.wav remix -r sinc 1900-4800
# centre
sox $dft $ddt/00.wav $ddt/03.wav remix 1v0.5,2v0.5 sinc 150-1900
# basses
sox $dft $ddt/00.wav $ddt/04.wav remix 1v0.5,2v0.5 sinc 20-150
# ambiance gauche
sox $dft $ddt/00.wav $ddt/05.wav remix -l sinc 4800-20000
# ambiance droite
sox $dft $ddt/00.wav $ddt/06.wav remix -r sinc 4800-20000
# valeur de peak dbfs
peak="-11"
}

mix_rep()
{
echo "Répartition des fréquences + re-mixage sur 6 canaux,
Création des pistes..."
# gauche
sox $dft $ddt/00.wav $ddt/01.wav remix 1v0.7,2v-0.11
# droite
sox $dft $ddt/00.wav $ddt/02.wav remix 1v-0.11,2v0.7
# centre
sox $dft $ddt/00.wav $ddt/03.wav remix 1v0.354,2v0.354
# basses
sox $dft $ddt/00.wav $ddt/04.wav remix 1v0.5,2v0.5 lowpass -2 100 0.71
# ambiance gauche
sox $dft $ddt/00.wav $ddt/05.wav remix 1v0.67,2v-0.22
# ambiance droite
sox $dft $ddt/00.wav $ddt/06.wav remix 1v-0.22,2v0.67
# valeur de peak dbfs
peak="-12"
}

inv_rep()
{
echo "Répartition des fréq. + spatialisation par inversion de phases + re-mixage sur 6 canaux,
Création des pistes..."
# mono_mix
sox $dft -c 2 $ddt/00.wav -c 1 $ddt/mono_mix.wav mixer 0.5,0.5
# séparation gauche et droite
sox $dft -c 2 $ddt/00.wav -c 1 $ddt/00gauche.wav mixer -l
sox $dft -c 2 $ddt/00.wav -c 1 $ddt/00droite.wav mixer -r
# inversion de phase sur gauche et droite,
# soustraction de gauche au centre pour obtenir droite,
# soustraction de droite au centre pour obtenir gauche
sox $dft -M -c 1 -v -1 $ddt/00droite.wav -c 1 $ddt/mono_mix.wav -c 1 $ddt/gauche.wav
sox $dft -M -c 1 -v -1 $ddt/00gauche.wav -c 1 $ddt/mono_mix.wav -c 1 $ddt/droite.wav
# gauche
sox $dft -c 1 $ddt/gauche.wav -c 1 $ddt/01.wav sinc 120-20000
# droite
sox $dft -c 1 $ddt/droite.wav -c 1 $ddt/02.wav sinc 120-20000
# centre
sox $dft -c 1 $ddt/mono_mix.wav -c 1 $ddt/03.wav sinc 120-12000
# basses
sox $dft -c 1 $ddt/mono_mix.wav -c 1 $ddt/04.wav sinc 20-120
# ambiance gauche
sox $dft -c 1 $ddt/gauche.wav -c 1 $ddt/05.wav delay 0.02 sinc 120-6000 reverb
# ambiance droite
sox $dft -c 1 $ddt/droite.wav -c 1 $ddt/06.wav delay 0.02 sinc 120-6000 reverb
# valeur de peak dbfs
peak="-11"
}

# dossier de travail
mkdir /tmp/script_upmix
ddt="/tmp/script_upmix"

# contrôle présence SoX

if [ -x /usr/bin/sox ]; then
        echo "
SoX est bien présent sur votre système."
else
        echo "
SoX n'est pas présent sur votre système.
Lancement de l'installation, depuis les dépôts."
sudo apt-get update
sudo apt-get install -y sox libsox-fmt-all
fi

# paramètres de sox
dft="-S -V"

# contrôle présence ffmpeg

if [ -x /usr/bin/ffmpeg ]; then
        echo "
FFMPEG est bien présent sur votre système."
else
        echo "
FFMPEG n'est pas présent sur votre système.
Lancement de l'installation, via le PPA
de Jon Severinsson."
sudo add-apt-repository ppa:jon-severinsson/ffmpeg
sudo apt-get update
sudo apt-get install -y ffmpeg
fi

# Séparation de la vidéo en 2 fichiers, un pour l'audio
# et l'autre pour la video

echo "
Préparation des fichiers de travail"

ffmpeg -i $f_source -vn -f wav -acodec pcm_s24le -ar 48000 -ac 2 $ddt/AUDIO
ffmpeg -i $f_source -an -f mov -vcodec copy $ddt/VIDEO

# transformation du fichier AUDIO en .wav 48khz 24 bits stereo
# normalisé à -1 dbfs
sox $ddt/AUDIO -r 48k -b 24 $ddt/00.wav sinc 20-20000 gain -n -1
if [ -f $ddt/00.wav ]; then
        echo "
Ok, le fichier AUDIO temporaire est créé !"
else
        echo "
Un problème est survenu : lisez attentivement les divers retours de commande."
exit
fi

if [ -f $ddt/VIDEO ]; then
        echo "
...et le fichier VIDEO également !"
else
        echo "
Un problème est survenu : lisez attentivement les divers retours de commande."
exit
fi

echo -n "
Quel style d'upmix 5.1 désirez-vous effectuer ?

- par répartition des bandes de fréquences,   tapez 1
- par mixage des canaux + répartition,        tapez 2
- par répartition + inversion de phases,      tapez 3

                                                    ";

while [ 1 ]; do

read choix

case $choix in
1 ) rep_fq
break;;
2 ) mix_rep
break;;
3 ) inv_rep
break;;
* ) echo -n "
Aheum. Réponses possibles 1, 2, ou 3.
Quel est donc votre choix ?                         "
esac
done

echo "
Création du fichier AUDIO multi-piste";
# sortie dans un fichier multipiste, peak déterminé dans les différents upmix
sox $dft -M $ddt/01.wav $ddt/02.wav $ddt/03.wav $ddt/04.wav $ddt/05.wav $ddt/06.wav --comment "" -e s -L -c 6 $ddt/AUDIO_51.wav gain -e $peak

# "collage" de AUDIO_51.wav avec VIDEO
ffmpeg -i $ddt/AUDIO_51.wav -i $ddt/VIDEO -f mov -acodec copy -vcodec copy $PWD/$f_sortie

if [ -f $PWD/$f_sortie ]; then
        echo "Le fichier $f_sortie est dans $PWD !"
	echo -n "Suppression des fichiers de travail temporaires ?

OUI, les supprimer définitivement sans pitié,        tapez S
NON, les déplacer vers le dossier "upmix" sur $PWD   tapez D
                                                           ";

while [ 1 ]; do

read choix

case $choix in
S ) rm -rf $ddt/
break;;
D ) mkdir /$PWD/upmix
mv $ddt/* /$PWD/upmix
break;;
* ) echo -n "
Hmm. Les réponses possibles sont :

	S (majuscule) pour Supprimer
ou
	D (majuscule) pour Déplacer les fichiers vers $PWD.

Quel est donc votre choix ?
        "
esac
done

else
        echo "
Un problème est survenu : lisez attentivement les divers retours de commande."
fi

exit 0

Voir aussi par là.

Dernière modification par Coeur Noir (Le 06/06/2014, à 13:18)


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#4 Le 23/01/2018, à 14:31

vb078

Re : [help needed] Script utilisant SoX + FFmpeg (vidéo pseudo 5.1)

Le lien est mort mais merci pour cette ressource ;;)
Lien WebBackMachine

Hors ligne