gomedia
gomedia copied to clipboard
h264视频文件获取frame后如何保存为图片?
import (
"bytes"
"fmt"
"io/ioutil"
"os"
"github.com/yapingcat/gomedia/go-mpeg2"
)
func main() {
f, _ := os.Open("x.mp4")
defer f.Close()
dm := mpeg2.NewTSDemuxer()
dm.OnFrame = func(cid mpeg2.TS_STREAM_TYPE, frame []byte, pts uint64, dts uint64) {
if cid == mpeg2.TS_STREAM_H264 {
println("---1", len(frame), pts, dts)
// how to convert frame []byte to jpg or png?
}
}
buf, _ := ioutil.ReadAll(f)
fmt.Printf("read %d size\n", len(buf))
fmt.Println(dm.Input(bytes.NewReader(buf)))
}
抱歉啊,搜索了半天没有找到解决办法。对视频图像了解实在有限,请教下是不是可行,谢谢!
需要解码,你可能需要的是ffmpeg
就是想着怎么能避免安装很大的ffmpeg
我的视频ffpobe 结果是:
Input #0, flv, from '4.flv':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: h264 (High), yuv420p(progressive), 1280x720, 1k tbr, 1k tbn
Input #0, mpegts, from 'x.ts':
Duration: 00:00:06.00, start: 20.034000, bitrate: 314 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuvj420p(pc, bt709, progressive), 352x288, 30 tbr, 90k tbn
纯golang做不到 需要先解码再编码,ffmpeg比较合适 或者用cgo调用ffmpeg的library
能不能实现只把H264的关键帧保存成图片。这样会不会简单一些。不太想引入ffmpeg,Cgo有点拉跨
能不能实现只把H264的关键帧保存成图片。这样会不会简单一些。不太想引入ffmpeg,Cgo有点拉跨
实现是是一样的,都需要先解码再编码
能不能实现只把H264的关键帧保存成图片。这样会不会简单一些。不太想引入ffmpeg,Cgo有点拉跨
不想用cgo,可以试试ffmepg 管道模式. 或者开发一个简单转码服务,go程序用socket/zmq 其他进程间通信方式与之交互,传输h264
能不能实现只把H264的关键帧保存成图片。这样会不会简单一些。不太想引入ffmpeg,Cgo有点拉跨
不想用cgo,可以试试ffmepg 管道模式. 或者开发一个简单转码服务,go程序用socket/zmq 其他进程间通信方式与之交互,传输h264
好的,谢谢解答