我正在尝试调整代码,以便在ffmpeg和directshow的帮助下添加声音捕获功能(在实时流上)。
当我尝试使用ffplay播放AVIsynth文件时,一切都很完美,我有音频和视频。但是,当我通过代码打开此输入文件时,我只能找到视频流。
Avs文件:
V = DirectShowSource("Decklink_HDMI.grf", fps=10, framecount=1000000000, seek=false, audio=false)
A = DirectShowSource("Decklink_Audio.grf", fps=1, framecount=1000000000, video=false)
AudioDub(V, A)
开场代码:
ffmpeg::AVInputFormat * ifmt;
ifmt = ffmpeg::av_find_input_format("avs");
// Open input file
if(ffmpeg::avformat_open_input(&pFormatCtx, filename.toStdString().c_str(), ifmt, NULL) != 0)
当我在开场后的gdb上进行变量了望时。
我在pFormatCtx-> nb_streams中查看nb_streams,它在1 我可以在pFormatCtx->流中找到的唯一流是视频流。这就是为什么我无法捕获声音。
所以我问我的开场是否有问题,或者我是否错过了什么。
Ps:我知道显示的代码很短但问题出现在这一步!
谢谢
库尔特
- 编辑 -
我还注意到,当我转储AVFormatContext时,视频流的大小为456x32。 当我尝试使用ffplay启动损坏的脚本时,我可以找到显示的窗口大小。
使用ffplay播放正确脚本时的原始视频格式为1920x1080
我认为我的问题可能比无法获得音频流的简单事实更深刻。
我正在尝试了解如何知道此456x32窗口上显示的错误消息
- EDIT2 -
我知道这张图片上写的内容是什么,我的问题已经解决了,这个版本很糟糕的是一个旧的脚本。
我很惭愧。
答案 0 :(得分:1)
我的不好,
错误放置的avs文件是我的问题。
无论如何,ffmpeg在显示错误的方式上有点痛苦,被迫在没有任何错误信息或引发异常的情况下制作快照(或者可能是我失败了)。