Bash – Convertir des vidéos MTS vers MP4 sous macOS

854 mots, temps de lecture 5 minutes.

Dessin laptop avec une loupe où il est écrit "Tuto"

ffmpeg sous macOS – convertir par lot des vidéos MTS vers MP4.

J’écris ce tuto de mémoire, pas de copier/coller. Pour les approximations, vous aurez au moins les grandes lignes.

Tout commence ainsi :
– Sima, je voudrais convertir des vidéos .MTS en vidéos .mp4
– Envoie-moi un fichier .MTS et je vais voir…

J’ouvre un terminal et je lance :

ffmpeg -i 00002.MTS -c copy video-convert-01.mp4

C’est rapide, qualité équivalente, poids similaire. Il faut dire que les fichiers MTS contiennent en général une vidéo déjà compressée, typiquement en H.264. Voir « Advanced Video Codec High Definition » (en français) sur Wikipédia. Avec -c copy, ffmpeg ne réencode rien, il se contente de changer le conteneur (de MTS/M2TS vers MP4), d’où la rapidité et l’absence de perte de qualité.

Puis je renvoie le nouveau fichier mp4…
– C’est pas ça que je veux Sima, je veux pouvoir le faire toute seule sur mon PC, et par lot, car j’en ai plein !
– Ha… tu es sous macOS, c’est plus ou moins un Unix/BSD bricolé, voyons si c’est possible.

Voyons la suite…

Est-ce que ffmpeg est installé ?

ffmpeg -version
command not found → ou un message similaire.

Donc non, ffmpeg n’est pas installé. En cherchant sur le web, on me dit qu’il faut l’installer avec Homebrew (brew). J’essaie, et je me rends compte que Homebrew n’est pas installé non plus.

Nouvelle recherche, je trouve le dépôt GitHub: https://github.com/Homebrew

Un prérequis à connaître : Homebrew a besoin des « Command Line Tools » d’Xcode (compilateur, outils Unix de base). S’ils ne sont pas déjà présents, macOS proposera normalement une fenêtre pour les installer automatiquement pendant l’installation de Homebrew. Ça peut prendre plusieurs minutes, c’est normal, il suffit de laisser faire.

Comme je fais ça de mémoire, je ne me souviens plus si j’ai lancé les commandes en simple utilisateur ou avec sudo. Je vous conseille de lancer vos commandes en utilisateur normal, et de n’utiliser sudo que si un message vous précise explicitement que vous n’avez pas les droits nécessaires.

Donc :

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ nstall/HEAD/install.sh)"

À la fin, un message vous indique qu’il faut lancer deux ou trois commandes supplémentaires pour finaliser la configuration (elles ajoutent Homebrew au PATH de votre shell, en général via echo, elles commencent donc par echo >> ~/.zprofile ou ~/.zshrc selon la version de macOS). Lancez-les une par une, telles qu’affichées par le script – copier/coller exactement ce qui est proposé évite les erreurs. Ensuite, fermez et rouvrez le terminal (ou faites source ~/.zprofile) pour que les changements prennent effet.

On vérifie que tout est en ordre :

brew --version
brew doctor

brew doctor signale d’éventuels soucis de configuration, s’il répond « your system is ready to brew », c’est bon.

On peut enfin installer ffmpeg :

brew install ffmpeg

Et on vérifie :

ffmpeg -version

Conversion des fichiers MTS en MP4

Avec mkdir, créez un répertoire de travail où vous copiez (avec cp) vos fichiers à convertir :

mkdir nom_du_repertoire_cree
cp *.MTS nom_du_repertoire_cree

Petit conseil avant de lancer un traitement par lot : gardez toujours les fichiers .MTS d’origine ailleurs (sur la carte SD, un disque externe, etc.) tant que vous n’avez pas vérifié que les .mp4 convertis se lisent correctement. Vérifiez aussi que vous avez assez d’espace disque disponible, un lot de vidéos peut vite représenter plusieurs dizaines de Go.

Placez-vous dans ce répertoire et vérifiez avec ls -l :

cd nom_du_repertoire_cree
ls -l

C’est bon, tout y est. Reste à convertir par lot les fichiers MTS en MP4. Pour cela on utilise une boucle for … do … done :

for f in *.MTS; do ffmpeg -i "$f" -c copy "${f%.MTS}.mp4"; done

On peut améliorer cette commande :

for f in *.MTS; do ffmpeg -i "$f" -map 0 -c copy "${f%.MTS}.mp4"; done

Le point important que j’avais oublié la première fois : les fichiers MTS (format AVCHD des caméscopes) contiennent souvent plusieurs pistes, par exemple deux pistes audio (stéréo + 5.1), voire une piste de sous-titres ou de données. Sans le -map 0, ffmpeg ne garde par défaut que le meilleur flux de chaque type qu’il détecte, et peut donc laisser une piste audio de côté sans prévenir. Le -map 0 force la copie de tous les flux du fichier source, c’est plus sûr pour un traitement par lot où vous ne vérifiez pas chaque fichier un par un.

Autre point : l’audio des fichiers MTS est souvent en AC-3 (Dolby Digital). Ce codec passe très bien dans un conteneur MP4, mais certains lecteurs (notamment QuickTime Player sur Mac) ne le lisent pas. Si vos .mp4 sont muets ou refusent de s’ouvrir dans QuickTime, ce n’est pas la conversion qui a échoué, il faut réencoder l’audio en AAC, par exemple avec :

for f in *.MTS; do ffmpeg -i "$f" -map 0 -c:v copy -c:a aac -b:a 192k "${f%.MTS}.mp4"; done

(Ici seule la vidéo est copiée telle quelle, l’audio est réencodé en AAC, un peu plus long que le simple remix, mais toujours sans réencodage vidéo, donc rapide et sans perte sur l’image.)

Une fois la conversion terminée, un petit contrôle rapide (ouvrir deux ou trois fichiers au hasard, vérifier l’image et le son) avant de supprimer les originaux.

Comment fonctionne la boucle for … do … done ? Je l’explique dans l’article « Initiation au shell, boucle for, do, done ».

Une réflexion sur « Bash – Convertir des vidéos MTS vers MP4 sous macOS »

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *