📹

(ロスレス変換) MOV形式をコンテナ変換する

2021/11/06に公開

未だに息をしているMOV形式。

iPhoneの動画撮影で使われていると知って非常に驚いた。
Androidがメインで利用しており、iPhoneで撮影することなどもなかったため、全く知らなかった。Quick Timeは死に体だし、iTMSではM4A (Appleが勝手に作った、ビデオ無しのMP4) だし、Windowsでも今でも標準で見れないし、 もう使われていないと思ってたから、信じられない思い。アンビリバボー😱。

photo.jpg

保存型式の設定項目もなさそうなので、コンテナ変換を思考してみる。

検証環境

  • iPhone SE (初代)
    • iOS 14.8
  • Windows10 Pro v1809
  • ffmpeg v4.2.1

コンテナとサポート コーデックの仕様を確認する。

動画ファイル形式、音声ファイル形式は、 コンテナコーデック に分けて考えることが出来る。 (圧縮ファイルや画像ファイルでも同様に、 コンテナアルゴリズム に分けて考えることができる)

コンテナ は動画と音声を 多重化 (Multiplex) するのに用いられ、複数の 動画コーデック (Video Codec)音声コーデック (Audio Codec) をサポートしていることがある。異なる コンテナ で共通して対応している コーデック であれば、 コンテナ のみを変換することも出来る場合がある。この場合、画質・音質的損失は限りなく0に近い。
(勿論メタデータやなどの損失や、同期が取れなくなる場合もあるため、0とは言い切らない)

主要な コンテナ と、サポートしている コーデック を比較・確認する。

🎞 Video Codec

※ 独自の調査と独断と偏見による調査 (誤りがあっても責任は持てません。)

  • ◎ … 対応していて、よく使われるコーデック ⇒ 対応アプリが多い
  • ◯ … 対応しているコーデック
  • △ … 一応対応しているが、あまり使われないコーデック ⇒ 対応アプリが少ない
コンテナ 拡張子 H.264
(MPEG-⁠4 AVC)
(MPEG-⁠4 Part 10)
H.265
(HEVC)
VP8 VP9 AV1
MOV
(QuickTime file format)
.mov
MP4
(MPEG-⁠4 Part 12)
(ISO base media file format)
(MPEG-⁠4 Part 14)
.mp4
FLV
(Flash Video)
.flv
Matroska .mkv
WebM .webm

MP4 (ISOBMFF) では VP8/9 に対応したらしいけど。おそらく対応アプリはあまりなく、使われていない。(まぁ + OpusWebM つかうよね、普通。)
Matroska / WebM はあまり使わないので、メインどころのコーデックはあまりわからない。

🔈 Audio Codec

※ 独自の調査と独断と偏見による調査 (誤りがあっても責任は持てません。)

  • ◎ … 対応していて、よく使われるコーデック ⇒ 対応アプリが多い
  • ◯ … 対応しているコーデック
  • △ … 一応対応しているが、あまり使われないコーデック ⇒ 対応アプリが少ない
コンテナ 拡張子 MP3
(MPEG-⁠1 Audio Layer-⁠3)
AAC AC-⁠3 Vorbis Opus FLAC
MOV
(QuickTime file format)
.mov
MP4
(MPEG-⁠4 Part 12)
(ISO base media file format)
(MPEG-⁠4 Part 14)
.mp4
FLV
(Flash Video)
.flv
Matroska .mkv
WebM .webm

MP4 の音声に MP3 が対応しているものの、民生機では対応しているものがあまりない。例えば PS3 / PS4 / PS5カーナビ など、対応していないものが多い。
Matroska / WebM はあまり使わないので、メインどころのコーデックはあまりわからない。

仕様確認結果

H.264/AVC + AAC であれば、MOVMP4MKV が共通的にサポートしているので、コンテナの相互変感が可能そう。

コンテナ変換

変換前

iPhone で録画した動画ファイルの内容を ffprobe で確認。一応念の為、720pHD4K の3種で撮影したが、いずれも MOV + H.264/AVC + AAC といった塩梅だった。これなら、MP4MKV へのコンテナ変換も行えそう。

command
ffprobe "input.mov"

image.png
image.png
image.png

コンテナ変換実行

動画ソース、音声ソースをそのまま、コンテナだけ変換を行う。

command
# MOV ⇒ MP4へ変換する場合
ffmpeg -i "input.mov" -c:v copy -c:a copy -f mp4 "output.mp4"

# MOV ⇒ MKVへ変換する場合
ffmpeg -i "input.mov" -c:v copy -c:a copy -f matroska "output.mkv"

# MP4 or MKV ⇒ MOVへ変換する場合
ffmpeg -i "input.mp4" -c:v copy -c:a copy -f mov "output.mov"

-c:v copy -c:a copy で動画・音声の再変換を行っていないのがミソ。

変換後

変換後の MP4ffprobe で確認。コーデックやビットレート、フレームレートなどが同じであることを確認。再圧縮が行われていた場合はフレーム数やビットレートが変化するはずなので、概ねコンテナ変換が行えてそう。

command
ffprobe "input.mp4"

image.png
image.png
image.png

(余談) そもそも論①

そもそも、MP4 自体が QuickTime file format を元に、 MPEG-⁠4 Part 12MPEG-⁠4 Part 14、で制定されたコンテナ、ISO base media file format である。そのため基本構造が同じなのである。そのため、対応しているコーデックが似ている。

Windows10でも MOV が再生できたので、最近対応した MP4 のデコーダーによる効能?と推察。(QuickTimeiTunse Windowsを破壊するので、入れていない & 死んでも入れたくないが再生できた。)

ffmpegでもコンテナ変換の際にのコンソールを見返すと、

image.png

mov,mp4,m4a,3gp,3g2,mj2 とあり、MP4MOV が同じエンジンを使用している様に見受けられる。

こんな状態なので、MOV が生きていても不思議では無いと思えなくもない状況と思える。

まぁとは言え MP4 がメインストリームが現状の昨今では、MOV はやはり死に体の形式だとずっと思って入るけど。Apple製品基本的に使っていないから、余計にね。

(余談) そもそも論②

但し、そもそもMP4は視聴用には良いのだけれども、編集用には向かない。さながらJPEGの様に。実際 MP4 は編集系のツール系は少ないし。更に MOV のほうが編集にも向いているとからしいので。MP4 に変換する理由があるのだろうか (自問)。結合1つでもロクなツールが無いので。もし編集用にコンテナ変換するなら、MKV (Matroska) のほうが良さそうに思ったりしている。 MKVToolNix もあるしね。もちろん使いたいツールに合わせてコンテナ変換は行えばよいかと思う。

手前味噌ですが。

https://qiita.com/libraplanet/items/fc30ad79974c5416faf1

必要に応じてコンテナ変換ができれば、編集時の損失を多少減らせられるのでは無いかと思う。

謝辞

Discussion