欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

fmp4码率统计

程序员文章站 2022-03-22 20:51:52
...

 我使用的视频是peaky blinders的S01E01,文件格式为mkv,大小550KB,时长56min,1024x544。
 使用ffmpeg将mkv重新打包为mp4。

ffmpeg -i input.mkv -y -vcodec copy -acodec copy output.mp4

 使用ffmpeg,将mp4生成m4s的小文件,需要重新编码。每两秒生成一个片,编码速率设置为2Mbps。

ffmpeg -y \
  -i trailer_hd.mp4 \
  -force_key_frames "expr:gte(t,n_forced*2)" \
  -sc_threshold 0 \
  -s 1024x544\
  -c:v libx264 -b:v 2000k \
  -c:a copy \
  -hls_time 1 \
  -hls_playlist_type vod \
  -hls_segment_type fmp4 \
  -hls_segment_filename "fileSequence%d.m4s" \
  prog_index.m3u8

 生成的一段m3u8文件:

#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="init.mp4"
#EXTINF:2.000000,
fileSequence0.m4s
#EXTINF:2.000000,
fileSequence1.m4s
#EXTINF:2.000000,
fileSequence2.m4s
#EXTINF:2.000000,
fileSequence3.m4s

 一共生成了1000个片,统计每个片的大小,并计算速率。
printSize.py

import os
#ffplay -autoexit output.mp4
#cat init.mp4 *.m4s > output.mp4
# ffmpeg -i  output.mp4
def get_FileSize(filePath):
    fsize = os.path.getsize(filePath)
    fsize = fsize*8/float(1024)
    return round(fsize, 2)
    
prefix="fileSequence%s.m4s"
f_h=open("data_out.txt",'w')
total=1000
for i in range(total):
    filepath=prefix%str(i)
    segment=get_FileSize(filepath)
    rate=segment/2
    f_h.write(str(i)+"\t"+str(segment)+"\t"+str(rate)+"\n")
f_h.close()

 画图,x代表片,y代表速率(kbps):
fmp4码率统计

[1] 学好 MP4,让直播更给力