HLS video segmenting complications. How to create a transport stream with ffmpeg
- by Agzam
I have h264 videos, and currently we're using Apple's HTTP Video Streaming tools and mediafilesegmenter to segment these files.
What I need to do is to switch to alternative segmenter based on this very popular open-sourced segmenter
The problem is that this segmenter does not just take any video, but takes only MPEG-TS videos. So I have to convert my h264 videos to TS first.
I can do that with ffmpeg. I'm using this:
ffmpeg -i encoded.mp4 -vcodec h264 -i encoded.mp4 -sameq -acodec aac -strict experimental -f mpegts output.ts
But this creates fairly larger output. And the reason is that Apple's segmenter keeps the same codec - AVC and the same audio codec - AAC, whereas ffmpeg changes video format to MPEG Video.
The question is: can I somehow keep the same AVC video codec and still convert video to a transport stream?
So my goal is to keep the same video quality and same video codecs as Apple's medifilesegmenter does.
UPD: Okay... it seems that ffmpeg CAN split videos into segments:
ffmpeg -i encoded.mp4 -c copy -map 0 -vbsf h264_mp4toannexb -f segment -segment_time 10 -segment_list test.m3u8 -segment_format mpegts segment%d.ts
That's still has one problem:
it doesn't create http live streaming index file. (-segment_list creates a file with list of segments, but it doesn't look like HLS index). So, you still have to create index file