国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用ffmpeg解析mp4文件得到時(shí)長(zhǎng)、比特率、音視頻信息

這篇具有很好參考價(jià)值的文章主要介紹了用ffmpeg解析mp4文件得到時(shí)長(zhǎng)、比特率、音視頻信息。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

以下是使用C++語(yǔ)言調(diào)用FFmpeg獲取視頻流和音頻流信息的示例代碼:

#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>

extern "C" {
    #include <libavformat/avformat.h>
}

class MediaInfo {
public:
    std::string filename;
    double duration;
    int bitrate;
    std::vector<std::pair<int, int>> video_streams; // (width, height)
    std::vector<std::pair<int, int>> audio_streams; // (sample_rate, channels)

    MediaInfo(const std::string& filename_) : filename(filename_) {}
};

MediaInfo get_media_info(const std::string& filename) {
    int ret=0;
    MediaInfo info(filename);

    av_register_all();

    AVFormatContext* format_ctx = nullptr;
    ret=avformat_open_input(&format_ctx, filename.c_str(), nullptr, nullptr);
    if(ret < 0)
    {
        std::cout << "avformat_open_input error\n";
        return info;
    }
    avformat_find_stream_info(format_ctx, nullptr);

    info.duration = static_cast<double>(format_ctx->duration) / AV_TIME_BASE;
    info.bitrate = format_ctx->bit_rate;

    for (unsigned int i = 0; i < format_ctx->nb_streams; i++) {
        if (format_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
            int width = format_ctx->streams[i]->codecpar->width;
            int height = format_ctx->streams[i]->codecpar->height;
            info.video_streams.push_back({width, height});
        }
        else if (format_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
            int sample_rate = format_ctx->streams[i]->codecpar->sample_rate;
            int channels = format_ctx->streams[i]->codecpar->channels;
            info.audio_streams.push_back({sample_rate, channels});
        }
    }

    avformat_close_input(&format_ctx);

    return info;
}

// 測(cè)試
int main() {
    MediaInfo info = get_media_info("./example.mp4");

    std::cout << "文件名:" << info.filename << std::endl;
    std::cout << "時(shí)長(zhǎng):" << info.duration << "秒" << std::endl;
    std::cout << "比特率:" << info.bitrate << "bps" << std::endl;

    std::cout << "視頻流信息:" << std::endl;
    for (unsigned int i = 0; i < info.video_streams.size(); i++) {
        std::cout << "  分辨率:" << info.video_streams[i].first << "x" << info.video_streams[i].second << std::endl;
    }

    std::cout << "音頻流信息:" << std::endl;
    for (unsigned int i = 0; i < info.audio_streams.size(); i++) {
        std::cout << "  采樣率:" << info.audio_streams[i].first << "Hz"
                  << ", 聲道數(shù):" << info.audio_streams[i].second << std::endl;
    }

    return 0;
}

上述代碼通過(guò)AVFormatContext結(jié)構(gòu)體和FFmpeg庫(kù)函數(shù)avformat_open_input、avformat_find_stream_info等,獲取MP4文件的視頻流和音頻流信息,并將結(jié)果存儲(chǔ)到MediaInfo類中。在實(shí)際應(yīng)用中,可以將上述代碼封裝成一個(gè)函數(shù),方便地在程序中調(diào)用,達(dá)到自動(dòng)化處理多個(gè)視頻文件的目的。

編譯運(yùn)行文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-652304.html

book@ubuntu:~/Desktop/c++_study$ g++ -g -o test_ff test_ff.cpp -lavformat 
book@ubuntu:~/Desktop/c++_study$ ./test_ff 
文件名:./example.mp4
時(shí)長(zhǎng):5.888秒
比特率:434519bps
視頻流信息:
  分辨率:720x480
音頻流信息:
  采樣率:16000Hz, 聲道數(shù):1

