2012-11-01 3 views
2

세그먼트를 만들 때 ffmpeg에서 비디오 세그먼트의 메타 데이터를 변경할 수 있는지 궁금합니다. "-metadata"태그를 사용하면 -i 입력 비디오의 메타 데이터를 변경할 수 있지만 -i 입력 비디오가 "-f 세그먼트"옵션을 사용하여 다른 세그먼트로 분할되는 경우 어떻게해야합니까? -i 입력 비디오가 세그먼트 화되는 동안 결과 세그먼트의 메타 데이터를 변경합니까? 세분화가 완료된 후에는 메타 데이터를 변경할 수 있다는 것을 알고 있지만, 입력 비디오가 세분화되어있을 때 세그먼트를 스트리밍하려는 경우 유용하지 않습니다. 조금 더 나은 설명을 제공하려면Ffmpeg 세그먼트 메타 데이터 변경

ffmpeg -f video4linux2 -s wvga -t ${CAPTURE_DURATION} -i "/dev/video0" -r 30 \ 
-vcodec ${VID_CODEC} -s:v 640x480 -b:v 80k -keyint_min 30 -g 30 \ 
-sc_threshold 0 -map 0 -flags -global_header -qcomp 0.8 \ 
-qmin 10 -qmax 51 -qdiff 4 -f segment -segment_time ${SEG_TIME} \ 
-segment_format ${SEG_FORMAT} -metadata START=0 -y "${LOCATE}${OUTPUT}%01d.${EXTENSION}" 

기본적으로 내가 무엇을 표준 비디오 입력에서 비디오를 촬영하고 분할되는 일을 해요. 비디오 세그먼트가 만들어지면 비디오를 모두 VLC 재생 목록에 던져서 테스트 할 수 있습니다. 세그먼트 형식이 "mp4"일 때 VLC가 비디오 세그먼트를 시작할 때까지 비디오 세그먼트를 시작할 수없는 지연이 있습니다 세그먼트가 원래 동영상에 있던 시간을 다시 재생했습니다. 예를 들어 30 초짜리 비디오를 5 초짜리 세그먼트로 나누면 VLC는 첫 번째 세그먼트를 즉시 재생하지만 첫 번째 세그먼트 재생이 끝난 후 두 번째 세그먼트를 재생하기 전에 5 초를 기다립니다. 두 번째 세그먼트의 시작 시간 메타 데이터가 5 초이므로 VLC는 두 번째 세그먼트를 재생하기 전에 5 초를 기다려야한다고 생각하기 때문에이 작업을 수행합니다. 세그먼트를 만들 때 ffmpeg에 세그먼트 시작 시간 메타 데이터를 0 초로 설정하는 방법이 있다면 궁금합니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

1

소스 코드에 따르면, 당신이 원하는 일을해야 플래그가 :

{ "reset_timestamps", "reset timestamps at the begin of each segment", 
OFFSET(reset_timestamps), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, E } 

대신 -metadata START=0 사용 -reset_timestamps 1하고 모든 세그먼트는 즉시 재생됩니다.