web-dev-qa-db-fra.com

Comment vérifier combien de temps une vidéo (mp4) utilise le shell?

J'ai besoin de télécharger tous les fichiers mp4 dans un répertoire d'une durée> 4 minutes à l'aide du shell. Je ne trouve aucun script permettant de vérifier la durée d'une vidéo. Est-ce que quelqu'un a une idée de comment faire ça?

Merci beaucoup!

16
Thomas

Cela vous donnera la longueur d'une vidéo.

ffmpeg -i myvideo 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
23
per

Mediainfo est un outil rapide pour cela:

$ mediainfo --Inform="Video;%Duration%"  [inputfile]

Vous pouvez trouver plus d'options dans ne réponse plus complète .

Dans mes tests, ffprobe prend 0,3 seconde et mediainfo prend 0,09 seconde.

7
qubodup

Vous pouvez essayer d'utiliser la commande avconv ..

Tout d'abord, vous devriez installer:

Install via the software center

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

Maintenant, vous pouvez 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 aidera!

5
Roman Raguet

exiftool (initialement destiné à la lecture des métadonnées de l'appareil photo à partir de fichiers image, mais développé ultérieurement pour lire et écrire métadonnées de presque n’importe quel type de fichier média est très pratique à utiliser pour cela. Exécutez-le avec:

exiftool FILE.mp4 | grep Duration

Vous aurez probablement besoin d’installer d’abord exiftool, mais vous le ferez facilement à l’aide de la commande suivante (sur Debian et ses 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 bonnes aussi. :)

4
zrajm

Encore plus simple:

avprobe file.mp4 -show_format_entry duration
2

En ajoutant à 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 de | sort pour que les fichiers soient triés en fonction de leur longueur.

vous pouvez ajouter ceci à .bashrc ou .bash_aliases afin de pouvoir 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'
1
mcnesium

ffprobe est une solution plus élégante que ffmpeg qui génère une erreur si le chemin de sortie n'est pas indiqué.

ffprobe video.mp4 2>&1 | grep -E '^ +Duration' | cut -d':' -f2- | cut -d, -f1
1
Ondra Žižka

Comme vous pouvez le constater, il existe de nombreuses façons d’y parvenir. ffprobe mediafile -show_entries format=format=duration 2>&1 | grep DURATIONmediafile est le nom du fichier, fournira une sortie similaire à celle ci-dessous. Le premier étant la durée du premier flux (typiquement vidéo) et le second fournissant la durée du second flux (typiquement audio)

  DURATION        : 00:21:40.132000000
  DURATION        : 00:21:40.062000000
0
Elder Geek

Si vous voulez voir la durée de certaines vidéos dans un répertoire, vous pouvez utiliser la commande suivante

exiftool * | grep ^ Durée | cut -d '' -f 26

0
meisamhakimi