Main menu:

Site search

Categories

avril 2025
L M M J V S D
 123456
78910111213
14151617181920
21222324252627
282930  

Archive

Effectuer une même opération sur un ensemble de fichiers (version améliorée)

Dans un billet précédent, je montrais comment effectuer une opération sur un ensemble de fichiers en utilisant une simple ligne de commande. Je prenais comme exemple, pour illustrer le billet, la conversion d’un ensemble de fichiers audio .wav en mp3. Les commandes données fonctionnent très bien mais elles ont un inconvénient: lors de la conversion, l’extension .mp3 est ajoutée au fichier audio de sorte que le résultat est du genre mon_fichier.wav.mp3. Ce n’est pas vraiment gênant mais il est possible de faire en sorte que le fichier soit renommé de façon à ce que l’indication .wav soit enlevée et que cela devienne mon_fichier.mp3.

Pour arriver à ce résultat, on peut utiliser la commande basename qui permet de se débarrasser du path éventuel associé au fichier et de son extension.
On l’utilisera comme ceci:

$ find ~/music -name \*.wav | while read x; do lame -b 192 -h "$x" "`basename "$x" .wav`.mp3";done

Ou si vous préférez une boucle for:

$ for i in *.wav;do lame -b 192 -h "$i" "`basename "$i" .wav`.mp3";done

