it-swarm.dev

Windows 7을 사용하여 decklink 카드에서 720p로 오디오 및 비디오를 캡처 (및 기록)하기위한 ffmpeg 명령 줄

Windows 7 @ 720p를 사용하여 blackmagic decklink 캡처 카드에서 오디오 및 비디오를 캡처하려고하는데 ffmpeg 명령 줄 설정을 올바르게 얻을 수없는 것 같습니다.

ffmpeg -list_devices true -f dshow -i 더미

[dshow @ 02457a60] DirectShow video devices
[dshow @ 02457a60]  "Blackmagic WDM Capture"
[dshow @ 02457a60]  "Decklink Video Capture"
[dshow @ 02457a60] DirectShow audio devices
[dshow @ 02457a60]  "Decklink Audio Capture"

ffmpeg -list_options true -f dshow -i video = "Decklink 비디오 캡처"

[dshow @ 03c2ea20] DirectShow video device options
[dshow @ 03c2ea20]  Pin "Capture"
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=720x486 fps=29.97 max s=720x486 fps=29.97
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=720x486 fps=23.976 max s=720x486 fps=23.976
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=720x576 fps=25 max s=720x576 fps=25
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=720x486 fps=59.9402 max s=720x486 fps=59.9402
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=720x576 fps=50 max s=720x576 fps=50
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=1920x1080 fps=23.976 max s=1920x1080 fps=23.976
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=1920x1080 fps=24 max s=1920x1080 fps=24
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=1920x1080 fps=25 max s=1920x1080 fps=25
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=1920x1080 fps=29.97 max s=1920x1080 fps=29.97
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=1920x1080 fps=30 max s=1920x1080 fps=30
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=1280x720 fps=50 max s=1280x720fps=50
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=1280x720 fps=59.9402 max s=1280x720 fps=59.9402
[dshow @ 03c2ea20]   pixel_format=uyvy422  min s=1280x720 fps=60.0002 max s=1280x720 fps=60.0002

ffmpeg -list_options true -f dshow -i audio = "Decklink 오디오 캡처"

[dshow @ 047fea20] DirectShow audio device options
[dshow @ 047fea20]  Pin "Capture"
[dshow @ 047fea20]   min ch=1 bits=16 rate= 48000 max ch=1 bits=16 rate= 48000
[dshow @ 047fea20]   min ch=2 bits=16 rate= 48000 max ch=2 bits=16 rate= 48000
[dshow @ 047fea20]   min ch=4 bits=16 rate= 48000 max ch=4 bits=16 rate= 48000
[dshow @ 047fea20]   min ch=6 bits=16 rate= 48000 max ch=6 bits=16 rate= 48000
[dshow @ 047fea20]   min ch=8 bits=16 rate= 48000 max ch=8 bits=16 rate= 48000
[dshow @ 047fea20]   min ch=10 bits=16 rate= 48000 max ch=10 bits=16 rate= 48000
[dshow @ 047fea20]   min ch=12 bits=16 rate= 48000 max ch=12 bits=16 rate= 48000
[dshow @ 047fea20]   min ch=16 bits=16 rate= 48000 max ch=16 bits=16 rate= 48000

이것은 데크 링크 카드의 hdmi 포트에 연결된 현재 비디오/오디오 소스에 대한 스트림 정보입니다

Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422(tv), 1280x720, 59.94 tbr, 10000k tbn, 59.94 tbc
Stream #0:1: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s

궁극적으로이 비디오를 화면에 표시해야합니다. 그리고 미리보기가 계속 재생되는 동안 동시에 녹화를 시작 및 중지 할 수 있습니다.

내 생각은 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

다음 단계는 VLC로 스트림 (미리보기)을 볼 수 있도록 스트리밍하는 것입니다.

이 명령을 사용하려고했습니다.

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

어떤 오류도 발생하지 않으므로 작동하는 것처럼 보입니다. 그러나 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에서 지금 열려고하면 오류가없고 경고는 없지만 비디오는 없습니다.

좀 더 읽을 시간입니다.

15
Huron

