Opencv: VideoWriter์˜ ํ”„๋ ˆ์ž„ ์†๋„ ๋ฐ˜์˜ฌ๋ฆผ ์˜ค๋ฅ˜

์— ๋งŒ๋“  2017๋…„ 06์›” 28์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: opencv/opencv

์‹œ์Šคํ…œ ์ •๋ณด (๋ฒ„์ „)
  • OpenCV => 3.2.0
  • ์šด์˜ ์ฒด์ œ / ํ”Œ๋žซํผ => Ubuntu
  • ์ปดํŒŒ์ผ๋Ÿฌ => GCC 5.4.0 20160609
์ƒ์„ธ ์„ค๋ช…

videoWriter์˜ ํ”„๋ ˆ์ž„ ์†๋„์˜ ๊ฒฝ์šฐ double / float๋ฅผ ํ—ˆ์šฉํ•ด์•ผํ•˜์ง€๋งŒ ์†Œ์ˆ˜์  ๋’ค์˜ ์ˆซ์ž๊ฐ€ 5๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„ ๋•Œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋ฉ๋‹ˆ๋‹ค (์˜ˆ : 25.5์ด์ง€๋งŒ 25.4๋ฅผ ํ†ต๊ณผํ•˜๋ฉด 25๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋ฉ๋‹ˆ๋‹ค.)

๋‹ค์Œ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์นด๋ฉ”๋ผ์—์„œ 50 ํ”„๋ ˆ์ž„ ๋น„๋””์˜ค๋ฅผ ๋…นํ™”ํ•˜๊ณ  ๋…นํ™” ๋œ ๋น„๋””์˜ค์˜ ํ”„๋ ˆ์ž„ ์†๋„๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋‘ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค.

import cv2


fourcc = cv2.VideoWriter_fourcc(*'H264')


vw = cv2.VideoWriter()
vw.open('test2.avi', fourcc, 25.6, (640, 480))

camera = cv2.VideoCapture(0)

for f in range(50):
    _, frame = camera.read()
    vw.write(frame)

vw.release()
c = cv2.VideoCapture('test2.avi')
print(c.get(cv2.CAP_PROP_FPS))

์ถœ๋ ฅ : 25.6

import cv2


fourcc = cv2.VideoWriter_fourcc(*'H264')


vw = cv2.VideoWriter()
vw.open('test2.avi', fourcc, 25.4, (640, 480))

camera = cv2.VideoCapture(0)

for f in range(50):
    _, frame = camera.read()
    vw.write(frame)

vw.release()
c = cv2.VideoCapture('test2.avi')
print(c.get(cv2.CAP_PROP_FPS))

์ถœ๋ ฅ : 25.0

bug videoio

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

์ด ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ffmpeg ๋ž˜ํผ์—๋Š” ํ”„๋ ˆ์ž„ ์†๋„ ๋ฐ˜์˜ฌ๋ฆผ์— ์ž‘์€ ์˜คํƒ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/opencv/opencv/blob/master/modules/videoio/src/cap_ffmpeg_impl.hpp#L1544 ๋ฐ https://github.com/opencv/opencv/blob ์—์„œ ๋‘ ๊ฐ€์ง€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์—

while (fabs((double)frame_rate/frame_rate_base) - fps > 0.001){

ํ›„

while (fabs(((double)frame_rate/frame_rate_base) - fps) > 0.001){

fps=59.15 ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— frame_rate=59 ๋ฐ frame_rate_base=1 ๋ฅผ ํš๋“ํ•˜๊ณ  frame_rate=5915 ๋ฐ frame_rate_base=100 ์žˆ์Šต๋‹ˆ๋‹ค.

๋ž˜ํผ๊ฐ€ ํƒ€์‚ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋˜์–ด ์žˆ๊ณ  ํ•ด๋‹น ๋ถ€๋ถ„์—์„œ ๋นŒ๋“œ ์ง€์นจ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ์ปดํ“จํ„ฐ (Windows ๊ธฐ๋ฐ˜)์—์„œ ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ์ด๋ฏธ PR์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋„์›€์ด ํ•„์š”ํ•˜๋ฉด ๋ง์”€ํ•ด์ฃผ์„ธ์š”.

๋ชจ๋“  3 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

์ด ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ffmpeg ๋ž˜ํผ์—๋Š” ํ”„๋ ˆ์ž„ ์†๋„ ๋ฐ˜์˜ฌ๋ฆผ์— ์ž‘์€ ์˜คํƒ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/opencv/opencv/blob/master/modules/videoio/src/cap_ffmpeg_impl.hpp#L1544 ๋ฐ https://github.com/opencv/opencv/blob ์—์„œ ๋‘ ๊ฐ€์ง€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์—

while (fabs((double)frame_rate/frame_rate_base) - fps > 0.001){

ํ›„

while (fabs(((double)frame_rate/frame_rate_base) - fps) > 0.001){

fps=59.15 ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— frame_rate=59 ๋ฐ frame_rate_base=1 ๋ฅผ ํš๋“ํ•˜๊ณ  frame_rate=5915 ๋ฐ frame_rate_base=100 ์žˆ์Šต๋‹ˆ๋‹ค.

๋ž˜ํผ๊ฐ€ ํƒ€์‚ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋˜์–ด ์žˆ๊ณ  ํ•ด๋‹น ๋ถ€๋ถ„์—์„œ ๋นŒ๋“œ ์ง€์นจ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ์ปดํ“จํ„ฐ (Windows ๊ธฐ๋ฐ˜)์—์„œ ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ์ด๋ฏธ PR์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋„์›€์ด ํ•„์š”ํ•˜๋ฉด ๋ง์”€ํ•ด์ฃผ์„ธ์š”.

@WydD ์ข‹์€ ์บ์น˜! 3.4 ๋ธŒ๋žœ์น˜์— PR์„ ์ž์œ ๋กญ๊ฒŒ ์˜คํ”ˆํ•˜์„ธ์š”. OpenCV CI์—์„œ ํ…Œ์ŠคํŠธ๋ฉ๋‹ˆ๋‹ค.

@alalek ๋น ๋ฅธ ๋‹ต์žฅ์„ ๋ณด๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. PR์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