La commande magique

Avec lavtrans

La commande typique à exécuter est la suivante :

lavtrans +p -o test.mov -f q video1.mov video2.mov...

L'option +p, absente de la documentation :-( , indique que le format de sortie est du PAL, -o test.mov indique bien sûr le fichier résultat et l'option -f q spécifie que l'on veut du Quicktime. Si vous ne changez pas de format vidéo, lavtrans devrait se contenter de copier les flux vidéos pour produire le résultat en un temps plutôt court. Le seul problème que j'ai avec mes fichiers Quicktime est que le son n'est pas copié par lavtrans. Celui-ci n'arrive en fait pas à lire la piste audio comme le montre cette tentative d'extraction de l'audio :

$ lavtrans -o test.wav -f q video1.mov
**ERROR: [lavtrans] Opening output file test.wav: Input file format not recognized

Dans mon cas ceci limite bien entendu son intérêt...

Avec mencoder

La commande à exécuter est :

mencoder -oac copy -ovc copy -o test.avi video1.mov video2.mov...

Par défaut mencoder crée un fichier AVI, les options -oac et -ovc spécifient les codecs à utiliser pour l'audio et la vidéo respectivement. Les codecs copy ne font que copier les pistes audio et vidéo comme leur nom l'indique, d'où un temps de création de la vidéo finale plutôt court. Néanmoins si la commande échouait en se plaignant que le codec ne convient pas, il faudrait bien lire le message pour savoir quoi faire, par exemple :

$ mencoder -oac copy -ovc copy -o test.avi video1.mov video2.mov
MEncoder dev-SVN-rUNKNOWN-4.1.2 (C) 2000-2006 MPlayer Team
[...]
Audio format 0x20776172 is incompatible with '-oac copy',
please try '-oac pcm' instead or use '-fafmttag' to override it.

Exiting...

Dans ce cas il suffit d'utiliser le codec audio pcm comme indiqué et ça marche, avec le son cette fois !

Mise en musique

Si vous vous souvenez du billet Créer une playlist pour les vidéos d'un répertoire, vous savez qu'il y a au moins deux options pour créer la vidéo résultat de la mise bout à bout d'autres vidéos depuis le navigateur de fichiers Nautilus :

  • à partir d'une sélection de fichiers vidéos
  • à partir d'une sélection de répertoire(s)
À partir d'une sélection de vidéos

Dans le premier cas, il suffit de créer l'action Nautilus avec l'une des deux commandes exposées plus haut. Il faut pour cela spécifier pour l'action les champs suivants avec lavtrans[1] :

  • Chemin : lavtrans
  • Paramètres : +p -f q -o %d/all-videos.mov %M

Et les champs suivants avec mencoder :

  • Chemin : mencoder
  • Paramètres : -oac pcm -ovc copy -o %d/all-videos.avi %M

Dans les deux cas le résultat de la mise bout à bout des vidéos sera un fichier nommé all-videos dans le répertoire des vidéos d'origine avec l'extension .mov ou .avi. Le résultat se trouve dans les fichiers suivants qui sont simplement à importer dans nautilus-actions :

nautilus action

À partir d'une sélection de répertoires

Pour cette seconde option, il nous faut écrire un script qui va lister les fichiers vidéos du répertoire sélectionné et ses éventuels sous-répertoires :

# script pour joindre les vidéos d'un répertoire et ses enfants
#
# auteur : JM. Philippe <http://philipjm.free.fr/blog/>
# domaine public

# constantes
FILEFILTER=*.mov
#OUTPUT=all-videos.mov
#COMMAND="lavtrans +p -o $OUTPUT -f q"
OUTPUT=all-videos.avi
COMMAND="mencoder -oac pcm -ovc copy"

# lister les fichiers videos
if [ ${#@} == 0 ]; then
	DIRNAME=.
else
	DIRNAME=$@
fi
COMMAND="$COMMAND -o '$DIRNAME/$OUTPUT'"

IFS=$'\n'
for FILE in $(find "$DIRNAME" -name "$FILEFILTER" | sort); do
	COMMAND=$COMMAND" '"$FILE"'"
done
eval $COMMAND

On appelle alors simplement ce script dans l'action Nautilus, en veillant à spécifier qu'un seul répertoire doit être sélectionné. À nouveau la vidéo résultante sera nommée all-videos.avi et vous pouvez récupérer mon fichier join-contained-videos.schemas de l'action Nautilus.

Il ne reste plus qu'à graver un DVD avec tous les fichiers all-videos générés, la prochaine étape ?

Notes

[1] on se reportera aux explications du billet sur les playlist pour plus de détails