J'ai un fichier vidéo et je veux obtenir le nombre d'images vidéo qu'il contient. Je peux utiliser ffmpeg
pour obtenir la longueur de la vidéo et du FPS. Cependant, je ne vois rien d’évident pour le nombre total de cadres.
En théorie, on devrait pouvoir multiplier la longueur (en secondes) par le FPS pour obtenir le nombre d'images, mais dans ce cas, la longueur (34,43 secondes) et le nombre d'images par seconde (29,97 ips) donnent un nombre non entier, ce qui me rend pense que je fais quelque chose de mal.
Je dois pouvoir le faire en ligne de commande de manière totalement automatisée et non graphique. J'ai également besoin que cela soit assez exact et non une estimation (si c'est même possible avec des fichiers vidéo)
J'ai essayé d'utiliser tcprobe
sur certains fichiers. Cela fonctionne pour certains fichiers AVI, mais pour certains fichiers VOB, la sortie de tcprobe n'a pas le nombre d'images. Je reçois cette sortie:
[tcprobe] MPEG program stream (PS)
[tcprobe] summary for myfile.vob, (*) = not default, 0 = not detected
import frame size: -g 720x480 [720x576] (*)
aspect ratio: 4:3 (*)
frame rate: -f 29.970 [25.000] frc=4 (*)
PTS=2199.3972, frame_time=33ms bitrate=7000 kbps
audio track: -a 0 [0] -e 48000,16,5 [48000,16,2] -n 0x2000 [0x2000] (*)
PTS=2199.2763, bitrate=192 kbps
-D 3 --av_fine_ms 20 (frames & ms) [0] [0]
Réponses:
C'est horrible et stupide et lent, mais semble fonctionner:
Cela fonctionnera également sur les fichiers tronqués et les flux bruts (c’est pourquoi vous n’obtenez rien pour les fichiers .vob)
la source
| tr ^M '\n'
et|tail -n 1
. En outre, aucun espace aprèsframes=
n'échoue. (Peut-être que quelque chose a changé au cours des quatre dernières années.)ffprobe
peut être utilisé pour obtenir des informations sur un fichier multimédia:Vous obtiendrez des détails sur le flux:
Rechercher
nb_frames
avecgrep
:Cela fonctionne pour avi, mp4, etc. Pour certains conteneurs, il n'affiche pas de valeur valide, par exemple, mpeg.
Dans ce cas, cela fonctionne
ffprobe -show_packets a.mpg 2>/dev/null | grep video | wc -l
la source
J'ai posté ceci sur une autre question . En utilisant l'
tcprobe
outil (à partir dutranscode
package), le nombre d'images est inclus dans les informations. Utilisez le-i
commutateur pour obtenir un vidage d’informations à partir du fichier:Notez que le nombre d'images est donné sur deux lignes ici (2ème ligne de sortie et dernière ligne de sortie).
la source
J'ai trouvé que cela
mediainfo --fullscan inputfile | grep "Frame count"
fonctionne bien pour la plupart des fichiers.Les systèmes Debian peuvent l’installer avec
apt-get install mediainfo
Si vous obtenez 2 lignes plutôt que l'une des sorties, la première ligne est la piste vidéo et la deuxième ligne est la piste audio. Il semble que cela se produise sur des fichiers avec de l’audio à débit binaire variable.
Testé sur les échantillons .mkv, .m4v, .mp4, flv, vob et .avi à la date de l'édition.
Sources: Comment récupérer des informations sur les fichiers vidéo à partir de la ligne de commande sous Linux? et tester sous les goûts Ubuntu.
Vous pouvez trouver mediainfo disponible pour votre système d'exploitation ici.
la source
Additionnez la durée. Pourrait être amateur avec sed / awk et ce qui ne l'est pas.
D'après nos tests, je peux dire que pour l'instant, il s'est révélé le meilleur, le plus fiable. Vous obtenez un compte rendu précis et une durée exacte. Même avec un framerate variable auquel tous les autres outils, comme mediainfo, semblent aller gaga.
la source
J'ai constaté que le nombre d'images est en réalité le double de la durée en fps * (je ne sais pas pourquoi, je serais heureux de le savoir).
Dans un de mes scripts, j'ai:
Et oui, pour une raison quelconque, je dois en obtenir la partie entière. Cela n’a aucun sens, mais ce script a toujours réussi à convertir mes vidéos correctement jusqu’à présent.
la source
tcprobe
sortie dans ma réponse donne le nombre d'images comme exactement secondes * fps (arrondi supérieur). Je suppose que vous voyez une bizarrerie de ffmpeg. avez-vous essayé d'analyser le fichier avec d'autres outils pour voir s'ils affichent le même nombre d'images?seconds*fps=1001.59
ettcprobe=1002
. Alors évidemment,tcprobe
me dit que je n'ai pas besoin de multiplier par deux. Pourquoi alors ffmpeg me donne-t-il un nombre deux fois plus grand dans les journaux lors de la conversion?Testé sur Ubuntu.
melt
- melt était conçu comme un outil de test pour le framework MLT, mais c'est aussi un puissant éditeur vidéo multipiste orienté ligne de commande. Il pourrait également être utilisé comme lecteur multimédia minimaliste pour les fichiers audio et vidéo.-consumer
id [: arg] [nom = valeur] *Définir le consommateur (récepteur)
xml
- Définir le consommateur (récepteur) sur une sortie au format XML<property name="length">nnnn</property>
- montre le nombre d'images, oùnnnn
est remplacé par un nombre entier égal au nombre d'imagesSi vous n’avez pas fondu, vous pouvez l’installer sur Ubuntu et d’autres systèmes basés sur Debian avec
sudo apt-get install melt
la source
mediainfo -fullscan filename
.Directement avec
mediainfo
, pas de grep, pas d'attente, pas de rien:Pour d'autres informations, voir
mediainfo --info-parameters
la source
Vous pouvez le faire en ajoutant et en multipliant les valeurs que vous obtenez de ffprobe.
Remarque: ffprobe fait partie de libav (avconv) - la version linux de ffmpeg.
Lorsque vous faites cela, vous obtiendrez le nombre d'images par seconde et la durée du clip.
Convertissez la durée du clip en secondes et multipliez cette valeur par le nombre d'images par seconde.
N'oubliez pas d'arrondir le nombre au plus proche.
la source
ffprobe
n'est pas disponible, mais il y a quelque chose appeléavprobe
danslibav-tools
(qui fournit égalementavconv
). Mais à mes côtés, il n’imprime aucun nombre d’images, du moins pas pour les formats que j’ai essayés. Il imprime juste, ce qui estavprobe -i
imprimé aussi, et ce n’est malheureusement que quelques petits détails sur le format. Même avec-v debug
cela, il ne me dit que quelques propriétés intéressantes de mon matériel et de mes logiciels installés, mais pas une seule information intéressante sur le fichier / flux à analyser. Cela cache peut-être certaines des myriades d’options disponibles. Qui sait?ffmpeg
en a pas dans les dépôts officiels. Le lien que vous avez correctement indiqué le dit: FFmpeg est revenu dans Ubuntu 15.04 "Vivid Vervet". . Cependant, la situation a maintenant changé et 16.04 LTS est sorti.linux
rubis
la source
Meilleure méthode: (Directe en calculant les bons paramètres, confirmée par ffmpeg)
Cmd ->
Résultat ->
Calcul ->
Preuve ->
Ici
Sortie
la source