首页 > 其他分享 >ffmpeg里的时间计算和转换

ffmpeg里的时间计算和转换

时间:2024-05-26 19:11:13浏览次数:17  
标签:转换 ffmpeg fCtx packet 计算 av NULL inStream log

main.c

#include "libavutil/log.h"
#include "libavformat/avformat.h"
#include "libavutil/avutil.h"
#include "libavcodec/avcodec.h"

int main(int argc, char *argv[]) {
    av_log_set_level(AV_LOG_DEBUG);
    if (argc < 2) {
        av_log(NULL, AV_LOG_ERROR, "Usage: %s inputFile\n", argv[0]);
        return -1;
    }
    const char *inputFile = argv[1];
    AVFormatContext *fCtx = NULL;
    avformat_open_input(&fCtx, inputFile, NULL, NULL);
    avformat_find_stream_info(fCtx, NULL);
    av_dump_format(fCtx, 0, inputFile, 0);
    av_log(NULL, AV_LOG_INFO, "input file duration:%ld us,%f s\n", fCtx->duration,
           fCtx->duration * av_q2d(AV_TIME_BASE_Q));
    AVRational videoTimeBase;
    AVRational audioTimeBase;
    for (int i = 0; i < fCtx->nb_streams; i++) {
        AVStream *inStream = fCtx->streams[i];
        if (inStream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
            videoTimeBase = inStream->time_base;
            av_log(NULL, AV_LOG_INFO, "video time base:num=%d,den=%d\n", videoTimeBase.num, videoTimeBase.den);
        } else if (inStream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
            audioTimeBase = inStream->time_base;
            av_log(NULL, AV_LOG_INFO, "audio time base:num=%d,den=%d\n", audioTimeBase.num, audioTimeBase.den);
        }
    }
    AVPacket *packet = av_packet_alloc();
    while (av_read_frame(fCtx, packet) == 0) {
        AVStream *inStream = fCtx->streams[packet->stream_index];
        av_log(NULL, AV_LOG_INFO, "stream index=%d,pts=%ld,ptsTime=%lf,dts=%ld,dtsTime=%lf\n", packet->stream_index,
               packet->pts, packet->pts *
                            av_q2d(inStream->time_base), packet->dts, packet->dts *
                                                                      av_q2d(inStream->time_base));
    }
    return 0;
}

Makefile

TARGET=main
SRC=main.c
CC=gcc
CFLAGS=-I /usr/local/ffmpeg/include
LDFLAGS=-L /usr/local/ffmpeg/lib
LDFLAGS+= -lavutil -lavformat -lavcodec
all:$(TARGET)
$(TARGET):$(SRC)
    $(CC) $(SRC) $(CFLAGS) $(LDFLAGS) -o $(TARGET)
clean:
    rm -rf $(TARGET)

  

标签:转换,ffmpeg,fCtx,packet,计算,av,NULL,inStream,log
From: https://www.cnblogs.com/navysummer/p/18214156

相关文章

  • Springboot计算机毕业设计行程日记卡小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在数字化和移动互联网时代,人们对于旅行方式的需求正发生深刻变化。行程规划、景点打卡、美食推荐等旅行需求日益个性化、多元化。然而,传统的旅行规划......
  • 2024年华为OD机试真题-计算面积-C++-OD统一考试(D卷)
     2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集)题目描述:绘图机器的绘图笔初始位置在原点(0,0),机器启动后其绘图笔按下面规则绘制直线:1)尝试沿着横向坐标轴正向绘制直线,直到给定的终点值E。2)期间可通过指令在纵坐标轴方向进行偏移,并同时绘制直......
  • JAVA计算机毕业设计基于Springboot的助学金管理系统设计与实现(附源码+springboot+开题
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今高等教育日益普及的背景下,助学金作为保障学生顺利完成学业的重要措施,其管理效率和公正性显得尤为关键。然而,传统的助学金管理方式往往依赖于人......
  • JAVA计算机毕业设计基于springboot的在线考试系统(附源码+springboot+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的快速发展和普及,教育领域对信息技术的应用越来越广泛。在线考试系统作为教育信息化的一种重要形式,已经逐渐成为了现代教育管理的重要组......
  • 自动参数计算单 SW1308 SDB628 MT3608 HX3608 电路&器件计算 DC升压芯片
    匹配SW1308计算公式制作,修改黄色单元格参数即自动计算电路和器件参数。适用于SDB628、MT3608、HX3608等可平替SW1308的DC升压芯片。此文档挂于淘宝,价格:0.2(GPT回血)文件包含:1、SX1308计算单EXEC;2、SX1308中英双语芯片规格书说明:文档有水印与锁定,机器人自动发货,蓝奏......
  • MapStruct对象映射转换
    前言2024.05.26,项目中用到了MapStruct,今天对项目中的一个实体类进行改动,发现不起作用,一顿排查下来发现是MapStruct搞错的,因此打算系统整理一下MapStruct的用法。介绍在实际开发中我们经常需要做DTO、VO、Entity对象之间的转换,在开发中常见的做法有两种:手动get、set使用Bean......
  • 防风固沙(七)土壤湿度因子的计算
    大家好,今天我们来学习防风固沙土壤湿度因子SW的计算,下面让我们开始吧!!!土壤湿度SW的计算公式 式中:ETP为月蒸散发;R为月降雨量;I为月灌溉量,参考文献,这里取0;N为一月中观测天数。 数据获取请查看前几期文章。(包括潜在蒸散发数据、月降雨量数据、以及降雨概率R/N的计算)SW计......
  • ffmpeg提取H264视频数据
    方法1:命令提取ffmpeg-iinput.mp4-an-vcodeccopyout.h264ffmpeg-iinput.mp4-an-vcodeccopy-bsf:h264_mp4toannexbout1.h264方法2:代码提取 main.c#include"libavutil/log.h"#include"libavformat/avformat.h"#include"libavut......
  • 《计算机网络微课堂》3-8 集线器与交换机的区别
    本节课我们介绍集线器与交换机的区别,‍‍我们首先来看早期的总线型以太网,这是我们之前课程中经常用来举例的总线型以太网,‍‍他最初使用粗铜轴电缆作为传输媒体,后来演进到使用价格相对便宜的细同轴电缆。当初认为‍‍这种连接方法既简单又可靠,因为在那个时代普遍认为有源器件不可......
  • 《计算机网络微课堂》3-9 以太网交换机自学习和转发帧的流程
    在上节课中,我们对比了在物理层扩展以太网的集线器,和在数据链路层扩展以太网的交换机。本节课我们介绍以太网交换机自学习和转发帧的流程,以太网交换机工作在数据链路层,当然也包括物理层,需要说明的是目前市场上也有包含网络层部分功能的交换机,称为三层交换机。以太网交换机收到帧......