首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用go图像库从标准输出解码bmp图像

用go图像库从标准输出解码bmp图像
EN

Stack Overflow用户
提问于 2019-02-10 16:33:41
回答 1查看 1.3K关注 0票数 1

我试图使用图像和golang.org/x/ image /bmp库来解码bmp图像。图像由ffmpeg输出到stdout。这是获取框架的代码:

代码语言:javascript
运行
复制
cmd := exec.Command("ffmpeg", "-accurate_seek", "-ss", strconv.Itoa(index), "-i",
    filename, "-frames:v", "1", "-hide_banner", "-loglevel", "0", "pipe:.bmp")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
    log.Fatal(err)
}

o := bufio.NewReader(&out)

然后我使用img, _, err := image.Decode(o)对其进行解码,但是这会产生一个“图像:未知格式”的错误。我已经在主方法中注册了bmp格式,以前我已经成功地从磁盘中解码了实际的BMP文件,而不是stdout。

我尝试过只使用bmp.Decode而不是image.Decode,但这只会产生错误"EOF“。

我想也许我没有以正确的方式得到标准文件,但如果我把它直接写到一个文件中:

代码语言:javascript
运行
复制
o := bufio.NewReader(&out)

outputfile, err := os.Create("test.bmp")
if err != nil {
    log.Fatal(err)
}
defer outputfile.Close()
io.Copy(outputfile, o)

然后它就可以正常工作了,我可以打开它。

编辑:代码

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-10 23:56:09

更新:发现问题是-ss需要时间而不是帧索引。

我试着重复这个问题,但它似乎对我有用。或许可以添加cmd.Stderr = os.Stderr,看看ffmpeg输出是否提供了线索。你也可以发布一个完整运行的例子吗?

代码语言:javascript
运行
复制
package main

import (
    "bytes"
    "image"
    "log"
    "os"
    "os/exec"

    _ "golang.org/x/image/bmp"
)

func main() {
    cmd := exec.Command(
        "docker", "run",
        "--rm",
        "mwader/static-ffmpeg",
        "-ss", "5",
        "-f", "lavfi",
        "-i", "testsrc",
        "-frames:v", "1",
        "-f", "image2",
        "-vcodec", "bmp",
        "pipe:1",
    )
    var out bytes.Buffer
    cmd.Stderr = os.Stderr
    cmd.Stdout = &out
    err := cmd.Run()
    if err != nil {
        log.Fatal(err)
    }

    img, imgFormat, imgErr := image.Decode(&out)

    log.Printf("img.Bounds(): %#+v\n", img.Bounds())
    log.Printf("imgFormat: %#+v\n", imgFormat)
    log.Printf("imgErr: %#+v\n", imgErr)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54618541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档