J'ai besoin de télécharger ftp tous les fichiers mp4 dans un répertoire d'une durée> 4 minutes en utilisant le shell. Je ne trouve aucun script pour vérifier la durée d'une vidéo. Quelqu'un sait-il comment faire cela?
Merci beaucoup!
J'ai besoin de télécharger ftp tous les fichiers mp4 dans un répertoire d'une durée> 4 minutes en utilisant le shell. Je ne trouve aucun script pour vérifier la durée d'une vidéo. Quelqu'un sait-il comment faire cela?
Merci beaucoup!
Réponses:
Cela vous donnera la durée d'une vidéo.
ffmpeg -i myvideo 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
Mediainfo est un outil rapide à cet effet:
$ mediainfo --Inform="Video;%Duration%" [inputfile]
Vous pouvez trouver plus d'options dans une réponse plus approfondie .
Dans mes tests, ffprobe
prend 0,3 seconde et mediainfo
0,09 seconde.
mediainfo --Inform="Video;%Duration/String%" [inputfile]
... qui vous procurerait quelque chose comme 43 min 50s
Vous pouvez essayer d'utiliser la commande avconv ..
Vous devez d'abord installer:
si vous tapez la commande avec l'indicateur -i, vous obtiendrez des informations sur la vidéo:
avconv -i test.mp4
Dans la sortie, il y a un champ appelé Durée
avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
built on Nov 6 2012 16:51:33 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
Duration: 00:58:28.05, start: 0.000000, bitrate: 888 kb/s
Stream #0.0(eng): Video: h264 (High), yuv420p, 720x404, 748 kb/s, 25 fps, 25 tbr, 20k tbn, 50 tbc
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
Vous pouvez maintenant utiliser la commande pour obtenir uniquement la valeur du champ Durée
Type:
avconv -i file.mp4 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//
Dans mon cas, le résultat est:
00:58:28.05
58 minutes et 28,05 secondes.
J'espère que cela vous sera utile!
avprobe
- pas besoin de la -i
, mais cela fonctionne exactement de la même manière. Ou ffprobe
pour la réponse de @ per.
exiftool
(initialement destiné à la lecture des métadonnées de l'appareil photo à partir de fichiers image, mais développé plus tard pour lire et écrire des métadonnées à partir de presque n'importe quel type de fichier multimédia) est très pratique à utiliser pour cela. Exécutez-le avec:
exiftool FILE.mp4 | grep Duration
Vous devrez probablement installer d' exiftool
abord, mais cela se fait facilement avec la commande suivante (sur Debian et les dérivés comme Ubuntu, etc.):
apt install libimage-exiftool-perl
Bien sûr, cette réponse n'est qu'une autre alternative. Beaucoup d'autres réponses sont également bonnes. :)
Encore plus simple:
avprobe file.mp4 -show_format_entry duration
Ajout à solution pers , cela peut être utilisé sur un répertoire entier:
for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,// | tr -d "\n" && echo " $f"; done
il peut même être étendu par | sort
pour trier les fichiers selon leur longueur.
vous pouvez l'ajouter à .bashrc
ou .bash_aliases
pour pouvoir le faire lsvlength | sort
sur un répertoire
alias lsvlength='for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,// | tr -d "\n" && echo " $f"; done'
ffprobe
est une solution plus élégante que celle ffmpeg
qui génère une erreur si elle ne reçoit pas le chemin de sortie.
ffprobe video.mp4 2>&1 | grep -E '^ +Duration' | cut -d':' -f2- | cut -d, -f1
Si vous souhaitez voir la durée de certaines vidéos dans un répertoire, vous pouvez utiliser la commande suivante
exiftool * | grep ^ Durée | coupe -d '' -f 26
grep
et autres. Tout simplement exiftool -T -Duration *.mkv
(ou n'importe quel modèle de fichier)
Comme vous pouvez le voir, il existe de nombreuses façons d'y parvenir.
ffprobe mediafile -show_entries format=format=duration 2>&1 | grep DURATION
où mediafile est le nom du fichier, fournira une sortie similaire à celle ci-dessous. Le premier étant la durée du premier flux (généralement vidéo) et le second fournissant la durée du second flux (généralement audio)
DURATION : 00:21:40.132000000
DURATION : 00:21:40.062000000