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