美文网首页
FFmpeg转封装(4)

FFmpeg转封装(4)

作者: Goning | 来源:发表于2019-01-22 18:03 被阅读13次

M3U8在FFmpeg中的Muxer


查看HLS文件的Muxer信息
ffmpeg -h muxer=hls
ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
  configuration: 
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
Muxer hls [Apple HTTP Live Streaming]:
    Common extensions: m3u8.
    Default video codec: h264.
    Default audio codec: aac.
    Default subtitle codec: webvtt.
hls muxer AVOptions:
  -start_number      <int64>      E........ set first number in the sequence (from 0 to I64_MAX) (default 0)
  -hls_time          <float>      E........ set segment length in seconds (from 0 to FLT_MAX) (default 2)
  -hls_init_time     <float>      E........ set segment length in seconds at init list (from 0 to FLT_MAX) (default 0)
  -hls_list_size     <int>        E........ set maximum number of playlist entries (from 0 to INT_MAX) (default 5)
  -hls_delete_threshold <int>        E........ set number of unreferenced segments to keep before deleting (from 1 to INT_MAX) (default 1)
  -hls_ts_options    <string>     E........ set hls mpegts list of options for the container format used for hls
  -hls_vtt_options   <string>     E........ set hls vtt list of options for the container format used for hls
  -hls_wrap          <int>        E........ set number after which the index wraps (will be deprecated) (from 0 to INT_MAX) (default 0)
  -hls_allow_cache   <int>        E........ explicitly set whether the client MAY (1) or MUST NOT (0) cache media segments (from INT_MIN to INT_MAX) (default -1)
  -hls_base_url      <string>     E........ url to prepend to each playlist entry
  -hls_segment_filename <string>     E........ filename template for segment files
  -hls_segment_size  <int>        E........ maximum size per segment file, (in bytes) (from 0 to INT_MAX) (default 0)
  -hls_key_info_file <string>     E........ file with key URI and key file path
  -hls_enc           <boolean>    E........ enable AES128 encryption support (default false)
  -hls_enc_key       <string>     E........ hex-coded 16 byte key to encrypt the segments
  -hls_enc_key_url   <string>     E........ url to access the key to decrypt the segments
  -hls_enc_iv        <string>     E........ hex-coded 16 byte initialization vector
  -hls_subtitle_path <string>     E........ set path of hls subtitles
  -hls_segment_type  <int>        E........ set hls segment files type (from 0 to 1) (default mpegts)
     mpegts                       E........ make segment file to mpegts files in m3u8
     fmp4                         E........ make segment file to fragment mp4 files in m3u8
  -hls_fmp4_init_filename <string>     E........ set fragment mp4 file init filename (default "init.mp4")
  -hls_flags         <flags>      E........ set flags affecting HLS playlist and media file generation (default 0)
     single_file                  E........ generate a single media file indexed with byte ranges
     temp_file                    E........ write segment to temporary file and rename when complete
     delete_segments              E........ delete segment files that are no longer part of the playlist
     round_durations              E........ round durations in m3u8 to whole numbers
     discont_start                E........ start the playlist with a discontinuity tag
     omit_endlist                 E........ Do not append an endlist when ending stream
     split_by_time                E........ split the hls segment by time which user set by hls_time
     append_list                  E........ append the new segments into old hls segment list
     program_date_time              E........ add EXT-X-PROGRAM-DATE-TIME
     second_level_segment_index              E........ include segment index in segment filenames when use_localtime
     second_level_segment_duration              E........ include segment duration in segment filenames when use_localtime
     second_level_segment_size              E........ include segment size in segment filenames when use_localtime
     periodic_rekey               E........ reload keyinfo file periodically for re-keying
     independent_segments              E........ add EXT-X-INDEPENDENT-SEGMENTS, whenever applicable
  -use_localtime     <boolean>    E........ set filename expansion with strftime at segment creation(will be deprecated ) (default false)
  -strftime          <boolean>    E........ set filename expansion with strftime at segment creation (default false)
  -use_localtime_mkdir <boolean>    E........ create last directory component in strftime-generated filename(will be deprecated) (default false)
  -strftime_mkdir    <boolean>    E........ create last directory component in strftime-generated filename (default false)
  -hls_playlist_type <int>        E........ set the HLS playlist type (from 0 to 2) (default 0)
     event                        E........ EVENT playlist
     vod                          E........ VOD playlist
  -method            <string>     E........ set the HTTP method(default: PUT)
  -hls_start_number_source <int>        E........ set source of first number in sequence (from 0 to 2) (default generic)
     generic                      E........ start_number value (default)
     epoch                        E........ seconds since epoch
     datetime                     E........ current datetime as YYYYMMDDhhmmss
  -http_user_agent   <string>     E........ override User-Agent field in HTTP header
  -var_stream_map    <string>     E........ Variant stream map string
  -cc_stream_map     <string>     E........ Closed captions stream map string
  -master_pl_name    <string>     E........ Create HLS master playlist with this name
  -master_pl_publish_rate <int>        E........ Publish master play list every after this many segment intervals (from 0 to UINT32_MAX) (default 0)
  -http_persistent   <boolean>    E........ Use persistent HTTP connections (default false)
  -timeout           <duration>   E........ set timeout for socket I/O operations (default -0.000001)

