乐闻世界logo
搜索文章和话题

How to use libavcodec/ffmpeg to find duration of video file

1个答案

1

When using libavcodec/ffmpeg to find the duration of video files, you can achieve this through the following steps:

Step 1: Initialize the FFmpeg Library

First, verify that your project correctly includes the FFmpeg library and header files. Then, initialize the FFmpeg library, which typically involves registering all codecs and devices, and initializing network components if required.

c
av_register_all(); avformat_network_init();

Step 2: Open the Video File

Use the avformat_open_input() function to open the video file. This function reads the file header and identifies the streams (e.g., video, audio) contained within the file.

c
AVFormatContext* fmt_ctx = NULL; if (avformat_open_input(&fmt_ctx, "filename.mp4", NULL, NULL) < 0) { fprintf(stderr, "Cannot open input file\n"); return -1; }

Step 3: Read Stream Information

Use the avformat_find_stream_info() function to retrieve information about the streams in the file. This step is essential for identifying the video stream and calculating the duration.

c
if (avformat_find_stream_info(fmt_ctx, NULL) < 0) { fprintf(stderr, "Cannot find stream information\n"); return -1; }

Step 4: Determine the Video Stream Duration

FFmpeg stores the video file's duration in the duration field of the AVFormatContext structure. This value is expressed in units of AV_TIME_BASE, which is typically microseconds. To convert it to seconds:

c
int64_t duration = fmt_ctx->duration; if (duration != AV_NOPTS_VALUE) { int hours, mins, secs; secs = duration / AV_TIME_BASE; mins = secs / 60; secs %= 60; hours = mins / 60; mins %= 60; printf("Total duration: %02d:%02d:%02d\n", hours, mins, secs); } else { printf("Duration not available\n"); }

Step 5: Cleanup Resources

After retrieving the necessary information, clean up allocated resources to prevent memory leaks.

c
avformat_close_input(&fmt_ctx); avformat_network_deinit();

Example Application Scenario

Suppose you are developing a video editing application where users need to know the total duration of loaded video files to plan their editing workflow. Using the above code, you can efficiently provide this information to users, enhancing their experience.

This process effectively enables you to leverage the FFmpeg library for finding video file durations and integrating it into practical projects.

2024年8月15日 00:21 回复

你的答案