嘗試以更高解析度錄製影片時 ffmpeg 掛起

嘗試以更高解析度錄製影片時 ffmpeg 掛起

我正在嘗試使用 USB 攝像頭錄製一些視頻,但在使用ffmpeg.

如果我運行ffmpeg -f video4linux2 -t 00:00:10 -i /dev/video0 out.mpg,程式會嘗試以 640x480 解析度進行錄製並ffmpeg掛起。

但是,如果我添加-sffmpeg以低於 640x480 的解析度(例如 320x240)錄製,則錄影成功。

掛起後,如果我點擊CTRL+C,ffmpeg 將會恢復,產生大小為 0 kB 的檔案。使用strace我可以看到ioctl對設備的呼叫保持 returns-EINVAL和後續的ioctlreturn -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)

有什麼想法為什麼會發生這種情況嗎?

我使用的是ffmpeg2.8.7 版本,透過busybox1.25 建置。主機架構是運行核心 3.2 的 ARM 處理器。

我也嘗試從源代碼編譯最新版本,但問題仍然存在...

答案1

找出原因:轉碼和原始資料量。

使用我的問題中提到的命令行,我正在讀取原始格式(yuv422),並將其轉碼為 mpeg-1,這是我的ffmpeg.從相機串流的資料量對於處理器來說實在太多,導致掛起。我使用的相機也能夠以壓縮格式(mjpeg)進行串流傳輸。透過切換到這種格式,ffmpeg不再掛起,並且能夠以 15 fps 的速度進行錄製。

然而,有一個轉碼步驟,從 mjpeg 到 mpeg-1。透過ffmpeg告訴複製串流、刪除最後的轉碼步驟,我能夠達到更高的 fps 計數。

相關內容