Audio ffmpeg命令行,用于使用Windows 7从decklink卡捕获(和录制)720p音频和视频
我正在尝试使用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通过以下命令显示视频: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端口 最终我需要在
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
告诉ffmpeg我们需要使用direct show-f dshow
设置源代码大小,因为我使用的是720p60源代码,所以就是它-video\u size 1280x720
非常重要,因为没有它,实时缓冲区将在几秒钟内填满702000k
告诉ffmpeg源使用的是60fps-framerate 60
- 选项:
告诉ffmpeg使用这些设备作为输入,但通过以这种方式指定它们,音频和视频之间的延迟将大大减少(和/或消失)video=“Decklink video Capture”:audio=“Decklink audio Capture”
强制输出为30fps,而不是源中的60fps-r30
按照您的想法,使用4个线程-线程4
在广播时将源流编码为h264-vcodec libx264
将“恒定速率因子”(量化器刻度)设置为0,表示无损-crf 0
意味着我们没有耐心,所以尽可能少地使用压缩。这会导致高比特率,但这对我来说没问题-预设超快
选项告诉ffmpeg使用MPEG-TS数据包,这将“强制”ffmpeg使用恒定比特率的MPEG格式,因为MPEG本身通常是可变比特率的-f mpegts
- 最后是选项
指定要通过udp使用端口6666将此流广播到多播地址239.255.12.42。我选择在这里使用多播地址的原因很简单,因为我需要以尽可能少的处理同时显示流(预览)和记录。这使我不必将音频和视频流复制到两个不同的网络地址udp://239.255.12.42:6666
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
选项按照您的想法执行,它使用4个线程-threads 4
连接到我们正在广播的流-iudp://239.255.12.42:6666
告诉ffmpeg我们需要所有流(视频和音频)-map 0
和-acodec copy
用于确保流按原样进行,而不是进行任何压缩/转码-vcodec copy
我完全可以接受这种小小的延迟/闪烁。我的投票结果是,你对ffmpeg的期望太高了。使用directshow并为此构建一个应用程序(它看起来像一个录音机)。我必须说这是我的第一个意图。所以我继续这样做,很快意识到我面临的挑战是及时转换源帧。这是因为源代码是8位YUV422。所以我和开发者支持@blackmagic谈过,看看什么是最好的选择。他们把我指给利巴夫看。因为这在ffmpeg中使用,