flowchart TB
A(开始) --> B[打开文件]
B --> C[查找流信息]
C --> D[创建输出文件]
D --> E[打开输出文件]
E --> F[查找输出流]
F --> G[创建流]
G --> H[复制流参数]
H --> I[转换时间戳]
I --> J(结束)
对应的函数调用流程为
flowchart TB
I --Yes--> L
N --Next Frame--> I
subgraph convert
direction TB
L[av_rescale_q_rnd] --> M[av_rescale_q]
M --> N[av_interleaved_write_frame]
end
subgraph main
direction TB
A(Start) --> B[avformat_open_input]
B --> C[avformat_find_stream_info]
C --> D[open_codec_context]
D --> E[av_find_best_stream]
E --> F[avformat_new_stream]
F --> G[avcodec_parameters_copy]
G --> H[avio_open]
H --> I{av_read_frame}
I --No--> J[avformat_close_input]
J --> K[avio_close]
end
实际的操作为读取两条流,然后创建两条流,分别转换时间戳保存数据。
首先是打开输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//打开输入流 ret = avformat_open_input(&ifmtCtx, inFilename, 0, 0); if (ret < 0) { printf("can't open input file\n"); break; }
//获取流信息 ret = avformat_find_stream_info(ifmtCtx, 0); if (ret < 0) { printf("can't retrieve input stream information\n"); break; }
创建输出上下文
1 2 3 4 5 6
avformat_alloc_output_context2(&ofmtCtxVideo, NULL, NULL, outFilenameVideo); if (!ofmtCtxVideo) { printf("can't create video output context"); break; }