web-dev-qa-db-fra.com

script bash: est-il possible de reconnaître le format vidéo à partir de fichiers (pour en extraire par lots l'audio)?

J'ai écrit un petit script bash pour extraire l'audio des fichiers vidéo en mode batch.

Le son est extrait de chaque fichier mp4 au format flac en utilisant avconv (et le codec flac).

#!/bin/sh
#
# Batch conversion of audio extraction from video

FOLDER_SRC="/home/Me/Music/TestBatchConv"

for myvid in $(find ${FOLDER_SRC} | grep mp4)
do
avconv -i $myvid -acodec flac "${myvid}.flac"
done

exit 0

Cela fonctionne bien, mais j'aimerais l'améliorer.

Le script détecte uniquement le format mp4. Est-il possible de reconnaître un fichier vidéo avec une commande (au lieu de tester chaque format vidéo)?

Merci pour les conseils.

2
riimzzai

Vous recherchez file

par exemple.

 $ file -b 01--Frank_Sinatra--Close_to_You_And_More--Close_to_You.m4a 
 Audio file with ID3 version 2.4.0, contains: ISO Media, MPEG v4 system, iTunes AAC-LC

Il doit couvrir tous les types de supports bien connus. Si quelque chose manque, vous pouvez l'ajouter vous-même (voir man magic).

2
H.-Dirk Schmitt

Pour tester dans Bash, si $ file est un fichier vidéo, vous pouvez utiliser

[[ $(ffprobe -v quiet -select_streams v:0 -show_entries stream=codec_name -print_format csv=p=0 "$file") ]] && echo $file is video

ffprobe est fourni par le package ffmpeg. 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.

2
jarno