ffmpeg把ts文件转m3u8并切片

Linux_x86_64流媒体环境:nginx + EasyDarwin-master

客户端播放器:VLC media player

下载windows下的ffmepg二进制版本,请进网站http://ffmpeg.zeranoe.com/builds/win32/shared|static 最新版本,无需自己编译。

下载完解压后,需要配置ffmepg的path环境变量。Path=%Path%;E:ffmpeg-20151117-git-e9aea6d-win64-staticffmpeg-20151117-git-e9aea6d-win64-staticin

下面流转换和切片的方式:

ffmpeg -ss 01:00:00 -i input_file_h264.mp4 -vcodec copy -acodec copy -t 00:06:00 output_file.mp4

------------------------------

利用ffmpeg将已有的视频文件转换成ts文件

  ffmpeg -y -i <in file> -vcodec copy -acodec copy -vbsf h264_mp4toannexb <output file>

其中in file为待转换的视频文件,比如input.mov,output file为转换后的文件,要命名为output.ts

利用segmenter将转换好的ts文件切割成多个ts片,并生成.m3u8的索引文件

  ./segmenter -i out.ts -n 10 -p segmenter_test -m test.m3u8 -u #需要安装segmenter包

i表示输入文件,n表示切割10秒,p表示切割文件的前缀。m表示生成的m3u8文件名,u表示这些切割后的文件处于web server的哪个目录下

PS:实践过程中发现一个问题,就是切片之后,最后一段ts不管是不是10s,同样会按10s去切,导致切好后的视频最后一段会加上去几秒的黑段来补足10s,原因是segmenter.c中的程序写的还有缺陷,修正方法如下:

---------------------------
ffmepg把ts文件转m3u8并切片:
ffmpeg -i xx.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts

大家都说HLS代表future,rtsp已经是过去式了。

怎么分割并转换为h264编码呢?
先把ts流中的格式转换对,可以用以下命令试试:
ffmpeg -i your.ts -acodec copy -vcodec libx264 new.h264.ts

-----------------------------

ffmpeg -i xxxxx.ts -hls_time 10 -hls_list_size 10 -f hls xxxx.m3u8

-----------------------------

以下是笔者的方法:

ffmpeg -y -i bs.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb bs2.ts

ffmpeg -i bs2.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 3 output%03d.ts

原文地址:https://www.cnblogs.com/shengs/p/4977662.html