Attention de bien respecter le guillemets et apostrophes inversées ‘`’ autour de la commande basename et de ses arguments.

Quelques exemples d’utilisation de mplayer et ffmpeg

Ci dessous, vous trouverez quelques recettes pour manipuler des vidéos et des sons au moyen de ffmpeg ou du couple mplayer/mencoder. Ma préférence va à mplayer parce que du côté de ffmpeg, qui est très performant par ailleurs, il y a quelques problèmes: la documentation n’est pas à jour, les options à mettre dans la ligne de commande changent (trop) régulièrement (par exemple le flag trell est devenu -trellis suivi d’une valeur, -title « string » est remplacé par -metatag title= »string »). Ceci fait qu’une ligne de commande utilisant ffmpeg sous Ubuntu 8.10 n’est pas garantie fonctionner sous Ubuntu 9.04. C’est à mon avis une raison suffisante pour éviter ffmpeg d’autant plus que la documentation n’est pas mise à jour.

Obtenir des infos sur une vidéo (avi, mov, flv, mpg…)

$ mplayer -v video.avi

Ceci donne les codecs utilisés, le format, la taille, les identificateurs de pistes audio, les sous-titres…

Convertir des images en une vidéo

$ ffmpeg -f image2 -i image%03d.jpg video.avi

Les images doivent avoir pour nom image001.jpg, image002.jpg,…et doivent être au format jpg, gif, png,…

Générer des images à partir d’une vidéo (avi, mov, flv, mpg…)

Cela générera des fichiers image00x.jpg mais vous pouvez utiliser le format que vous désirez, jpg, png, gif, tiff,…

$ ffmpeg -i video.avi -r 1 image%03d.jpg

ou par exemple en gif avec mplayer:

$ mplayer -vo gif89a -vf scale=320:240 video.avi

Extraire le son d’un DVD

$ mplayer -vc null -vo null -aid numéro_piste_audio -ao pcm:file=son.wav -af resample=44100 dvd://numéro_du_titre -dvd-device /media/cdrom0

ou

$ mplayer -dvd-device /media/cdrom0 -dumpstream dvd://1 -aid 128 -dumpfile titre1.vob

Le numéro de piste audio (aid) peut être obtenu en demandant à mplayer les infos sur la vidéo.

Extraire le son d’une vidéo

Ici, l’extraction se fait en mp3 mais on peut envisager un autre format.

$ ffmpeg -i video.avi -vn -ar 44100 -ac 2 -ab 192k -f mp3 son.mp3

ou avec mplayer:

$ mplayer -vc null -vo null -ao pcm:file=son.wav -af resample=44100 video.avi

Extraire une piste son d’une vidéo en gardant son format d’origine

$ mplayer -dumpaudio -dumpfile son.mp3 video.avi

Extraire la piste vidéo

$ mplayer -dumpvideo -dumpfile video.raw video.avi

Enregistrer un stream audio

Avec playlist (fichier de type .m3u):

$ mplayer -ao pcm:file=radio.wav -nocache -playlist http://www.classic21.be/rtbf_2000/radios/21128.m3u

Enregistrer directement le stream:

$ mplayer -ao pcm:file=radio.wav -nocache http://streaming.rtbf.be:8000/2128xrtbf

Convertir une vidéo pour en faire un dvd

Encodage en mpeg2:

$ ffmpeg -i video_source.avi -target pal-dvd -aspect 16:9 -sameq video.mpg

Création de l’arborescence de fichiers dvd (VIDEO_TS: bup, ifo, vob) dans le répertoire ./dvd

$ dvdauthor --title -o dvd/ -f video.mpg

Création de la TOC:

$ dvdauthor -o dvd/ -T

Update : dvdauthor nécessite dans sa dernière version 0.7.0 de définir une variable d’environnement avant de l’utiliser:

$ export VIDEO_FORMAT=PAL

Eventuellement, remplacez PAL par NTSC.

Convertir une vidéo mpg en avi

$ ffmpeg -i video_source.mpg video.avi

Multiplexer un son et une vidéo

$ ffmpeg -i son.wav -i video_source.avi video.mpg
$ mencoder -oac copy -ovc copy -audiofile audio.mp3 -o video.avi video_source.avi

Convertir un avi en flv

$ ffmpeg -i video_source.avi -ab 64 -ar 44100 -b 200 -r 15 -s 320×240 -f flv video.flv

synchroniser son et image

$ mplayer delay xx video.avi

Quand la bonne valeur de délai est trouvée, on réencode la vidéo:

$ mencoder -oac copy -ovc copy -audio-delay -xx video_source.avi video_out.avi

Convertir une vidéo .flv en une vidéo pour iPod

Je viens de rentrer de vacances et pour meubler les longues heures à passer dans les embouteillages inévitables du sud de la France, ma fille m’avait demandé de lui copier quelques vidéos prises sur YouTube et de les mettre sur son iPod.
La conversion est assez simple à partir du moment où on sait le format que doit avoir cette vidéo pour être lisible par l’iPod. Celle-ci doit être au format mpeg4 ou divx (xvid) et le son doit être codé en aac. La taille de l’image a aussi de l’importance, 320×240 fonctionne très bien.
Pour une raison que je ne m’explique pas, j’ai dû d’abord convertir le fichier .flv(vidéo flash) trouvé sur YouTube en un fichier avi, l’utilisation d’un .flv directement dans la ligne de commande ne fonctionnant pas:

$ ffmpeg -i source.flv source.avi

Ensuite la conversion au format compréhensible par l’iPod:

$ ffmpeg -i source.avi -f mp4 -vcodec mpeg4 -maxrate 1000 -qmin 3 -qmax 5 -bufsize 4096 -g 300 -acodec libfaac -s 320x240 -ab 128 -b 400 dest.mp4

Si vous préférez le format xvid, utilisez cette commande-ci:

$ ffmpeg -i source.avi -f mp4 -vcodec libxvid -maxrate 1000 -qmin 3 -qmax 5 -bufsize 4096 -g 300 -acodec libfaac -s 320x240 -ab 128 -b 400 destxvid.mp4

Consultez la page de manuel de ffmpeg pour avoir l’explication des autres paramètres de la ligne de commande.
Si ffmpeg n’est pas installé, faites-le avec une simple commande:

$ sudo aptitude install ffmpeg

veillez aussi, lorsque vous utilisez ffmpeg, à installer les codecs dont vous pourriez avoir besoin. Par exemple libfaac dans l’exemple ci-dessus.

Remarque: Un fichier au format flv est un fichier conteneur destiné à des vidéos sur Internet. La qualité vidéo et audio de ce format n’est pas très bonne, c’est le moins que l’on puisse dire. Si au niveau vidéo, la petite taille de celle-ci la rend ‘regardable’, le son, par contre est en général codé en 64kbits/s voire 56kbits/s ce qui en fait un signal bien loin d’être Hi-Fi. Malheureusement bien des personnes semblent s’en contenter.

Autoriser xdmcp

Par défaut, il est impossible d’utiliser le protocole xdmcp pour se connecter en terminal X sur un autre PC équipé d’un serveur X. Si vous ouvrez le programme Terminal Server Client dans le menu Applications/Internet, vous verrez que dans la liste des protocoles, xdmcp est grisé.
Pour autoriser le choix de ce protocole, il faut installer le paquet xnest qui se trouve dans les dépôts:

$ sudo aptitude install xnest

Relancez le programme Terminal Server Client et maintenant, xdmcp devrait être dans les choix possibles.

C++ – le compilateur est-il installé?

J’avais une application que je devais absolument compiler sur une machine. L’application était écrite en C et en C++. Je lance la compilation avec make et gcc me donne tout à coup une erreur:

gcc: error trying to exec 'cc1plus': execvp: Aucun fichier ou dossier de ce type

Il faut savoir que cc1 est le compilateur C et cc1plus, le compilateur C++.
Je me suis gratté la tête pendant un quart d’heure à me demander pourquoi le compilateur C++ ne pouvait être lancé avant de réaliser qu’en fait, ce message d’erreur signale simplement que le compilateur n’est pas installé. Donc, avant de faire comme moi et de fouiller tout votre système à la recherche du compilateur g++, vérifiez si vous n’avez pas tout simplement oublié de l’installer.

$ sudo aptitude install g++

Ceci suffit à l’installer et à faire disparaître l’erreur de compilation.

Maintenir son PC à l’heure

Plusieurs méthodes sont possibles pour maintenir un PC à l’heure.

ntpdate

C’est une application qui se charge d’ajuster l’horloge du PC en fonction de l’heure donnée par un serveur ntp.
Si elle est installée, c’est la méthode utilisée par Ubuntu pour mettre à jour l’horloge de votre PC. Pour l’installer:

$ sudo aptitude install ntpdate

Cette application s’utilise simplement en lui donnant en paramètre le nom d’un serveur ntp. En Belgique il existe un pool de serveur be.pool.ntp.org. Vous pouvez donc synchroniser votre PC avec ce pool de serveurs ntp en tapant dans un terminal:

$ sudo ntpdate be.pool.ntp.org

Vous pouvez évidemment utiliser d’autres serveurs comme ntp1.oma.be, ntp2.oma.be, ntp.skynet.be ou fr.pool.ntp.org si vous habitez la France.

Dans Ubuntu, les choses se passent de cette façon: au démarrage de la machine, lorsque la carte réseau est initialisée et le réseau activé, Ubuntu exécute les scripts contenus dans le répertoire /etc/network/if-up.d/. Dans ce répertoire, se trouve un script shell qui s’appelle ntpdate. Rien à voir avec l’application ntpdate que l’on vient d’installer. Bonjour la confusion! Ce script appelle un autre script shell appelé ntpdate-debian (comme c’est subtil) et qui se trouve dans /usr/sbin. Ce script se base sur un fichier de configuration appelé, vous l’avez deviné, ntpdate dans /etc/default et finalement lance l’application ntpdate qui va synchroniser votre PC avec le serveur de temps.
Autrement dit, votre PC est remis à l’heure à chaque démarrage mais si votre PC n’est pas rebooté ou s’il s’agit d’un serveur, il n’y a plus de remise à l’heure et l’horloge de votre PC peut dériver allègrement.
La solution est dans ce cas d’installer un cronjob c’est à dire une tâche que cron va lancer à intervalle régulier, par exemple toutes les heures. Pour cela, lancez l’éditeur qui permet de modifier la table des tâches à exécuter:

$ crontab -e

et ajoutez-y une ligne contenant par exemple:

@hourly /etc/network/if-up.d/ntpdate

ou

@hourly ntpdate serveur_ntp

Remplacez évidemment serveur_ntp par le serveur ntp que vous voulez utiliser.

ntpd

Il s’agit d’un daemon qui ajuste continuellement l’horloge pour éviter de grosses corrections de l’horloge. Les serveurs utilisés sont indiqués dans le fichier /etc/ntp.conf.
Vous pouvez y mettre le serveur que vous voulez utiliser. Dans mon cas, j’ai ajouté à la fin du fichier la ligne:

server be.pool.ntp.org

la méthode graphique

Dans le menu Système/Préférences/Centre de contrôle, cliquez sur Date et heure. Cliquez ensuite sur Déverrouiller, entrez votre mot de passe et dans le champ Configuration, choisissez le mode Rester synchronisé avec les serveurs sur internet. Si le daemon ntp n’est pas installé, il le téléchargera et l’installera. Sélectionnez votre fuseau horaire et le serveur de temps que vous voulez utiliser. Il vous est aussi donné la possibilité d’entrer l’adresse du serveur de votre choix s’il n’est pas déjà repris dans la liste.