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):
[1] 学好 MP4,让直播更给力