到了這里,關(guān)于用ffmpeg解析mp4文件得到時(shí)長(zhǎng)、比特率、音視頻信息的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ffmpeg把RTSP流分段錄制成MP4,如果能把ffmpeg.exe改成ffmpeg.dll用,那音視頻開發(fā)的難度直接就降一個(gè)維度啊

    ffmpeg把RTSP流分段錄制成MP4,如果能把ffmpeg.exe改成ffmpeg.dll用,那音視頻開發(fā)的難度直接就降一個(gè)維度啊

    比如,原來(lái)我們要用ffmpeg錄一段RTSP視頻流轉(zhuǎn)成MP4,我們有兩種方案: 方案一:可以使用以下命令將rtsp流分段存儲(chǔ)為mp4文件 ffmpeg -i rtsp://example.com/stream -vcodec copy -acodec aac -f segment -segment_time 3600 -reset_timestamps 1 -strftime 1 output_%Y-%m-%d_%H-%M-%S.mp4 方案二:可以直接調(diào)用ffmpeg庫(kù)avcode

    2024年02月10日
    瀏覽(36)
  • 如何使用ffmpeg將MP4文件轉(zhuǎn)化為YUV文件?

    可以使用以下命令將 MP4 文件轉(zhuǎn)化為 YUV 文件: 其中, input.mp4 是輸入文件的文件名, output.yuv 是輸出文件的文件名。 需要注意的是,在使用這個(gè)命令之前,你需要在你的電腦上安裝 ffmpeg。如果沒(méi)有安裝,可以使用以下命令安裝: 如果你使用的是 Windows 系統(tǒng),可以到 ffmpeg 官網(wǎng)

    2024年02月15日
    瀏覽(40)
  • 第4課 FFmpeg讀取本地mp4文件并顯示

    第4課 FFmpeg讀取本地mp4文件并顯示

    在上節(jié)課,我們使用FFmpeg實(shí)現(xiàn)了一個(gè)最簡(jiǎn)單的rtmp播放器,它看起來(lái)工作正常。這節(jié)課,我們嘗試讓它來(lái)播放本地的mp4文件試試。 1.壓縮備份上節(jié)課工程文件夾為demo3.rar,并修改工程文件夾demo3為demo4,重要的事情再說(shuō)一遍:及時(shí)備份源文件并在原基礎(chǔ)上繼續(xù)迭代開發(fā)是一種好

    2024年02月03日
    瀏覽(28)
  • JavaScript音視頻,使用JavaScript如何在瀏覽器錄制電腦攝像頭畫面為MP4視頻文件并下載視頻文件到本地

    本章介紹使用JavaScript如何在瀏覽器錄制電腦攝像頭畫面為MP4視頻文件并下載視頻文件到本地。 1、使用navigator.mediaDevices.getUserMedia獲取攝像頭畫面 2、將獲取到的攝像頭畫面渲染到canvas畫板上 3、將canvas轉(zhuǎn)換為blob對(duì)象 4、通過(guò)document.createElement(‘a(chǎn)’)調(diào)用 href 方法獲取此鏈接并觸

    2024年02月02日
    瀏覽(31)
  • python統(tǒng)計(jì)mp4/avi視頻的時(shí)長(zhǎng)

    當(dāng)代碼中導(dǎo)入了特定的庫(kù),它會(huì)使得在代碼中可以使用該庫(kù)所提供的功能和工具。以下是導(dǎo)入的兩個(gè)庫(kù)及其作用的解釋: os(Operating System)是Python標(biāo)準(zhǔn)庫(kù)之一,提供了與操作系統(tǒng)交互的功能。它允許您在代碼中執(zhí)行各種與文件和目錄操作相關(guān)的任務(wù),例如創(chuàng)建、刪除、移動(dòng)文

    2024年02月14日
    瀏覽(21)
  • MP4文件格式解析

    MP4文件格式解析

    讀完本文你將收獲: 知道如何讀取一個(gè)mp4文件的基本信息。 知道如何從一個(gè)mp4文件中分離對(duì)應(yīng)的視頻數(shù)據(jù)或者音頻數(shù)據(jù)的基本原理。 知道播放一個(gè)mp4文件時(shí)seek到指定時(shí)間,如何在mp4文件中查找到對(duì)應(yīng)的媒體數(shù)據(jù)。 一個(gè) mp4 文件通常由音頻和視頻兩部分組成(當(dāng)然有些還包含

    2023年04月26日
    瀏覽(17)
  • java獲取一段視頻/mp4的時(shí)長(zhǎng)

    引言 在日常開發(fā)中,經(jīng)常會(huì)遇到產(chǎn)品經(jīng)理提出一個(gè)需求“上傳視頻”,而且還得顯示出視頻的播放時(shí)長(zhǎng),我們直接上最簡(jiǎn)單的代碼,必須是最簡(jiǎn)單,多一句啰嗦都不準(zhǔn)點(diǎn)贊。 How to do 1.提前引入包 2.邏輯實(shí)現(xiàn)

    2024年01月24日
    瀏覽(21)
  • 使用FFMPEG分離mp4/flv文件中的264視頻和aac音頻

    使用FFMPEG分離mp4/flv文件中的264視頻和aac音頻

    ffmpeg 4.4 一個(gè)MP4或flv格式的視頻文件 大致分為以下幾個(gè)簡(jiǎn)單步驟: 1.使用avformat_open_input 函數(shù)打開文件并初始化結(jié)構(gòu)AVFormatContext 2.查找是否存在音頻和視頻信息 3.構(gòu)建一個(gè)h264_mp4toannexb比特流的過(guò)濾器,用來(lái)給視頻avpaket包添加頭信息 4.打開2個(gè)輸出文件(音頻, 視頻) 5.循環(huán)讀

    2024年02月15日
    瀏覽(18)
  • 使用FFMPEG庫(kù)封裝264視頻和acc音頻數(shù)據(jù)到MP4文件中

    使用FFMPEG庫(kù)封裝264視頻和acc音頻數(shù)據(jù)到MP4文件中

    ffmepeg 4.4 一段H264的視頻文件 一段acc格式的音頻文件 1.使用avformat_open_input分別打開視頻和音頻文件,初始化其AVFormatContext,使用avformat_find_stream_info獲取編碼器基本信息 2.使用avformat_alloc_output_context2初始化輸出的AVFormatContext結(jié)構(gòu) 3.使用函數(shù)avformat_new_stream給輸出的AVFormatContext結(jié)

    2024年02月11日
    瀏覽(20)
  • Qt/C++音視頻開發(fā)69-保存監(jiān)控pcm音頻數(shù)據(jù)到mp4文件/監(jiān)控錄像/錄像存儲(chǔ)和回放/264/265/aac/pcm等

    用ffmpeg做音視頻保存到mp4文件,都會(huì)遇到一個(gè)問(wèn)題,尤其是在視頻監(jiān)控行業(yè),就是監(jiān)控?cái)z像頭設(shè)置的音頻是PCM/G711A/G711U,解碼后對(duì)應(yīng)的格式是pcm_s16be/pcm_alaw/pcm_mulaw,將這個(gè)原始的音頻流保存到mp4文件是會(huì)報(bào)錯(cuò)的,在調(diào)用avformat_write_header寫文件頭的時(shí)候提示(-22) Invalid argument,

    2024年04月11日
    瀏覽(37)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包