2012-11-01 36 views
2

我想知道是否完全可以在創建段時更改ffmpeg中的視頻段的元數據。我知道通過使用「-metadata」標籤,您可以更改-i輸入視頻的元數據,但是如果通過「-f segment」選項將-i輸入視頻分割爲不同的片段,那麼您將如何在-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和所有的段將立即開始播放。