为什么 DASH 视频片段无法使用 ffmpeg 重现或读取?
Why DASH video fragments are not reproducible nor readable with ffmpeg?
我正在通过 FFmpeg 使用 DASH 流式传输实时视频。一切正常,片段生成,mpd文件,但我想有可重现的独立片段。视频播放器不会打开这些片段。我想这是因为它们依赖于 mpd 文件。我的问题是:这些片段能否以可重现的方式生成?我不知道它是否与 I P B 帧有关,或者只是破折号切割视频信息的方式,在某种程度上它只在 mpd 上保存 'timeline'...
我的目的不仅是能够单独复制它们,而且我需要在视频的元数据标签中插入信息,而 ffmpeg 不会让我读取那些直播生成的片段。
FFmpeg 输入信息命令的行为如下:
输入:
ffmpeg -i /path/video0-0-1.mp4
输出:
ffmpeg version N-97777-g3b5a36c56d Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 11.0.3 (clang-1103.0.32.59)
configuration: --enable-gpl --enable-libx264
libavutil 56. 45.100 / 56. 45.100
libavcodec 58. 84.100 / 58. 84.100
libavformat 58. 43.100 / 58. 43.100
libavdevice 58. 9.103 / 58. 9.103
libavfilter 7. 81.100 / 7. 81.100
libswscale 5. 6.101 / 5. 6.101
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb324009400] could not find corresponding track id 1
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb324009400] could not find corresponding trex (id 1)
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb324009400] could not find corresponding track id 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb324009400] trun track id unknown, no tfhd was found
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb324009400] error reading header
/path/video0-0-1.mp4: Invalid data found when processing input
我在 JS 上使用 fluent-ffmpeg 执行此 FFmpeg 代码以生成片段:
var ffmpeg = require('fluent-ffmpeg');
var grabacion = new ffmpeg();
grabacion.addInput('0')
.inputOptions(['-y -nostdin', '-f avfoundation', '-video_size 1280x720', '-pix_fmt nv12', '-framerate 30'])
.outputOptions(['-vcodec libx264', '-keyint_min 0', '-g 100', '-map 0:v', '-b:v 1000k', '-f dash',
'-use_template 1', '-use_timeline 0', '-init_seg_name video0-$RepresentationID$-$Number$.mp4',
'-media_seg_name video0-$RepresentationID$-$Number$.mp4', '-remove_at_exit 0', '-window_size 20', '-seg_duration 4'])
.output('/path/path/path/video.mpd')
.run();
因此,最终目的是能够插入这样的标签:
ffmpeg -i video0-0-0.mp4 -movflags use_metadata_tags -metadata sample_tag=whateveryouwanttoadd video0-0-0-tagged.mp4
有什么办法吗?提前致谢!
通常DASH中的第一段是包含轨道信息的初始化段。所有后续片段都包含媒体样本。因此,如果您想解码任意段,则必须在其前面加上初始化段。
cat /path/video0-0-init.mp4 /path/video0-0-1.mp4 > /path/video_can_be_decoded.mp4
ffmpeg -i /path/video_can_be_decoded.mp4
我正在通过 FFmpeg 使用 DASH 流式传输实时视频。一切正常,片段生成,mpd文件,但我想有可重现的独立片段。视频播放器不会打开这些片段。我想这是因为它们依赖于 mpd 文件。我的问题是:这些片段能否以可重现的方式生成?我不知道它是否与 I P B 帧有关,或者只是破折号切割视频信息的方式,在某种程度上它只在 mpd 上保存 'timeline'...
我的目的不仅是能够单独复制它们,而且我需要在视频的元数据标签中插入信息,而 ffmpeg 不会让我读取那些直播生成的片段。
FFmpeg 输入信息命令的行为如下:
输入:
ffmpeg -i /path/video0-0-1.mp4
输出:
ffmpeg version N-97777-g3b5a36c56d Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 11.0.3 (clang-1103.0.32.59)
configuration: --enable-gpl --enable-libx264
libavutil 56. 45.100 / 56. 45.100
libavcodec 58. 84.100 / 58. 84.100
libavformat 58. 43.100 / 58. 43.100
libavdevice 58. 9.103 / 58. 9.103
libavfilter 7. 81.100 / 7. 81.100
libswscale 5. 6.101 / 5. 6.101
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb324009400] could not find corresponding track id 1
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb324009400] could not find corresponding trex (id 1)
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb324009400] could not find corresponding track id 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb324009400] trun track id unknown, no tfhd was found
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb324009400] error reading header
/path/video0-0-1.mp4: Invalid data found when processing input
我在 JS 上使用 fluent-ffmpeg 执行此 FFmpeg 代码以生成片段:
var ffmpeg = require('fluent-ffmpeg');
var grabacion = new ffmpeg();
grabacion.addInput('0')
.inputOptions(['-y -nostdin', '-f avfoundation', '-video_size 1280x720', '-pix_fmt nv12', '-framerate 30'])
.outputOptions(['-vcodec libx264', '-keyint_min 0', '-g 100', '-map 0:v', '-b:v 1000k', '-f dash',
'-use_template 1', '-use_timeline 0', '-init_seg_name video0-$RepresentationID$-$Number$.mp4',
'-media_seg_name video0-$RepresentationID$-$Number$.mp4', '-remove_at_exit 0', '-window_size 20', '-seg_duration 4'])
.output('/path/path/path/video.mpd')
.run();
因此,最终目的是能够插入这样的标签:
ffmpeg -i video0-0-0.mp4 -movflags use_metadata_tags -metadata sample_tag=whateveryouwanttoadd video0-0-0-tagged.mp4
有什么办法吗?提前致谢!
通常DASH中的第一段是包含轨道信息的初始化段。所有后续片段都包含媒体样本。因此,如果您想解码任意段,则必须在其前面加上初始化段。
cat /path/video0-0-init.mp4 /path/video0-0-1.mp4 > /path/video_can_be_decoded.mp4
ffmpeg -i /path/video_can_be_decoded.mp4