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++?
Répondre
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
Avez-vous lu la question? La question est sur le point de le faire en C++. Pas avec la ligne de commande. –
@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
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. –
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.
Merci, mais je pensais qu'il y a la fonction (f (nom de fichier de la chaîne) -> double) permet d'obtenir cette information. –
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
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. –