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 将立即播放第 1 片段,但在第 1 片段播放完毕后,它会等待 5 秒再播放第 2 片段。这样做是因为第 2 段的开始时间元数据为 5 秒,因此 VLC 认为它必须等待 5 秒才能播放第 2 段。我想知道的是如果有' 一种告诉 ffmpeg 在创建段时将段开始时间元数据设置为 0 秒的方法。任何帮助将不胜感激。

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 回答