转HLS
ffmpeg -re -i 111.mp4 -c copy -f hls -bsf:v h264_mp4toannexb 444.m3u8

"-bsf:v h264_mp4toannexb"参数的作用是将MP4中的H.264数据转换为常见于实时传输流的H.264 AnnexB标准的编码。

ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
  configuration: 
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '111.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: mp41avc1qt  
    creation_time   : 2017-02-04T01:33:49.000000Z
    playback_requirements: QuickTime 6.0 or greater
    playback_requirements-eng: QuickTime 6.0 or greater
    encoder         : vlc 2.1.5 stream output
    encoder-eng     : vlc 2.1.5 stream output
  Duration: 00:01:21.89, start: 0.000000, bitrate: 2037 kb/s
    Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 16000 Hz, mono, fltp, 23 kb/s (default)
    Metadata:
      creation_time   : 2017-02-04T01:33:49.000000Z
      handler_name    : SoundHandler
    Stream #0:1(eng): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080, 2009 kb/s, 25 fps, 25 tbr, 1000k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2017-02-04T01:33:49.000000Z
      handler_name    : VideoHandler
[hls @ 0x7fb872005000] Opening '4440.ts' for writing
Output #0, hls, to '444.m3u8':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: mp41avc1qt  
    encoder         : Lavf58.20.100
    playback_requirements: QuickTime 6.0 or greater
    playback_requirements-eng: QuickTime 6.0 or greater
    Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080, q=2-31, 2009 kb/s, 25 fps, 25 tbr, 90k tbn, 25 tbc (default)
    Metadata:
      creation_time   : 2017-02-04T01:33:49.000000Z
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 16000 Hz, mono, fltp, 23 kb/s (default)
    Metadata:
      creation_time   : 2017-02-04T01:33:49.000000Z
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:1 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
[hls @ 0x7fb872005000] Opening '4441.ts' for writing bitrate=N/A speed=1.03x    
[hls @ 0x7fb872005000] Cannot use rename on non file protocol, this may lead to races and temporary partial files
[hls @ 0x7fb872005000] Opening '4442.ts' for writing bitrate=N/A speed=1.02x    
[hls @ 0x7fb872005000] Opening '4443.ts' for writing bitrate=N/A speed=1.01x    
[hls @ 0x7fb872005000] Opening '4444.ts' for writing bitrate=N/A speed=1.01x    
[hls @ 0x7fb872005000] Opening '4445.ts' for writing bitrate=N/A speed=1.01x    
[hls @ 0x7fb872005000] Opening '4446.ts' for writing bitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '4447.ts' for writing bitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '4448.ts' for writing bitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '4449.ts' for writing bitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44410.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44411.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44412.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44413.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44414.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44415.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44416.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44417.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44418.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44419.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44420.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44421.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44422.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44423.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44424.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44425.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44426.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44427.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44428.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44429.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44430.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44431.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44432.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44433.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44434.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44435.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44436.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44437.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44438.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44439.ts' for writingbitrate=N/A speed=   1x    
[hls @ 0x7fb872005000] Opening '44440.ts' for writingbitrate=N/A speed=   1x    
frame= 2048 fps= 25 q=-1.0 Lsize=N/A time=00:01:21.92 bitrate=N/A speed=   1x    
video:20085kB audio:231kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

start_number参数
ffmpeg -re -i 111.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -start_number 300 444.m3u8

如图,切片的第一片的编号是300已生效。


hls_time参数
ffmpeg -re -i 111.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -hls_time 10 444.m3u8

如图,此参数的作用是设置转码切片的duration为10秒左右一片(从关键帧处开始切片)。


