本文主要是介绍fmp4码率统计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我使用的视频是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/2f_h.write(str(i)+"\t"+str(segment)+"\t"+str(rate)+"\n")
f_h.close()
画图,x代表片,y代表速率(kbps):
[1] 学好 MP4,让直播更给力
这篇关于fmp4码率统计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!