使用多个管道运行ffmpeg

时间:2017-08-13 18:08:05

标签: c++ ffmpeg pipe named-pipes

有没有办法让ffmpeg从多个缓冲区或多个命名管道中读取?

基本上我想将第一个循环输出到不同的管道而不是.jpg文件,并使用这些管道作为输入运行视频过滤器命令。现在需要巨大的磁盘IO来创建和读取jpg磁贴。

// heic -> tiles -> jpeg tiles
#pragma omp parallel for
    for(uint i = 0; i < data.tiles.size(); ++i) {
        char buff[100];
        snprintf(buff, sizeof(buff), "./tmp/%03d.jpg", data.tiles[i].idx);
        std::string cmdStr = "ffmpeg -i - -loglevel warning -frames:v 1 -vsync vfr -an -q:v 1 " + std::string(buff);
        FILE * pipe_in;
        if(pipe_in = popen(cmdStr.c_str(), "w")) {
            fwrite((char*)&data.tiles[i].data[0], 1, data.tiles[i].data.size(), pipe_in);
            fflush(pipe_in);
            fclose(pipe_in);
        }
    }

... some processing

// jpeg tiles -> big jpeg
std::string inputStr = "./tmp/%03d.jpg";
std::string cmdStr = "ffmpeg -i " + inputStr +
        " -loglevel warning -threads 4 -q:v 1 -vf \"tile=" + std::to_string(data.cols) + "x" + std::to_string(data.rows) +
        ",crop=" + std::to_string(data.width) + ":" + std::to_string(data.height) + ":0:0" +
        transStr + "\" -y " + outputStr;
ret = std::system(cmdStr.c_str());

0 个答案:

没有答案