web-dev-qa-db-ja.com

HLSビデオセグメンテーションの複雑さ。 ffmpegでトランスポートストリームを作成する方法

私はh264ビデオを持っており、現在、AppleのHTTPビデオストリーミングツールとmediafilesegmenterを使用してこれらのファイルをセグメント化しています。私がする必要があるのは、 この非常に人気のあるオープンソースのセグメンター に基づいて代替のセグメンターに切り替えることです。

問題は、このセグメンターがビデオを撮るだけでなく、MPEG-TSビデオだけを撮ることです。そのため、最初にh264ビデオをTSに変換する必要があります。

私はffmpegでそれを行うことができます。私はこれを使用しています:

ffmpeg -i encoded.mp4 -vcodec h264 -i encoded.mp4 -sameq -acodec aac -strict experimental -f mpegts output.ts  

しかし、これはかなり大きな出力を作成します。その理由は、Appleのセグメンターが同じコーデック(AVC)と同じオーディオコーデック(AAC)を保持しているのに対し、ffmpegはビデオ形式をMPEGビデオに変更しているためです。

問題は、どういうわけか同じAVCビデオコーデックを維持しながら、ビデオをトランスポートストリームに変換できるかということです。

したがって、私の目標は、Appleのmedifilesegmenterと同じビデオ品質と同じビデオコーデックを維持することです。

UPD:わかりました... ffmpegはビデオをセグメントに分割できるようです:

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

それにはまだ1つの問題があります:それはhttpライブストリーミングインデックスファイルを作成しません。 (-segment_listは、セグメントのリストを含むファイルを作成しますが、HLSインデックスのようには見えません)。したがって、インデックスファイルを作成する必要があります

2
iLemming

試してみてください:

ffmpeg -i in.mp4 -acodec copy -vcodec copy out.ts

Ffmpegにはセグメンターもあります。 http://ffmpeg.org/ffmpeg.html#segment_002c-stream_005fsegment_002c-ssegment を参照してください

5
user319862

-segment_list_typem3u8に設定してみてください。 close_listが呼び出されるまでセグメント期間がリストに追加されないため、リストは静的ファイル変換には適していますが、ライブストリームには適していません。

リストタイプは、現在のリリースのリスト名ファイル拡張子から設定する必要がありますが、そうではありません。

2
Mike Clark

-segment_list_flags liveを設定してみてください

2
FDisk