Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Audio ffmpeg命令行,用于使用Windows 7从decklink卡捕获(和录制)720p音频和视频_Audio_Video_Ffmpeg - Fatal编程技术网

Audio ffmpeg命令行,用于使用Windows 7从decklink卡捕获(和录制)720p音频和视频

Audio ffmpeg命令行,用于使用Windows 7从decklink卡捕获(和录制)720p音频和视频,audio,video,ffmpeg,Audio,Video,Ffmpeg,我正在尝试使用Windows7@720p从blackmagic decklink捕获卡捕获音频和视频,但我似乎无法正确设置ffmpeg命令行 ffmpeg-列表_设备真-f dshow-i伪 ffmpeg-list_options true-f dshow-i video=“Decklink视频捕获” ffmpeg-list_options true-f dshow-i audio=“Decklink音频捕获” 这是我当前视频/音频源的流信息,连接到decklink卡的hdmi端口 最终我需要在

我正在尝试使用Windows7@720p从blackmagic decklink捕获卡捕获音频和视频,但我似乎无法正确设置ffmpeg命令行

ffmpeg-列表_设备真-f dshow-i伪 ffmpeg-list_options true-f dshow-i video=“Decklink视频捕获” ffmpeg-list_options true-f dshow-i audio=“Decklink音频捕获” 这是我当前视频/音频源的流信息,连接到decklink卡的hdmi端口 最终我需要在屏幕上显示这个视频。同时可以开始和停止录制,同时预览继续播放

我的想法是使用ffmpeg捕获视频和音频信号,并将其传输到网络流(例如127.0.0.1:6666)。然后使用VLC播放器显示流(预览)。并最终启动和/或停止另一个ffmpeg以将相同的流保存到磁盘

在我看来,这是可行的,但我不是音频/视频专家,因此,如果有更多经验的人能够提供帮助,我将不胜感激

更新:

我已经能够使用ffplay通过以下命令显示视频:

ffplay -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -threads 2
ffmpeg -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -threads 2 -f mpegts rtp://127.0.0.1:6666?pkt_size=188?buffer_size=65535
ffmpeg -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -r 30 -threads 4 -vcodec libx264 -crf 0 -preset ultrafast -f mpegts "udp://239.255.12.42:6666"
ffmpeg -y -threads 4 -i udp://239.255.12.42:6666 -map 0 -acodec copy -vcodec copy output.mkv
下一步是流式传输,这样我就可以用VLC查看流(预览)

尝试使用此命令:

ffplay -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -threads 2
ffmpeg -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -threads 2 -f mpegts rtp://127.0.0.1:6666?pkt_size=188?buffer_size=65535
ffmpeg -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -r 30 -threads 4 -vcodec libx264 -crf 0 -preset ultrafast -f mpegts "udp://239.255.12.42:6666"
ffmpeg -y -threads 4 -i udp://239.255.12.42:6666 -map 0 -acodec copy -vcodec copy output.mkv
它不会给出任何错误,因此看起来是可行的。但当我尝试在VLC中打开流时,我得到以下错误:

SDP要求: 接收RTP流需要SDP格式的描述。请注意,rtp://URI不能与动态rtp有效负载格式(65)一起使用

经过一点阅读,我似乎不应该流式传输到rtp://而应该流式传输到udp://

命令变成:

ffmpeg -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -threads 2 -f mpegts udp://127.0.0.1:6666?pkt_size=188?buffer_size=65535
当我现在尝试在VLC中打开它时,我没有收到错误,没有警告,也没有视频


是时候多读点书了。

终于开始工作了。我的安装程序在一台机器上运行这一切

为了拍摄视频并通过UDP提供服务,我使用以下命令:

