Forum Linux.général Convertir du MTS en gardant les métadonnées de date.

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
2
26
juil.
2019

Bonjour,

J'ai des fichiers vidéos MTS dont je voudrais conserver les données de création (en gros, c'est surtout la date de prise de vue qui m'intéresse).

D'habitude, j'utilise libav/ffmpeg avec l'option -map_metadata 0, mais c'est quand je passe d'un fichier MP4/AVI/MKV à un autre fichier MP4 (par exemple, quand j'applique HEVC).

Or, pour les fichiers MTS, c'est un petit peu différent :

La commande mediainfo ne me délivre pas d'information quant à la prise de vue.
La commande exiftool me donne la date et l'heure précise de la prise de vue.
Mes lecteurs vidéos m'affichent la date et l'heure dans un petit encart sur la vidéo.
Une fois encodés en MP4 avec libav/ffmpeg, mes fichiers vidéo ont de nombreuses métadonnées, comme le nombre d'images par seconde, le débit, etc, mais la date de création et de prise de vue est calquée sur le 1er janvier 1904, à 00:00:00…

J'ai imaginé pouvoir extraire la donnée qui m'intéresse et l'intégrer manuellement, mais j'ai des centaines de vidéos et j'en aurai encore à l'avenir, du coup, je n'ai pas trop d'idée…

Merci pour votre aide !

  • # My 2 cents

    Posté par  . Évalué à 4.

    Avec un setup:
    * Soit tes fichiers sources dans un répertoire ~/sources/ et donc l'extension est .mts
    * Soit tes fichiers transcodé dans un répertoire ~/transco/ et donc l'extension est .mp4

    Perso, je procéderai ainsi:

    • Je boucle sur chaque fichier dans ~/sources.
    • J'en déduis un fichier de destination (avec basename en shell).
    • Je vérifie que j'ai pas déjà traité le fichier.
    • Je transcode
    • J'extrais les infos qui m'intéressent
    • J'écris les infos dans mon fichier de destination
    for src in ~/sources/*.mts ; do 
      dst=$(basename ${src} .mts)
      if [ ! -f ${dst} ] ; then
        creation_date=$(exiftool -tout-ki-va-bien-pour-extraire-la-date-en-question ${src})
        ffmpeg [...] -o ${dst}
        exiftool -tout-ki-va-bien-pour-setter-la-date-en-question ${dst}
      fi
    done

    attention: ce script peut contenir erreur et bashisme :-)

    Je te laisse le soin de trouver le contenu de -tout-ki-va-bien-* ;-)

    • [^] # Re: My 2 cents

      Posté par  . Évalué à 2.

      Salut,

      exiftool -DateTimeOriginal fichier.jpg fonctionne pour l'extraction mais intègre du texte en plus de la date.
      Ça commence à se complexifier un poil pour mes maigres compétences dans le domaine et j'aligne erreur sur erreur. xD

      En tout cas, c'est gentil pour la proposition. Je travaille un peu dessus mais je recherche en parallèle une solution un peu plus…"ffmpeg-friendly"…Je me fais vieux…

      • [^] # Re: My 2 cents

        Posté par  . Évalué à 3. Dernière modification le 27/07/19 à 19:31.

        Aurais tu un exemple de sortie ? Histoire que je t'aiguille avec sed pour ne garder que ce qui t'intéresse…

        Par exemple, sur un JPEG qui traine dans mon home:

        binarym@avalon:~$ exiftool -DateTimeOriginal IMG_20180530_195714.jpg
        Date/Time Original : 2018:05:30 19:57:15
        binarym@avalon:~$ exiftool -DateTimeOriginal IMG_20180530_195714.jpg |sed -e 's/^.*: //'
        2018:05:30 19:57:15

        Pour l'explication, je demande à sed de substituer (s/MOTIF/SUBSTITUION/) tout ce qui est compris entre le début de la ligne (^ début de ligne, .* n'importe quel caractère 0 ou n fois) et la première séquence :. Je lui demande de le substituer par rien.

        • [^] # Re: My 2 cents

          Posté par  . Évalué à 2. Dernière modification le 28/07/19 à 11:45.

          Salut,

          Après création de deux dossiers dans le répertoire de travail (sources et dest), j'applique ce script qui fonctionne :
          ```

          !/bin/bash

          for src in sources/.MTS ; do
          dst=dest/$(basename ${src}.mp4)
          if [ ! -f "${dst}" ] ; then
          creation_date=$(exiftool -DateTimeOriginal ${src} |sed -e 's/.
          : //')
          avconv -i ${src} -acodec libvorbis -c:v libx265 -crf 25 -y ${dst}
          exiftool "-AllDates=${creation_date}" ${dst}
          fi
          done
          ```

          Merci à toi !
          PS : Je ne comprends rien à comment mettre du code ici. Ça indente, ça écrit "mathjax" à la place des $, ça écrit en italique, ça fait le café, mais je n'y arrive pas.

          • [^] # Re: My 2 cents

            Posté par  . Évalué à 2.

            PS : Je ne comprends rien à comment mettre du code ici. Ça indente, ça écrit "mathjax" à la place des $, ça écrit en italique, ça fait le café, mais je n'y arrive pas.

            Tout pareil … bug connu je crois…

            • [^] # Re: My 2 cents

              Posté par  . Évalué à 2.

              En tout cas, tout fonctionne, c'est plutôt propre, je ne vois pas de gros problème pour le moment. Merci beaucoup pour la piste et la rédaction quasi-complète du script. Ça m'a aussi un peu forcé à comprendre…(j'ai dû passer 4 heures à corriger tel problème ou tel truc et à comprendre ceci-cela, mais c'est aussi le but général !).

              Bref, merci encore ! :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.