마침내 작동했습니다. 내 설정에는이 모든 것이 단일 컴퓨터에서 실행되고 있습니다.

비디오를 가져 와서 UDP를 통해 제공하려면 다음 명령을 사용하십시오.

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"
  • -f dshow는 ffmpeg에게 직접 쇼를 사용해야한다고 말합니다.
  • -video_size 1280x720은 720p60 소스를 사용하고 있기 때문에 소스 크기를 설정합니다.
  • 702000k이 없으면 실시간 버퍼가 몇 초 안에 가득 차기 때문에 정말 중요합니다.
  • -framerate 60는 ffmpeg에서 소스가 60fps를 사용하고 있음을 알려줍니다.
  • 옵션 : video="Decklink Video Capture":audio="Decklink Audio Capture"는 ffmpeg에 해당 장치를 입력으로 사용하도록 지시하지만 이러한 방식으로 장치를 지정하면 오디오와 비디오 사이의 지연 시간이 실질적으로 줄어 듭니다.
  • -r 30는 소스의 60fps 대신 출력이 30fps가되도록합니다.
  • -threads 4 당신이 생각하는 것을 4 스레드를 사용합니다.
  • -vcodec libx264는 방송 중에 소스 스트림을 h264로 인코딩합니다.
  • -crf 0는 "일정한 비율 계수"(양자화 스케일)를 0으로 설정하여 무손실을 의미합니다.
  • -preset ultrafast는 인내심이 없다는 것을 의미하므로 가능한 한 적은 압축을 사용하십시오. 이로 인해 높은 비트 전송률이 발생하지만 내 목적에는 적합합니다.
  • -f mpegts 옵션은 ffmpeg에 MPEG-TS 패킷을 사용하도록 지시합니다. 이는 mpeg 자체가 일반적으로 가변 비트 전송률이기 때문에 ffmpeg가 일정한 비트 전송률 mpeg 형식을 사용하도록 "강제"합니다.
  • 마지막으로 옵션 udp://239.255.12.42:6666는 udp를 통해 포트 6666을 사용하여이 스트림을 멀티 캐스트 주소 239.255.12.42로 브로드 캐스트하도록 지정합니다. 여기서 멀티 캐스트 주소를 사용하기로 선택한 이유는 가능한 최소한의 처리로 스트림 (미리보기)을 표시하고 동시에 기록해야하기 때문입니다. 이로 인해 오디오 및 비디오 스트림을 두 개의 다른 네트워크 주소로 복사하지 않아도됩니다.

VLC 플레이어를 사용하여이 비디오를 캡처하려면 다음 네트워크 스트리밍 주소를 엽니 다.

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 개의 스레드를 사용합니다.
  • -i udp://239.255.12.42:6666 방송중인 스트림에 연결합니다.
  • -map 0는 ffmpeg에 모든 스트림 (비디오 및 오디오)이 필요하다고 알려줍니다.
  • -acodec copy-vcodec copy 압축/트랜스 코딩을 수행하는 대신 스트림이 그대로 사용되도록합니다.

남아있는 유일한 일은 (현재 진행중인 작업)이를 위해 c # gui를 만드는 것입니다. 기본 워크 플로는 폼이로드 될 때 스트림 프로세스를 생성하는 것입니다. vlc com + 컨트롤을 사용하여 응용 프로그램에서 비디오를 표시하십시오.

그런 다음 기록 버튼을 누르면 다른 프로세스를 생성하여 기록하고 프로세스를 중지하여 기록을 종료합니다.

그러나 녹화를 시작할 때 스트림을 중지하면 녹화/감지가 훨씬 부드럽게 진행됩니다. 스트림이 계속 켜져 있고 녹음을 시작하면 녹음 프로세스가 스트림에 "조정"될 때까지 시간이 걸립니다. 스트림을 중지하고 기록을 시작하고 (스트림이 다시 켜질 때까지 아무 것도하지 않음) 스트림을 다시 시작하면 기록이 아무런 문제없이 첫 번째 프레임에서 픽업됩니다.

이 작은 지연/깜박임은 내 목적에 완전히 허용됩니다.

31
Huron