BobbyQuineのブログ(備忘録)

Linux関係の備忘録、その他タバコ、Vape関連なんかも。

m3u8とmp4の相互変換

この記事でやってることを実践するときは自己責任で。当方は責任とんないぞ☆

皆さんいかがお過ごしでしょうか。こちらは大学が始まり初日から徹カラなうで書いております。

さて今回はm3u8とmp4の相互変換についての記事です。

 

そもそもm3u8とは

m3u8ってほとんどの人は聞いたことないと思います。まぁそもそもm3u8というのは動画ファイルではなくただのインデックスファイルでHLSというAppleが開発した動画配信技術で用いられるものです。

このHLSではtsファイルという細切れの動画ファイル(大体10秒程度)をm3u8ファイルにプレイリストを書き、そのm3u8ファイルに基づいて再生していく感じです(詳しいことはよーわからんw)。

ここからわかるようにm3u8は単なるプレイリストですのでこれ単体を持ってても再生なんぞできません。リストにあるtsファイルすべてを手元に持ってる必要があります。まぁこの辺は自分で対処してください。ってか当然あるっしょ。

 

ffmpegのインストール

今回はffmpegを使って変換していきます。そもそもの環境はUbuntu16.04LTSで。

つってもapt-getで入れてくだけなので、

 

$sudo apt-get install ffmpeg

 

もう記憶が無いのであれだけどいろいろ環境構築必要かも。今度公式HPにあるソースコードからのインストール方法も書くので最悪それを参考にしてくださいな。

追記:雑だけど書いてみたよ(同日)↓

Ubuntu14.04にffmpegをインストールした時の話 - BobbyQuineのブログ

 

mp4(h264 & mp4a)からHLS(m3u8 & ts)への変換

まず変換前のmp4ファイルをinput.mp4、出力するファイルをout.m3u8 & out-[***].tsとします([***]には000、001、002のような連番)。

 

$ffmpeg -i input.mp4 -codec copy -map 0 -f segment -vbsf h264_mp4toannexb -segment_format mpegts -segment_time 10 -segment_list out.m3u8 out-%03d.ts

 

-segment_timeのところで分割秒を決められます。また、C言語なんかのプログラム書いたことある人ならなんとなくわかると思うけど%03dを%02dとかにすればout-00.ts、out-01.tsみたいな感じにできます。詳しいオプションはそのうち書きます()。

 

HLS(m3u8 & ts)からmp4への変換

今度は逆をやる方法。そろそろ書くのめんどくなってきたのでコマンドだけ書いとく。さっき同様input.m3u8、out.mp4で。

 

$ffmpeg -i input.m3u8 -movflags faststart -c copy -bsf:a aac_adtstoasc out.mp4

 

以上。ちなみにこれ、エンコード/デコードを全くしてないっぽいのでさっさと終わる。

P.S. カラオケはとりあえず相川七瀬の「夢見る少女じゃいられない」と黒うさPの「千本桜」で90点超え、ありがとうございます↑↑