Comment utiliser ffprobe pour obtenir certaines informations sur les fichiers mp4 / h.264

13

Je ne suis qu'un développeur PHP modeste qui a été chargé de récupérer des informations de base sur des centaines de milliers de fichiers vidéo. J'ai eu un peu de chance en utilisant ffmpeg extraire le video bitrate, video width, video height, durationet aspect ratiod'eux, mais avec un taux d'erreur d'environ 5%, cela me laisse toujours avec un très grand nombre de fichiers que je ne sais pas comment faire face. Les vidéos sont lues, mais la quantité massive de données retournées par ffmpeg m'a déconcerté quant à la façon d'analyser le XML retourné pour trouver ce dont j'ai besoin avec toutes les conditions que je semble rencontrer. (Les fichiers sont une collection des 15 dernières années environ, certains récemment encodés, d'autres convertis il y a des années)

ffprobeQuoi qu'il en soit , j'ai trouvé l'utilisation suivante de pour obtenir la durée, et j'espérais que quelqu'un ici qui comprend les complexités de l'utilisation de ffmpeg & ffprobe serait assez aimable pour m'aider à trouver les autres valeurs dont j'ai besoin d'une manière plus simple que la code fou que je me retrouve à créer pour gravir tous les résultats de ffmpeg.

ffprobe -i "video.mp4" -show_entries format=duration -v quiet -of csv="p=0"

Merci beaucoup d'avance.

CLARIFICATION:

Je devrais ajouter qu'avec la cmd ci-dessous, je peux "voir" ce dont j'ai besoin, mais je ne comprends pas comment extraire ce dont j'ai besoin, par exemple récupérer le bitrate VIDEO, et supprimer / ignorer le bitrate AUDIO, ou déterminer lequel des 2 différentes durées à utiliser (durées audio / vidéo?)

C:\>ffprobe -v error -show_entries stream=width,height,bit_rate,duration -of default=noprint_wrappers=1 input.mp4

duration=1712.000000
bit_rate=64000
width=320
height=240
duration=1711.946113
bit_rate=359827
duration=1712.000000
bit_rate=N/A
duration=1712.000000
bit_rate=N/A
PIB
la source

Réponses:

17

Si vous souhaitez uniquement utiliser les informations du premier flux vidéo -select_streams v:0:

ffprobe -v error -select_streams v:0 -show_entries stream=width,height,duration,bit_rate -of default=noprint_wrappers=1 input.mp4

Exemple de sortie:

width=640
height=480
duration=10.000000
bit_rate=942704
llogan
la source
Merci beaucoup pour l'aide .... J'ai dû accepter l'autre réponse uniquement parce que j'en ai été alerté en premier, et ça a fait l'affaire ..
GDP
@GDP Veuillez considérer: notifié en premier dans ce cas, car c'est la dernière réponse.
p2 ou
@poor Je prends le point du représentant très au sérieux, mais cette réponse n'était pas sur mon écran pour accepter jusqu'à ce que j'accepte l'autre, puis il est apparu, donc les excuses immédiates. Désolé tout le monde ... ne voulait vraiment pas offenser.
PIB
9

Depuis https://trac.ffmpeg.org/wiki/FFprobeTips

Si vous souhaitez obtenir le bit_rate du 1er flux vidéo, vous pouvez utiliser:

ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 input.mp4

-select_steams v:0sélectionne le premier flux vidéo et :nokey=1donne la valeur sans la clé. Vous pouvez également extraire les informations en les redirigeant vers grep, mais je ne sais pas si elles sont disponibles sur votre système.

ffprobe -v error -show_entries stream=width,height,bit_rate,duration -of default=noprint_wrappers=1 input.mp4 | grep -oP "(?<=bit_rate\=)[0-9]+"

J'espère que cela t'aides!

moorej
la source
"piping it to grep" ... sonne comme quelque chose que j'aurais pu faire en tant qu'adolescent, lol ... MERCI pour l'aide!
PIB
Merci @GDP mais LordNeckbeard's est la réponse que vous devriez probablement accepter car elle a été publiée en premier
moorej