Vous dites que vous voulez "en extraire l'audio (mp3 ou ogg)". Mais que faire si l'audio du fichier mp4 n'en fait pas partie? il faudrait quand même transcoder. Alors pourquoi ne pas laisser la détection du format audio à ffmpeg?
Pour convertir un fichier:
ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg
Pour convertir de nombreux 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 l'encodage audio que vous aimez, pour définir des choses comme le débit binaire, etc.
Utilisez -acodec libmp3lame
et modifiez l'extension de .ogg
à .mp3
pour l'encodage mp3.
Si vous voulez vraiment extraire l'audio, vous pouvez simplement "copier" la piste audio dans un fichier en utilisant -acodec copy
. Bien sûr, la principale différence est que le transcodage est lent et gourmand en CPU, tandis que la copie est très rapide car vous ne faites que déplacer 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 du fichier audio doit être cohérent avec ce que contient le conteneur (c'est-à-dire si l'audio est au format AAC, vous devez le dire audiofile.aac
). Vous pouvez utiliser la ffprobe
commande pour voir quel codec 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"
Une façon 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 autres codecs 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 le référentiel ppa: mc3man / trusty-media et installer le package ffmpeg pour obtenir le logiciel nécessaire. Voir ici pour plus de détails.