Linux : MOV 2 AVI : Convertir une video Quik time en fichier AVI
Par Yoann le dimanche, 6 mai 2007, 12:33 - L1nuX and c0 - Lien permanent
La plupart des appareils photos numériques, quand ils sont capables de faire des videos, nous fournissent une video au format Quick Time (*.MOV)
Ces videos étant relativement volumineuses en espace disque, et n'étant pas trop 'fan' du format Quick TIme, je me suis fait un petit script bash pour transformer les videos Quick Time en AVI.
Ce script ne fait rien de plus que d'utilisez ffmpeg pour effectuer la conversion.
Pré-requis :
Vous devez avoir ffmpeg et tr d'installer sur votre systeme (apt-get est votre amis)
Le contenu du script bach :
#!/bin/bash IFS=$(echo -e "\n\r\t") which ffmpeg 1>/dev/null || (echo "Vous devez préalablement installer ffmpeg." && exit 1) echo "=== Conversion mov2avi ===" echo "" echo "Traitement de $1" AVIFILE=$( echo $(basename $( echo $1 | tr "[:upper:]" "[:lower:]" ) .mov).avi) ffmpeg -i $1 -g 60 -vcodec msmpeg4v2 -acodec pcm_u8 $AVIFILE
N'oubliez pas de lui mettre les droits d'execution :
chmod 700 mov2avi.sh
Lancer le script :
./mov2avi.sh IMGP0105.MOV
Le résultat :
=== Conversion mov2avi === Traitement de IMGP0105.MOV FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2004 Fabrice Bellard configuration: --enable-gpl --enable-pp --enable-pthreads --enable-vorbis --enable-libogg --enable-a52 --enable-dts --enable-libgsm --enable-dc1394 --disable-debug --enable-shared --prefix=/usr libavutil version: 0d.49.0.0 libavcodec version: 0d.51.11.0 libavformat version: 0d.50.5.0 built on Mar 26 2007 15:50:40, gcc: 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'IMGP0105.MOV': Duration: 00:00:21.7, start: 0.000000, bitrate: 8423 kb/s Stream #0.0(eng): Video: mjpeg, yuvj422p, 640x480, 30.00 fps(r) Stream #0.1(eng): Audio: pcm_u8, 7875 Hz, mono, 63 kb/s Output #0, avi, to 'imgp0105.avi': Stream #0.0: Video: msmpeg4v2, yuv420p, 640x480, q=2-31, 200 kb/s, 30.00 fps(c) Stream #0.1: Audio: pcm_u8, 7875 Hz, mono, 63 kb/s Stream mapping: Stream #0.0 -> #0.0 Stream #0.1 -> #0.1 [msmpeg4v2 @ 0xb7e79f08]removing common factors from framerate Press [q] to stop encoding frame= 651 q=31.0 Lsize= 1973kB time=21.7 bitrate= 744.9kbits/s video:1780kB audio:167kB global headers:0kB muxing overhead 1.324370%Contributions :
Merci à Thierry qui a apporté des améliorations à mon script initial. Vous pourrez désormais spécifier un fichier ou bien un dossier en paramètres.
Télécharger le script modifié par Thierry
ReSources :
Commentaires
Tu peux ajouter en début de script (après #!/bin/bash) :
which ffmpeg 1>/dev/null || (echo "Vous devez préalablement installer ffmpeg." && exit 1)
Thierry
Merci thierry pour cette remarque.
J'en profite également pour rajouter IFS=$(echo -e "\n\r\t") en debut de script, pour éviter les problemes avec les noms de fichiers contenant des espaces.
On peut également spécifier d'autres codecs video et audio :
j'ai testé xvid (pour la vidéo) et mp3 (pour le son), qui sont davantage compatibles avec les lecteurs Divx "de salon".
Dans ce cas, on spécifiera dans ton script :
ffmpeg -i $1 -g 60 -vcodec xvid -acodec mp3 $AVIFILE
Pour vérifier les codecs d'un flim converti en avi, l'indispensable commande issue du paquet "transcode" ("concurrent" du libre à ffmpeg) : "tcprobe"
Dans mon cas, après conversion : tcprobe -i 007.avi
[tcprobe] RIFF data, AVI video
[avilib] V: 29.970 fps, codec=xvid, frames=8836, width=480, height=360
[avilib] A: 32000 Hz, format=0x55, bits=0, channels=2, bitrate=64 kbps,
[avilib] 8194 chunks, 2359872 bytes, VBR
[tcprobe] summary for 007.avi, (*) = not default, 0 = not detected
import frame size: -g 480x360 [720x576] (*)
frame rate: -f 29.970 [25.000] frc=4 (*)
audio track: -a 0 [0] -e 32000,0,2 [48000,16,2] -n 0x55 [0x2000] (*)
bitrate=64 kbps
length: 8836 frames, frame_time=33 msec, duration=0:04:54.827
NB: transcode dépend des sources multimedia (non officielles) de debian :
www.debian-multimedia.org...
Oups désolé, en fait je me suis trompé entre parenthèses et accolades :
çà n'est pas
which ffmpeg 1>/dev/null || ( echo "Vous devez préalablement installer ffmpeg." && exit 1; )
mais
which ffmpeg 1>/dev/null || { echo "Vous devez préalablement installer ffmpeg." && exit 1; }
Voici le script corrigé et amélioré (pour accepter aussi un répertoire en argument):
#!/bin/bash
IFS=$'\n'
which ffmpeg 1>/dev/null || { echo "Vous devez préalablement installer ffmpeg." && exit 1; }
if [ $# -ne 1 -o "$1" != "" -a ! -f "$1" -a ! -d "$1" ];then echo "Arguments incorrects: $0 FICHIER (ou: REPERTOIRE)." && exit 1;fi
if [ -f $1 ];then
echo $1|grep -i ".mov$" 1>/dev/null || { echo "\"$1\" n'est pas un fichier valide." && exit 1; }
echo -e "=== Conversion mov2avi ===\nTraitement de $1"
AVIFILE=$( echo $(basename $( echo $1 | tr "[:upper:]" "[:lower:]" ) .mov).avi)
ffmpeg -i $1 -g 60 -vcodec msmpeg4v2 -acodec pcm_u8 $AVIFILE || echo "La conversion a échoué."
elif [ -d $1 ];then
ls $1|grep -i ".mov$" 1>/dev/null || { echo "\"$1\" ne contient aucun fichier '.mov' valide." && exit 1; }
for i in `ls $1|grep -i ".mov$"`;do
echo -e "=== Conversion $0 ===\nTraitement de $1/$i"
AVIFILE=$(echo $(basename $( echo $i | tr "[:upper:]" "[:lower:]" ) .mov).avi)
ffmpeg -i $1/$i -g 60 -vcodec msmpeg4v2 -acodec pcm_u8 $1/$AVIFILE 2&>1 || echo "La conversion de $1/$i a échoué."
done
fi
Idéalement, à placer dans le PATH (echo $PATH: /usr/bin/, ou /usr/local/bin/...) avec les droits 755 (chmod 755), pour l'appeler directement : mov2avi
Merci Thierry pour tes contributions.
Je viens de rajouter un petit mot sur tes modifications dans le billet.
MediaCoder ... facile, gratuit mais très complet.
http://www.clubic.com/telecharger-f...
@philnadlolo
Ton MediaCoder fonctionne peut-etre très bien mais sous Windows...
Ici le premier mot du titre de ce billet c'est : "Linux"
Yoann
Merci beaucoup pour ce petit script vraiment très pratique!
Samy