FFMPEG复制如何工作?

时间:2017-11-20 16:27:08

标签: ffmpeg h.264 hls libavformat

如何实现此命令的等效命令:

$n

我的理解是你做了这样的事情(为了清晰起见,伪代码):

ffmpeg -i test.h264 -vcodec copy -hls_time 5 -hls_list_size 0 foo.m3u8

我在avformat_open_input(&ctx_in, "test.h264", NULL, NULL); avformat_find_stream_info(ctx_in, NULL); avformat_alloc_output_context2(&ctx_out, NULL, "hls", "foo.m3u8"); strm_out = avformat_new_stream(ctx_out, NULL); strm_out->time_base = (AVRational){1000000, FRAMERATE}; strm_out->codecpar->codec_id = AV_CODEC_ID_H264; strm_out->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; strm_out->codecpar->width = width; strm_out->codecpar->height = height; strm_out->codecpar->bit_rate = bitrate; strm_out->codecpar->codec_tag = 0; avcodec_parameters_copy(ctx_out->streams[0]->codecpar, ctx_in->streams[0]->codecpar); avformat_write_header(ctx_out, NULL); while(1) { AVPacket pkt; ret = av_read_frame(ctx_in, &pkt); if (ret < 0) break; pkt.pos = -1; pkt.stream_index = 0; pkt.dts = AV_NOPTS_VALUE; pkt.pts = AV_NOPTS_VALUE; pkt.pts = SOME_DURATION; av_write_frame(ctx_out, &pkt); av_packet_unref(&pkt); } avformat_close_input(&ctx_in); av_write_trailer(ctx_out); avformat_free_context(ctx_out); 电话上崩溃了。我认为情况就是这样,因为H264元素流实际上不是一个容器(avformat想要的)。

实现元素流的FFMPEG“复制”命令的正确方法是什么?

0 个答案:

没有答案