더 높은 해상도로 비디오를 녹화하려고 하면 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 및 후속 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 수를 달성할 수 있었습니다 .

관련 정보