在 h264 视频上设置假持续时间
Set fake duration on h264 video
我有一个脚本可以从一个地方获取多个视频块并将其作为单个视频流式传输到其他地方(到 Kodi 播放器)。
除了让我困扰的一件事外,一切似乎都很好,播放器似乎不知道视频有多长,因此总持续时间会随着视频播放而增加。
我确实知道 xml 文件的视频持续时间,该文件包含 link 到所有块,但我不知道如何在第一个的元数据中写入它大块。
视频编解码器是 h264,但我不确定它是否封装在某些容器中,例如 mp4。
这是第一个块的 ffmpeg -i
输出:
ffmpeg version 3.1.5 Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.38)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.1.5 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --disable-lzma --enable-vda
libavutil 55. 28.100 / 55. 28.100
libavcodec 57. 48.101 / 57. 48.101
libavformat 57. 41.100 / 57. 41.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 47.100 / 6. 47.100
libavresample 3. 0. 0 / 3. 0. 0
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
[mpegts @ 0x7fc3c6000000] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpegts, from '/Users/ibra/Desktop/daTgXic4JOI.ts':
Duration: 00:00:17.56, start: 0.000000, bitrate: 1220 kb/s
Program 1
Stream #0:0[0x102]: Data: timed_id3 (ID3 / 0x20334449)
Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 150 kb/s
这是在十六进制编辑器中打开的文件的乱七八糟的屏幕截图:
https://www.evernote.com/l/AWlILw5PcmVEl4fSFitOfS2M8Wzy1WTVSZc
关于如何在第一个块的元数据中插入视频持续时间的任何建议?
我无法下载所有块,然后将其合并到一个文件中,因为这会花费太多时间,而且流式传输必须立即进行。
容器格式为mpegts。没有标准的方法来编码 mpegts 中的持续时间(或 h.264 就此而言)。所以无论你做什么都将是专有的。您可以将其写入 ID3 元数据,但随后需要修改 kodi 来处理此问题。
我有一个脚本可以从一个地方获取多个视频块并将其作为单个视频流式传输到其他地方(到 Kodi 播放器)。
除了让我困扰的一件事外,一切似乎都很好,播放器似乎不知道视频有多长,因此总持续时间会随着视频播放而增加。
我确实知道 xml 文件的视频持续时间,该文件包含 link 到所有块,但我不知道如何在第一个的元数据中写入它大块。
视频编解码器是 h264,但我不确定它是否封装在某些容器中,例如 mp4。
这是第一个块的 ffmpeg -i
输出:
ffmpeg version 3.1.5 Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.38)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.1.5 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --disable-lzma --enable-vda
libavutil 55. 28.100 / 55. 28.100
libavcodec 57. 48.101 / 57. 48.101
libavformat 57. 41.100 / 57. 41.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 47.100 / 6. 47.100
libavresample 3. 0. 0 / 3. 0. 0
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
[mpegts @ 0x7fc3c6000000] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpegts, from '/Users/ibra/Desktop/daTgXic4JOI.ts':
Duration: 00:00:17.56, start: 0.000000, bitrate: 1220 kb/s
Program 1
Stream #0:0[0x102]: Data: timed_id3 (ID3 / 0x20334449)
Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 150 kb/s
这是在十六进制编辑器中打开的文件的乱七八糟的屏幕截图: https://www.evernote.com/l/AWlILw5PcmVEl4fSFitOfS2M8Wzy1WTVSZc
关于如何在第一个块的元数据中插入视频持续时间的任何建议?
我无法下载所有块,然后将其合并到一个文件中,因为这会花费太多时间,而且流式传输必须立即进行。
容器格式为mpegts。没有标准的方法来编码 mpegts 中的持续时间(或 h.264 就此而言)。所以无论你做什么都将是专有的。您可以将其写入 ID3 元数据,但随后需要修改 kodi 来处理此问题。