J'ai 228 fichiers mp4 (2,6 Go) et voudrais en extraire l'audio (mp3 ou ogg). Je veux les extraire par lot - de préférence avec bash. Je ne sais pas si tous les fichiers utilisent le même codec audio, car ils ont été enregistrés au cours d'années différentes, allant de 2006 à 2012.
Je veux les parcourir tous en boucle, choisir le nom du fichier, détecter le codec audio et utiliser ffmpeg pour extraire l'audio.
C'est possible?
Vous dites que vous voulez "extraire l'audio d'eux (mp3 ou ogg)". Mais que se passe-t-il si l'audio dans le fichier mp4 n'en fait pas partie? il faudrait quand même transcoder. Alors pourquoi ne pas laisser la détection du format audio jusqu’à ffmpeg?
Pour convertir un fichier:
ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg
Pour convertir plusieurs fichiers:
for vid in *.mp4; do ffmpeg -i "$vid" -vn -acodec libvorbis "${vid%.mp4}.ogg"; done
Vous pouvez bien sûr sélectionner tous les paramètres ffmpeg pour le codage audio que vous aimez, pour définir des paramètres tels que le débit binaire, etc.
Utilisez -acodec libmp3lame
et modifiez l'extension de .ogg
à .mp3
pour le codage mp3.
Si vous voulez réellement extraire l'audio, vous pouvez simplement "copier" la piste audio dans un fichier à l'aide de -acodec copy
. Bien entendu, la principale différence est que le transcodage est lent et nécessite beaucoup de ressources processeur, tandis que la copie est très rapide car vous ne déplacez que des octets d'un fichier à un autre. Voici comment copier uniquement la piste audio (en supposant qu'elle soit au format mp3):
ffmpeg -i videofile.mp4 -vn -acodec copy audiofile.mp3
Notez que dans ce cas, le format de fichier audio doit être cohérent avec le contenu du conteneur (c.-à-d. Si le format audio est au format AAC, vous devez indiquer audiofile.aac
). Vous pouvez utiliser la commande ffprobe
pour voir le codec que vous avez. Cela peut fournir des informations:
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "videofile.mp4"
Un moyen possible d’analyser automatiquement le codec audio et de nommer le fichier audio en conséquence serait:
mkdir -p output
# current directory has to contain at least one .mp4 file
for vid in *.mp4; do
codec="$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "$vid")"
case "$codec" in
mp3 ) filetype=mp3 ;;
vorbis ) filetype=ogg ;;
* ) filetype= ;;
esac
if [ "$filetype" ]; then
ffmpeg -i "$vid" -vn -acodec copy output/"${vid%.*}"."$filetype"
else
ffmpeg -i "$vid" -vn -acodec libvorbis output/"${vid%.*}".ogg
done
Remarques: les fichiers de sortie sont créés dans le sous-répertoire output
qu'il crée au début (si nécessaire). Pour les codecs autres que mp3 et vorbis, il convertit l'audio en ogg. Ubuntu 14.04 n'a pas ffmpeg dans les référentiels standard, mais vous pouvez ajouter un référentiel ppa: mc3man/trusty-media et installer le paquet ffmpeg pour obtenir le logiciel nécessaire. Voir ici pour plus de détails.
Comme l'a dit Nicolas Raoul, cela nécessite une mise à jour. Voici la même ligne que roadmr a donnée mais en utilisant avconv à la place:
for vid in *.mp4; do avconv -i "$vid" "${vid%.mp4}.mp3"; done