将M3U8转换为MKV时,如何从HLS段创建章节?

米哈伊尔(Mikhail T.)

我正在使用ffmpeg将具有数十个段的现有M3U8转换为MKV:

ffmpeg -i http://example.com/foo.m3u8 -c copy foo.mkv

FFMpeg将M3U8中列出的段粘合在一起,结果是一个整体的MKV ...鉴于有人已经将原始文件拆分成多个部分,我想将信息保留在生成的MKV中并创建每个细分的一章。我可以要求ffmpeg记录吗?


以下是ffmpeg -i在注释中请求的输出

% ffmpeg -i Marie-Octobre.m3u8 
ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers
  built with FreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512
  configuration: --prefix=/opt --mandir=/opt/man --datadir=/opt/share/ffmpeg --pkgconfigdir=/opt/libdata/pkgconfig --enable-shared --enable-gpl --enable-postproc --enable-avfilter --enable-avresample --enable-pthreads --cc=cc --disable-indev=alsa --disable-outdev=alsa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcelt --disable-chromaprint --enable-libdc1394 --disable-debug --disable-htmlpages --disable-libebur128 --enable-libfdk-aac --enable-ffserver --enable-libflite --enable-fontconfig --enable-libfreetype --enable-frei0r --enable-libfribidi --enable-libgme --enable-libgsm --enable-iconv --enable-libilbc --disable-indev=jack --enable-libkvazaar --enable-ladspa --enable-libmp3lame --enable-libbluray --enable-mmx --enable-libmodplug --enable-netcdf --enable-openal --enable-opencl --enable-libopencv --enable-opengl --enable-libopenh264 --enable-libopenjpeg --enable-libopus --disable-libpulse --disable-indev=pulse --disable-outdev=pulse --enable-runtime-cpudetect --enable-librubberband --enable-libschroedinger --enable-ffplay --disable-libsmbclient --enable-libsnappy --disable-indev=sndio --disable-outdev=sndio --disable-libsoxr --enable-libspeex --enable-sse --disable-libssh --disable-libtesseract --enable-libtheora --enable-libtwolame --disable-libv4l2 --disable-indev=v4l2 --disable-outdev=v4l2 --enable-vaapi --enable-vdpau --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libvpx --enable-libwavpack --enable-libwebp --enable-x11grab --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-libzimg --enable-libzmq --disable-libzvbi --disable-gcrypt --disable-gmp --enable-librtmp --disable-gnutls --enable-openssl --enable-version3 --enable-nonfree
  libavutil      55. 34.100 / 55. 34.100
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.100 / 57. 56.100
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
Input #0, hls,applehttp, from 'Marie-Octobre.m3u8':
  Duration: 01:34:35.48, start: 0.101000, bitrate: 0 kb/s
  Program 0 
    Metadata:
      variant_bitrate : 0
    Stream #0:0: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, smpte170m/smpte170m/bt709), 640x384, 25 fps, 25 tbr, 90k tbn, 180k tbc
    Metadata:
      variant_bitrate : 0
    Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp
    Metadata:
      variant_bitrate : 0
    Stream #0:2: Data: timed_id3 (ID3  / 0x20334449)
    Metadata:
      variant_bitrate : 0
At least one output file must be specified

实际的M38U文件列出了以下片段的分数:

#EXTM3U
#EXT-X-TARGETDURATION:24
#EXT-X-ALLOW-CACHE:YES
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:16.000,
seg-1-v1-a1.ts
#EXTINF:16.000,
seg-2-v1-a1.ts
#EXTINF:24.000,
seg-3-v1-a1.ts
#EXTINF:24.000,
seg-4-v1-a1.ts
#EXTINF:24.000,
...

我希望每个部分都成为最终MKV的“章节”。

slhck

ffmpeg本身无法做到这一点,因为您所指的是HLS段,而不是M3U8流指定的实际章节。ffmpeg解析该流并将其视为单个视频流。因此,您需要做的是:

  • 解析M3U8文件
  • 根据MKV章节格式规范创建自己的章节列表
  • 使用mkvmerge这些章节添加到FFmpeg的产生的MKV文件

更具体地说,您想解析M3U8并提取每个段长度(由所指定EXTINF)及其名称:

#EXTINF:16.000,
seg-1-v1-a1.ts
#EXTINF:16.000,
seg-2-v1-a1.ts
#EXTINF:24.000,
seg-3-v1-a1.ts
#EXTINF:24.000,
seg-4-v1-a1.ts
#EXTINF:24.000,

然后,为每个分段创建一个新章节,其开始设置为累积的分段持续时间,名称设置为分段名称:

CHAPTER01=00:00:00.000
CHAPTER01NAME=seg-1-v1-a1.ts
CHAPTER02=00:00:16.000
CHAPTER02NAME=seg-2-v1-a1.ts
CHAPTER03=00:00:32.000
CHAPTER03NAME=seg-3-v1-a1.ts
CHAPTER04=00:00:56.000
CHAPTER04NAME=seg-4-v1-a1.ts
...

可以使用Bash脚本或Python来完成此操作,无论哪种编程语言最适合您。(我现在没有时间编写脚本,但是您明白了。)

将该文件另存为chapters.txt

然后,安装mkvtoolnix并运行:

mkvmerge input.mkv --chapters chapters.txt -o output.mkv

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在转换为m3u8时ffmpeg修剪视频?

来自分类Dev

将HLS .m3u8文件及其段文件.ts存储在cassandra数据库中是否很好?

来自分类Dev

如何使用ffmpeg加密AES-128 HLS m3u8播放列表?

来自分类Dev

正在下载的 .m3u8 视频转换为 mp4 导致麻烦

来自分类Dev

从HLS流中提取元数据(m3u8文件)

来自分类Dev

在Windows Phone 8.1上播放HLS(m3u8播放列表)

来自分类Dev

在Cocoa OS X AVPlayer中播放HLS(m3u8)-Swift

来自分类Dev

从HLS流中提取元数据(m3u8文件)

来自分类Dev

仅播放音频HLS(m3u8)和MPEG DASH(mpd)

来自分类Dev

在Cocoa OS X AVPlayer中播放HLS(m3u8)-Swift

来自分类Dev

损坏的HLS M3U8文件可在VLC上使用

来自分类Dev

解析 HLS m3u8 正则表达式

来自分类Dev

AVPlayer播放m3u8流时如何捕获图像?

来自分类Dev

如何播放m3u8文件?

来自分类Dev

如何播放m3u8文件?

来自分类Dev

如何将.m2ts转换为.mkv?

来自分类Dev

如何将.m2ts转换为.mkv?

来自分类Dev

如何解析m3u8并获取不同的bitttrate子m3u8网址?

来自分类Dev

VLC 只播放 m3u8 文件的最后一段?

来自分类Dev

下载m3u8视频

来自分类Dev

在播放实时流时,将参数附加到每个m3u8和ts文件

来自分类Dev

iOS 7 Safari:jwplayer不发送cookie来加载m3u8文件(加密的hls流)

来自分类Dev

如何使用ffmpeg为wmv和avi视频文件生成m3u8文件和TS段文件列表

来自分类Dev

PHP:如何将特殊的组合字符从UTF-8转换为Latin 3

来自分类Dev

如何将字符串\\ u6d4e \\ u5357 \\ u5e02转换为utf-8数据

来自分类Dev

将&i64转换为&[u8;的惯用方式是什么?8]?

来自分类Dev

我可以将多个m3u8文件合并为一个m3u8文件吗?

来自分类Dev

如何将.mp3转换为.flac?

来自分类Dev

通过声音将m3u8流到mp4

Related 相关文章

热门标签

归档