2017-03-10 3 views
-8

J'ai un fichier vidéo. Comment puis-je obtenir fps pour cette vidéo avec ffmpeg en C++? Tapez le code complet, s'il vous plaît.Comment obtenir fps pour la vidéo avec ffmpeg en C++?

+7

Pas un service d'écriture de code; essayez la tâche en premier, postez vos problèmes (avec des exemples de ce que vous avez déjà essayé) – ocelot

+2

Vous devriez essayer par vous-même puis posez votre question avec le code que vous avez fait. Nous ne ferons pas tout le travail pour vous. –

Répondre

-2

Vous pourriez exécuter ffmpeg.exe comme ceci ffmpeg -i filename et il sortirait le framerate s'il n'est pas variable.

Exemple: Input #0, matroska,webm, from 'somerandom.mkv': Duration: 01:16:10.90, start: 0.000000, bitrate: N/A Stream #0.0: Video: h264 (High), yuv420p, 720x344 [PAR 1:1 DAR 90:43], 25 fps, 25 tbr, 1k tbn, 50 tbc (default) Stream #0.1: Audio: aac, 48000 Hz, stereo, s16 (default)

Cette vidéo a un fps de 25

Pour exécuter un programme que vous pouvez utiliser la réponse dans https://stackoverflow.com/a/17703834/58553

Source: https://askubuntu.com/questions/110264/how-to-find-frames-per-second-of-any-video-file

+1

Avez-vous lu la question? La question est sur le point de le faire en C++. Pas avec la ligne de commande. –

+0

@GabrieldeGrimouard donc vous ne pouvez pas exécuter un programme à partir de C++, nous savons tous les deux que vous pouvez et pourquoi diable ne serait-ce pas une solution valable? (c'est sûr que ce n'est pas le meilleur mais c'est une solution) – Peter

+0

Voilà une réponse qui n'est pas liée à la question. S'il veut faire une application croisée compilée sur windows, linux, mac, ce sera vraiment difficile à faire. De plus, envoyer une commande comme celle-ci dans votre code est un énorme problème de sécurité. Donc non votre réponse n'est pas bonne car 1/ne répond pas à la question, 2/si cela amène d'énormes problèmes dans le code. –

0

C'est un simple programme que j'ai écrit pour vider les informations vidéo à la console:

#include <libavformat/avformat.h> 

int main(int argc, const char *argv[]) 
{ 
    if (argc < 2) 
    { 
     printf("No video file.\n"); 
     return -1; 
    } 

    av_register_all(); 

    AVFormatContext *pFormatCtx = NULL; 

    //open video file 
    if (avformat_open_input(&pFormatCtx, argv[1], NULL, NULL) != 0) 
    return -1; 

    //get stream info 
    if (avformat_find_stream_info(pFormatCtx, NULL) < 0) 
     return -1; 

    av_dump_format(pFormatCtx, 0, argv[1], 0); 
} 

Compile et l'exécuter, la sortie ressemble à:

[email protected]:~/Desktop/video-info-dump$ ./vdump a.mp4 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'a.mp4': 
    Metadata: 
    major_brand  : isom 
    minor_version : 1 
    compatible_brands: isom 
    creation_time : 2014-04-23 06:18:02 
    encoder   : FormatFactory : www.pcfreetime.com 
    Duration: 00:07:20.60, start: 0.000000, bitrate: 1354 kb/s 
    Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v/0x7634706D), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 1228 kb/s, 24 fps, 24 tbr, 24k tbn, 24 tbc (default) 
    Metadata: 
     creation_time : 2014-04-23 06:18:02 
     handler_name : video 
    Stream #0:1(und): Audio: aac (mp4a/0x6134706D), 44100 Hz, stereo, fltp, 123 kb/s (default) 
    Metadata: 
     creation_time : 2014-04-23 06:18:25 
     handler_name : sound 

Recommander a very good tutorial for ffmpeg and SDL.

+0

Merci, mais je pensais qu'il y a la fonction (f (nom de fichier de la chaîne) -> double) permet d'obtenir cette information. –