我想要的是
1. Get video packet from stream source
2. Decode it
3. And write that decoded data as video file(avi, mpeg etc)
我可以从文件中获取视频数据包(如AVPacket),也可以解码并保存为图像。(原始)(FFmpeg教程显示如何操作)。 但我不能(不知道)将视频数据写入文件(其他),可由媒体播放器(如VLC)播放。
祝福
Ps:如果可能,真实代码样本会很棒......
现在我用 av_interleaved_write 进行测试,但我得到了奇怪的错误“非单调时间戳”(我无法控制媒体源的pts值)
一些额外信息
在FFmpeg我必须
我需要读者和作家。我可以读取媒体源文件(甚至根据给定的格式对数据包进行编码)。但我不能写文件......(任何玩家都可以玩)
还有一些伪代码
File myFile("MyTestFile.avi");
while ( source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
Frame decodedFrame = Decode(packet);
VideoPacket encodedPacket = Encode( decodedFrame);
myFile.WriteFile(encodedPacket);
}
或者只是编写没有编码解码的原始文件
File myFile("MyTestFile.avi");
while ( source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
myFile.WriteFile(packet);
}
然后
I can able to open MyTest.avi file with a player.
答案 0 :(得分:4)
答案 1 :(得分:2)
现在,在FFmpeg trunk的 doc / examples / transcoding.c 中有一个新的视频转码示例,它完全符合您的需求:API example for demuxing, decoding, filtering, encoding and muxing.
这是针对当前的 ffmpeg 2.4.4
答案 2 :(得分:0)
您需要编写一个编码器来将原始数据转换为所需的视频格式
答案 3 :(得分:-1)
我在某些时候使用libx264和vorbis做了类似的事情。
代码示例。 https://github.com/Themaister/SSNES/blob/master/record/ffemu.c
基本思想是,当您想对其进行编码时,必须自己在AVFrame
中设置时间戳。然后,您可以使用该数据包并使用av_interleaved_write()
进行编写。