hls_list_size参数
ffmpeg -re -i 111.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -hls_list_size 3 444.m3u8

如图,在M3U8文件中最多只有3个TS分片。


hls_wrap参数
ffmpeg -re -i 111.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -hls_wrap 3 444.m3u8

如图,参数的作用是设置刷新回滚参数,当TS分片序号等于3时回滚。


hls_base_url参数
ffmpeg -re -i 111.mp4 -c copy -f hls -hls_base_url http://172.18.31.34/live/ -bsf:v h264_mp4toannexb 444.m3u8

如图,参数设置了每个TS文件的前置基本路径。


hls_segment_filename参数
ffmpeg -re -i 111.mp4 -c copy -f hls -hls_segment_filename test_output-%d.ts -bsf:v h264_mp4toannexb 444.m3u8

如图,此参数的作用是设置HLS的TS分片前缀名。


hls_flags参数
  • delete_segments子参数
ffmpeg -re -i 111.mp4 -c copy -f hls -hls_flags delete_segments -hls_list_size 4 -bsf:v h264_mp4toannexb 444.m3u8

如图,参数作用是只保留设置的切片个数,删除其他早期的切片。

  • round_durations子参数
ffmpeg -re -i 111.mp4 -c copy -f hls -hls_flags round_durations -bsf:v h264_mp4toannexb 444.m3u8

如图,round_durations参数可以实现切片信息的duration时长为整形。

  • discont_start子参数
ffmpeg -re -i 111.mp4 -c copy -f hls -hls_flags discont_start -bsf:v h264_mp4toannexb 444.m3u8

如图,该参数在生成M3U8的时候在切片信息的前面插入discontinuity标签,常用于在切片不连续时作特别声明。

  • omit_endlist子参数
ffmpeg -re -i 111.mp4 -c copy -f hls -hls_flags omit_endlist -bsf:v h264_mp4toannexb 444.m3u8

如图,该参数在生成M3U8结束的时候不写入endlist标签。

上图为不使用omit_endlist参数生成的M3U8文件。

  • split_by_time子参数
ffmpeg -re -i 111.mp4 -c copy -f hls -hls_time 2 -hls_flags split_by_time -bsf:v h264_mp4toannexb 444.m3u8

该参数的作用为当生成的切片在没有遇到关键帧时依然可以与hls_time设置的切片时长相差不多,所以此参数必须要与hls_time配合使用。


use_localtime参数
ffmpeg -re -i 111.mp4 -c copy -f hls -use_localtime 1 -bsf:v h264_mp4toannexb 444.m3u8

如图,使用use_localtime参数可以以本地系统时间为切片文件名。


相关文章

  • FFmpeg转封装(4)

    M3U8在FFmpeg中的Muxer 查看HLS文件的Muxer信息 转HLS "-bsf:v h264_mp4t...

  • ffmpeg封装和转码参数说明

    ffmpeg封装参数 ffmpeg的封装转换(转封装)功能包含在AVFormat模块中,通过libavformat...

  • FFmpeg转封装(remuxing)

    目录 参考 转封装流程介绍 FFmpeg流程 示例代码 1. 参考 [1] FFmpeg\doc\examples...

  • ffmpeg # 转封装 函数

    转封装中,用av_read_frame来读取文件的音视频数据。其实在avformat_find_stream_in...

  • FFmpeg转封装(1)

    MP4在FFmpeg中的Demuxer 查看MP4文件的Demuxer信息

  • FFmpeg转封装(3)

    FLV在FFmpeg中的Muxer 查看FLV文件的Muxer信息 转FLV 生成带关键索引的FLV ffprob...

  • FFmpeg转封装(5)

    FFmpeg使用segment参数进行切片 1.segment_format指定切片文件的格式 将一个MP4文件切...

  • FFmpeg转封装(6)

    FFmpeg使用ss与t参数进行切片 1.使用ss指定剪切开头部分 从一个视频文件的第10秒钟开始截取内容 使用f...

  • FFmpeg转封装(2)

    MP4在FFmpeg中的Muxer faststart参数使用案例 1.默认情况下ffmpeg生成moov是在md...

  • FFmpeg转封装(7)

    音视频文件音视频流抽取 1.FFmpeg抽取音视频文件中的AAC音频流 2.FFmpeg抽取音视频文件中的H.26...

网友评论

      本文标题:FFmpeg转封装(4)

      本文链接:https://www.haomeiwen.com/subject/eqkhjqtx.html