どういうわけか
ネクストスケープ配信事業本部 Advent Calendar 2016 にまだ空いている日が有るのに、誰も埋めようとしない・・・。
これは、そんなカレンダーの隙間を埋める為の小ネタ。
そして恐らく、大半の人にとって全く必要の無い小ネタです。
極稀にですが
動画配信の仕事をしていると、納品されたコンテンツがパッケージングや暗号化処理の際にエラーになる時が有ります。
そんな時は、まあ、色々とゴニョゴニョして原因を特定していくのですが、そのゴニョゴニョの一つに
RAWデータからの再パッケージが有ります。
要は、エラーになった ffmpegでパッケージングされてたっぽい mp4をパッケージャを変えてmp4にしてみよう!
と言う事です。
具体的な手順は
次の様になります。H.264のシングルトラックを持つ some_video_ffmpeg.mp4 と some_video_mp4box.mp4 と言う
2つのmp4が有ったとして、ffmpegを使ってRAWでーたを取り出す時は
ffmpeg -i some_video_ffmpeg.mp4 -codec copy some_video_ffmpeg.h264
ffmpeg -i some_video_mp4box.mp4 -codec copy some_video_mp4box.h264
みたいな感じで、H.264のRAWデータが取り出せます。
ちなみに、H.264の映像データとAACの音声データがMUXされたmp4からそれぞれRAWデータを取り出すのは
ffmpeg -i some.mp4 -codec copy some.h264
ffmpeg -i some.mp4 -codec copy some.aac
と言った感じで。
mp4boxを使う場合は
mp4box -raw 1 some_video_ffmpeg.mp4 -out some_video_ffmpeg.h264 (1はTrackIDを指定しています)
mp4box -raw 1 some_video_mp4box.mp4 -out some_video_mp4box.h264 (1はTrackIDを指定しています)
と言う具合です。
-outのオプションは無くても構いません。mp4boxが勝手にコーデックを判別して、元のファイル名_track1.h264
みたいなRAWデータを作ってくれます。
パッケージングの方は、ffmpegだと
ffmpeg -i some_video_ffmpeg.h264 -codec copy some_video_from_ffmpeg.mp4
ffmpeg -i some_video_mp4box.h264 -codec copy some_video_from_mp4box.mp4
と、DEMUXとかと同じ感じで出来ます。
mp4boxだと
mp4box -add some_video_ffmpeg.h264 -new some_video_from_ffmpeg.mp4
mp4box -add some_video_mp4box.h264 -new some_video_from_mp4box.mp4
と、ちょっと見慣れないコマンドオプションでパッケージング出来ます。
ここまで書いておきながら
実のところは、先日書いたDEMUX処理で再パッケージ処理は行われているんですけどね・・・。
でもまあ、出力されたmp4も微妙に異なっているし、個人的には一旦RAWデータを作って再パッケージしてます。