더 높은 해상도로 비디오를 녹화하려고 하면 ffmpeg가 중단됩니다.

더 높은 해상도로 비디오를 녹화하려고 하면 ffmpeg가 중단됩니다.

USB 카메라를 사용하여 일부 동영상을 녹화하려고 하는데 를 사용할 때 몇 가지 문제가 있습니다 ffmpeg.

을 실행하면 ffmpeg -f video4linux2 -t 00:00:10 -i /dev/video0 out.mpg프로그램이 640x480 해상도로 녹화를 시도하다가 ffmpeg중단됩니다.

하지만 를 추가하여 640x480(예: 320x240)보다 낮은 해상도로 녹화하면 -s동영상 ffmpeg이 성공적으로 녹화됩니다.

정지 후 를 누르면 CTRL+Cffmpeg가 다시 시작되어 크기가 0kB인 파일이 생성됩니다. 를 사용하면 장치에 대한 호출이 return 을 유지 하고 후속 s return 을 유지 strace하는 것을 볼 수 있습니다 .ioctl-EINVALioctl-EAGAIN

ioctl(3, VIDIOC_G_STD, 0xbe84dfb0)      = -1 EINVAL (Invalid argument)
ioctl(3, VIDIOC_DQBUF, {type=V4L2_BUF_TYPE_VIDEO_CAPTURE}) = -1 EAGAIN (Resource temporarily unavailable)

왜 이런 일이 발생하는지 아시나요?

저는 1.25 ffmpeg까지 빌드된 버전 2.8.7을 사용하고 있습니다 busybox. 호스트 아키텍처는 커널 3.2를 실행하는 ARM 프로세서입니다.

또한 소스에서 최신 버전을 컴파일해 보았지만 문제가 지속됩니다...

답변1

이유를 알아냈습니다: 트랜스코딩 및 원시 데이터 볼륨.

내 질문에 언급된 명령줄을 사용하여 원시 형식(yuv422)에서 읽고 이를 내 버전의 기본 인코딩인 mpeg-1로 트랜스코딩했습니다 ffmpeg. 카메라에서 스트리밍되는 데이터 양이 프로세서에 너무 많아서 중단이 발생했습니다. 제가 사용하고 있던 카메라는 압축 형식(mjpeg)으로도 스트리밍이 가능했습니다. 이 형식으로 전환하면 ffmpeg더 이상 정지되지 않고 15fps로 녹화할 수 있게 되었습니다.

그러나 mjpeg에서 mpeg-1로 트랜스코딩하는 단계가 있었습니다. ffmpeg마지막 트랜스코딩 단계를 제거하고 스트림을 복사하라고 지시하여 더 높은 fps 수에 도달할 수 있었습니다 .

관련 정보