相关疑难解决方法(0)

从python生成电影而不将单个帧保存到文件

我想从我在matplotlib的python脚本中生成的帧创建一个h264或divx电影.这部电影大约有10万帧.

在网络上的例子中[例如 1],我只看到了将每个帧保存为png然后在这些文件上运行mencoder或ffmpeg的方法.就我而言,保存每一帧是不切实际的.有没有办法从matplotlib生成一个图并将其直接传递给ffmpeg,不生成中间文件?

用ffmpeg的C-api编程对我来说太难了[例如.2].此外,我需要一个具有良好压缩的编码,例如x264,因为电影文件对于后续步骤来说太大了.所以坚持使用mencoder/ffmpeg/x264会很棒.

有什么东西可以通过管道来完成[3]?

[1] http://matplotlib.sourceforge.net/examples/animation/movie_demo.html

[2] 如何使用x264 C API将一系列图像编码为H264?

[3] http://www.ffmpeg.org/ffmpeg-doc.html#SEC41

python ffmpeg numpy matplotlib x264

69
推荐指数
5
解决办法
5万
查看次数

如何用libavcodec/x264编码h.264?

我试图使用libavcodec/libavformat编码视频.音频效果很好,但当我尝试编码视频时,我收到以下错误:

[libx264 @ 0x10182a000]broken ffmpeg default settings detected  
[libx264 @ 0x10182a000]use an encoding preset (vpre)  
Run Code Online (Sandbox Code Playgroud)

使用命令行ffmpeg很容易修复,但我想在C中执行此操作.我的选项是

AVStream *pVideoOutStream = av_new_stream(pOutFormatCtx, 0);  
AVCodecContext *pVideoOutCodecCtx  = pVideoOutStream->codec;  

pVideoOutCodecCtx->codec_id        = CODEC_ID_H264;    
pVideoOutCodecCtx->codec_type      = CODEC_TYPE_VIDEO;  
pVideoOutCodecCtx->bit_rate        = pVideoInCodecCtx->bit_rate;  
pVideoOutCodecCtx->width           = pVideoInCodecCtx->width;    
pVideoOutCodecCtx->height          = pVideoInCodecCtx->height;  
pVideoOutCodecCtx->pix_fmt         = pVideoInCodecCtx->pix_fmt;    
pVideoOutCodecCtx->sample_rate     = pVideoInCodecCtx->sample_rate;    
pVideoOutCodecCtx->gop_size        = 30;  
Run Code Online (Sandbox Code Playgroud)

但是avcodec_open()失败了.

我需要设置哪些其他值才能使x264满意?

c x264 libavcodec libav libx264

19
推荐指数
3
解决办法
3万
查看次数

如何使用明确控制关键帧位置的ffmpeg编写视频编码器?

我想用ffmpeg编写一个编码器,可以将iFrame(关键帧)放在我想要的位置.我在哪里可以找到它的教程或参考资料?

PS
是否可以使用mencoder或任何开源编码器执行此操作.我想编码H263文件.我在linux下编写.

encoder ffmpeg

16
推荐指数
1
解决办法
1万
查看次数

H264:使用 ffmpeg 解码 nal 单元系列

我尝试使用 ffmpeg (libavcodec) 解码一系列 nal 单元,但出现“无帧”错误。我按照如何使用 x264 C API 将一系列图像编码为 H264? 中的指南生成了最终单元。。我尝试了以下解码策略:

avcodec_init();  
avcodec_register_all();  
AVCodec* pCodec;  
pCodec=lpavcodec_find_decoder(CODEC_ID_H264);  
AVCodecContext* pCodecContext;  
pCodecContext=lpavcodec_alloc_context();  
avcodec_open(pCodecContext,pCodec);  
AVFrame *pFrame;  
pFrame=avcodec_alloc_frame();
//for every nal unit:    
    int frameFinished=0;  
    //nalData2 is nalData without the first 4 bytes
    avcodec_decode_video(pCodecContext,pFrame,&frameFinished,(uint8_t*) nalData2,nalLength);
Run Code Online (Sandbox Code Playgroud)

我通过了到达此代码的所有单元,但 frameFinished 仍为 0。我猜 pCodecContext 设置一定有问题。有人可以给我发送一个工作示例吗?

谢谢

ffmpeg decode x264

5
推荐指数
1
解决办法
2万
查看次数

使用x264将OpenGL输出转换为H264

我想将OpenGL程序的输出转换为h264并输出流。我在某处收集了大部分代码,并得到了一个输出文件,但是我不知道该如何处理或是否有效。当前,输出仅保存在file.h264中。

编辑:“全局”变量

    x264_param_t param;
    x264_t* encoder;
    x264_picture_t pic_in;
    x264_picture_t pic_out;

    x264_nal_t *headers;
    int i_nal;
    FILE* pFile;
Run Code Online (Sandbox Code Playgroud)

我的初始化函数:

initX264() {
    pFile = fopen("file.h264", "wb");

    x264_param_t param;
    x264_param_default_preset(&param, "veryfast", "zerolatency");
    param.i_threads = 1;
    param.i_width = 1024;
    param.i_height = 768;
    param.i_fps_num = 30;
    param.i_fps_den = 1;

    param.i_keyint_max = 30;
    param.b_intra_refresh = 1;

    param.rc.i_rc_method = X264_RC_CRF;
    param.rc.f_rf_constant = 25;
    param.rc.f_rf_constant_max = 35;

    param.b_annexb = 0;
    param.b_repeat_headers = 0;

    param.i_log_level = X264_LOG_DEBUG;

    x264_param_apply_profile(&param, "baseline");

    encoder = x264_encoder_open(&param);
    x264_picture_alloc(&pic_in, X264_CSP_I420, 1024, 768);

    x264_encoder_parameters( encoder, &param ); …
Run Code Online (Sandbox Code Playgroud)

c c++ h.264 x264 libx264

4
推荐指数
1
解决办法
3231
查看次数

标签 统计

x264 ×4

ffmpeg ×3

c ×2

libx264 ×2

c++ ×1

decode ×1

encoder ×1

h.264 ×1

libav ×1

libavcodec ×1

matplotlib ×1

numpy ×1

python ×1