ffplay -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -threads 2
ffmpeg -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -threads 2 -f mpegts rtp://127.0.0.1:6666?pkt_size=188?buffer_size=65535
ffmpeg -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -r 30 -threads 4 -vcodec libx264 -crf 0 -preset ultrafast -f mpegts "udp://239.255.12.42:6666"
ffmpeg -y -threads 4 -i udp://239.255.12.42:6666 -map 0 -acodec copy -vcodec copy output.mkv
  • -f dshow
    告诉ffmpeg我们需要使用direct show
  • -video\u size 1280x720
    设置源代码大小,因为我使用的是720p60源代码,所以就是它
  • 702000k
    非常重要,因为没有它,实时缓冲区将在几秒钟内填满
  • -framerate 60
    告诉ffmpeg源使用的是60fps
  • 选项:
    video=“Decklink video Capture”:audio=“Decklink audio Capture”
    告诉ffmpeg使用这些设备作为输入,但通过以这种方式指定它们,音频和视频之间的延迟将大大减少(和/或消失)
  • -r30
    强制输出为30fps,而不是源中的60fps
  • -线程4
    按照您的想法,使用4个线程
  • -vcodec libx264
    在广播时将源流编码为h264
  • -crf 0
    将“恒定速率因子”(量化器刻度)设置为0,表示无损
  • -预设超快
    意味着我们没有耐心,所以尽可能少地使用压缩。这会导致高比特率,但这对我来说没问题
  • -f mpegts
    选项告诉ffmpeg使用MPEG-TS数据包,这将“强制”ffmpeg使用恒定比特率的MPEG格式,因为MPEG本身通常是可变比特率的
  • 最后是选项
    udp://239.255.12.42:6666
    指定要通过udp使用端口6666将此流广播到多播地址239.255.12.42。我选择在这里使用多播地址的原因很简单,因为我需要以尽可能少的处理同时显示流(预览)和记录。这使我不必将音频和视频流复制到两个不同的网络地址
为了使用VLC player捕获此视频,我打开以下网络流地址:

udp://@239.255.12.42:6666
最后,为了记录流,我生成了一个新进程,并发出以下命令:

ffplay -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -threads 2
ffmpeg -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -threads 2 -f mpegts rtp://127.0.0.1:6666?pkt_size=188?buffer_size=65535
ffmpeg -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -r 30 -threads 4 -vcodec libx264 -crf 0 -preset ultrafast -f mpegts "udp://239.255.12.42:6666"
ffmpeg -y -threads 4 -i udp://239.255.12.42:6666 -map 0 -acodec copy -vcodec copy output.mkv
  • -y
    选项用于始终覆盖文件(如果文件存在且没有问题)
  • -threads 4
    选项按照您的想法执行,它使用4个线程
  • -iudp://239.255.12.42:6666
    连接到我们正在广播的流
  • -map 0
    告诉ffmpeg我们需要所有流(视频和音频)
  • -acodec copy
    -vcodec copy
    用于确保流按原样进行,而不是进行任何压缩/转码
剩下要做的唯一一件事(这是一个正在进行的atm)就是为此创建一个c#gui。基本工作流是在表单加载时生成流进程。使用vlc com+控件在应用程序中显示视频

然后,当按下录制按钮时,生成另一个要录制的进程,并停止该进程以结束录制

然而,当我开始录制时,我确实会停止流,这使得录制/检测更加顺利。如果流保持打开并且我开始录制,那么录制过程需要一些时间才能“调谐”到流。通过停止流、开始录制(在流重新打开之前不会执行任何操作)并再次启动流,录制将从第一帧开始,不会出现任何问题


我完全可以接受这种小小的延迟/闪烁。

我的投票结果是,你对ffmpeg的期望太高了。使用directshow并为此构建一个应用程序(它看起来像一个录音机)。我必须说这是我的第一个意图。所以我继续这样做,很快意识到我面临的挑战是及时转换源帧。这是因为源代码是8位YUV422。所以我和开发者支持@blackmagic谈过,看看什么是最好的选择。他们把我指给利巴夫看。因为这在ffmpeg中使用,