3

セグメントが作成されているときに、ffmpeg のビデオ セグメントのメタデータを変更することがまったく可能かどうか疑問に思っていました。「-metadata」タグを使用すると、-i 入力ビデオのメタデータを変更できることはわかっていますが、その -i 入力ビデオが「-f セグメント」オプションによって異なるセグメントに分割されている場合、どうすればよいですか? -i 入力ビデオのセグメント化中に、結果のセグメントのメタデータを変更しますか? セグメント化が完了した後にメタデータを変更できることはわかっていますが、入力ビデオがセグメント化されているときにセグメントをライブでストリーミングしようとしているので、これはあまり役に立ちません。もう少し説明を加えるには:

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 は最初のセグメントをすぐに再生しますが、最初のセグメントの再生が終了した後、2 番目のセグメントを再生する前に 5 秒待機します。これは、2 番目のセグメントの開始時間のメタデータが 5 秒であるため、VLC は 2 番目のセグメントを再生する前に 5 秒間待機する必要があると考えているためです。私が疑問に思っているのは、あるのかということです」セグメントが作成されているときにセグメント開始時間のメタデータを 0 秒に設定するように ffmpeg に指示する方法。どんな助けでも大歓迎です。

4

1 に答える 1

2

ソースコードによると、あなたが望むことをするべきフラグがあります:

{ "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、すべてのセグメントがすぐに再生を開始します。

于 2013-01-25T14:32:14.057 に答える