Le frein à main est un outil de compression vidéo génial, mais il ne semble pas conserver le temps de capture d'origine après la compression d'une vidéo. Une idée de comment résoudre ce problème?
Le frein à main est un outil de compression vidéo génial, mais il ne semble pas conserver le temps de capture d'origine après la compression d'une vidéo. Une idée de comment résoudre ce problème?
Réponses:
Vous pouvez copier les métadonnées existantes d'un fichier à un autre sans avoir besoin de recoder la vidéo à l'aide de FFmpeg . Cela prend essentiellement une seconde. Pour ce faire, supposons trois fichiers:
in.mp4
- le fichier d'origine avant conversionout.mp4
- le fichier après la conversion du frein à mainfixed.mp4
- le fichier avec les métadonnées "corrigées"La commande FFmpeg pour copier l'enregistrement de métadonnées complet dans le nouveau fichier serait alors:
ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4
Pour le décomposer, cela fait ce qui suit:
in.mp4
et out.mp4
), auxquels sont attribués les ID 0 et 1, respectivement.-map 1
), nous prenons donc les flux binaires déjà convertis-map_metadata 0
)-c copy
) pour copier tous les flux binaires au lieu de ré-encoder la vidéo.Après cela, vous pouvez renommer évidemment fixed.mp4
à out.mp4
.
À titre d'exemple, voici une partie de l'enregistrement de métadonnées de mon fichier d'origine:
$ mediainfo in.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19
Voici le fichier après la conversion du frein à main:
$ mediainfo out.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-12-24 11:39:35
Voici le fichier final après avoir mappé les métadonnées:
$ ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4
[…]
$ mediainfo fixed.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19
En fait, vous n'avez pas vraiment besoin d'utiliser le frein à main si vous pouvez utiliser FFmpeg, sur lequel Handbrake s'appuie de toute façon. Dans le cas le plus simple, vous pouvez effectuer votre conversion comme ceci:
ffmpeg -i in.mp4 -c:v libx264 -crf 23 -c:a aac -map_metadata 0 out.mp4
Cela convertira l'entrée avec l'encodeur x264 et l'audio AAC en un fichier de sortie, en copiant les métadonnées d'origine. Afin de modifier la qualité de la sortie, vous pouvez:
Lisez le guide d'encodage x264 sur le wiki FFmpeg pour en savoir plus.
Unknown encoder 'libfaac'
erreur
-c:a aac -strict experimental
plutôt.
Malheureusement, il semble que le frein à main ne puisse pas le faire seul, mais de la même manière que dans l'exemple ffmpeg, les horodatages peuvent être copiés à partir de l'original après compression en utilisant la touch
commande unix:
touch -r MVI_1234.MOV compressed_MVI_1234.m4v
cela définira l'horodatage du fichier compressé sur le même que le fichier de référence donné.
J'ai trouvé un moyen plus facile de le faire, en utilisant un autre logiciel appelé Adapter
: http://www.macroplant.com/adapter/
Il n'a pas tous les paramètres avancés comme HandBrake mais il fait le travail (en utilisant également ffmpeg) et conserve les métadonnées dont j'ai besoin.
J'utilise macOS Yosemite et HandBrakeBatch - utilisez-le pour convertir des fichiers, mais cliquez sur la case "conserver les dates de création et de modification des fichiers" dans le menu "Préférences".
Ensuite, j'importe les vidéos dans Lightroom 5, mais elles ne conservent toujours pas les dates de création. Mais, plus important encore, les fichiers sont affichés dans le Finder avec la date de création correcte. Je les ai donc tous sélectionnés dans la bibliothèque Lightroom → Métadonnées (colonne de dialogue de droite) → Heure de capture → Changer la date de création du fichier → Tout changer.
J'ai eu 850 vieilles vidéos de famille - j'ai dû faire ce processus par lots de 100. Frein à main se bloque avec beaucoup de fichiers.
J'ai fait un script bash qui peut transférer par lots les métadonnées, en utilisant touch
comme suggéré ci-dessus. Pour que cela fonctionne, vous devez avoir vos fichiers originaux et convertis dans des répertoires séparés, chacun avec le même nombre de fichiers (les répertoires ne doivent avoir que les fichiers vidéo, car d'autres fichiers / répertoires interféreront) et dans le même ordre. Ensuite, il copie simplement les métadonnées et tout est prêt. Le script répertorie toutes les paires de fichiers afin que vous puissiez vérifier les erreurs à la fin si vous le souhaitez.
Le code n'est peut-être pas le plus soigné car c'était mon premier bon script bash, mais il a été assez rapide et stable pour moi, alors voici:
#!/bin/bash
#Sets IFS to \n to allow for filenames with spaces
IFS=$'\n'
#Source directory and converted direcotry
dir1=$1
dir2=$2
#Array with source filepaths
srcf=()
#Array with converted filepaths
cnvf=()
#Adds filepaths from the source directory to srcf array
for file in $(ls -1 $dir1); do
srcf+=("$dir1/$file")
done
#Adds filepaths from the converted directory to cnvf array
for file in $(ls -1 $dir2); do
cnvf+=("$dir2/$file")
done
#Checks if source and convert folders have the same number of files
if [ ${#srcf[*]} -eq ${#cnvf[*]} ]
then
#Counter variable
fnum=0
#Loops through the arrays and runs touch command on pairs of files to transfer the metadata
while [ $fnum -lt ${#srcf[*]} ]; do
echo $fnum
echo ${srcf[$fnum]} ${cnvf[$fnum]}
touch -r ${srcf[$fnum]} ${cnvf[$fnum]}
((fnum++))
done
else
echo "The provided paths do not have the same number of files. Both paths must have the same number of files in the same order."
fi
Pour exécuter do: sudo bash script.sh /sourcedir /converteddir
Si vous voulez dire le temps de modification au niveau du fichier, j'ai eu le même problème et j'ai pu le récupérer avec exiftool .
exiftool -tagsFromFile input.mp4 -extractEmbedded -all:all -FileModifyDate -overwrite_original output.mp4
Cela prend les métadonnées et à FileModifyDate
partir input.mp4
et la copie output.mp4
.
Pour automatiser cela car j'avais un grand nombre de fichiers à transcoder, j'ai créé un outil appelé Shrinkwrap qui transcode d'abord avec FFmpeg (je me suis éloigné de HandBrake car il fallait conserver plus de métadonnées), puis récupère l'horodatage de modification avec exiftool.
Après beaucoup de recherches, j'ai surtout abandonné l'utilisation de vieux fichiers vidéo avec une date correcte créée / modifiée pour écraser la date créée / modifiée de mes nouveaux fichiers vidéo compressés par Handbrake. Étant donné que la plupart de mes vidéos ont la date / l'heure dans le nom de fichier, j'ai expérimenté et obtenu deux méthodes pour travailler. La première et la meilleure consiste à utiliser la méthode d'horodatage Advanced Renamer, qui PEUT changer la date de fichier modifiée, créée et accessible, pas seulement le nom du fichier lui-même. https://www.advancedrenamer.com/download .
J'ai également trouvé un script PowerShell https://www.michaelmiklis.de/set-creation-and-modification-date-from-filename/ qui pourrait être adapté par un programmeur pour d'autres formats de nom de fichier / date. Dans son état actuel, cela ne fonctionne que si le nom de fichier est structuré exactement comme dans cet exemple.
Heureusement, mon nombre de vidéos sans la date de modification dans le nom de fichier est suffisamment faible. Je peux les modifier manuellement, cela ne prendra pas trop de temps.
J'ai essayé d'utiliser ffmpeg, mais sa commande map_metadata ne modifie que les données à l'intérieur du fichier, pas la date de modification, créée du fichier lui-même. Ce genre de métadonnées internes Handbrake fait déjà très bien avec de toute façon.
Le programme MyFFmpeg le fait très bien. Dans ses options, il est possible de conserver la date de création / modification d'origine du fichier source .
Je cherchais cela parce que j'ai mes vidéos personnelles sur un serveur Plex et les fichiers sont organisés par date de création, ce qui est très utile si vous voulez voir des choses d'une année particulière.
Malheureusement, ce n'est pas une option gratuite, coûte actuellement 20 euros ou environ 21 US. Ils ont un essai pour 10 utilisations avant de devoir acheter une licence. Surpris certaines des interfaces graphiques ffmpeg gratuites n'ont pas ou ajoutent cette option.
J'essaie de maintenir la date de création pendant que je compresse mes vidéos GoPro MP4 incroyablement grandes en H.264.
J'ai trouvé le programme HandBrakeBatch . C'est exactement ce dont j'ai besoin pour compresser plus de 1000 fichiers en une seule fois, tout en conservant la date de création (métadonnées).
Je n'ai trouvé aucun autre programme capable de le faire. Essayé avec FFmpeg, HandBrake et Wonderful Video Converter, mais non.