†ぽんこつビデオ工房†

VRO(mpeg2/ac3)素通し変換と無劣化変換

作成開始日 2021.01.31
最終更新日 2023.11.24

素通し変換

素通し変換とは、再エンコードをせずに、コンテナだけを変換するもの。ffmpegの-c copyに相当する。高速で無損失の変換だが、いろいろと問題も多い。ちなみに、変換なしのVRO/VOB/mpgはもっと扱いにくい。特に、HDレコーダー上で編集したファイルをそのままavidemuxに食わすと、音ズレが激しくて使い物にならない。mpeg系特有の連番読み込みの確認ダイアログも欝陶しい。整形・標準化のために、別コンテナに変換する方がよい。
avi:ffmpeg -i inp.vro -c copy out.avi
mkv:ffmpeg -fflags +genpts -i inp.vro -c copy out.mkv
aviへの素通し変換は簡単だが推奨しない。このデータをAvidemuxに読み込ませると、1フレーム([←][→]一つ分)の長さが不定になる。通常の33msから、最長133ms(4フレーム分)くらいまで、どの程度の長さになるか予測不能。しかも、長い1フレームには複数フレームが隠れているため、切ったはずのフレームが残っていたりする。それと関係があるかどうか不明だが、そこそこ高い頻度で、音声にブツっという異音が入ったり、再生途中でクラッシュしたりする。また、Iフレーム位置でカットしても、つなぎ目でおかしな補間をするなど、けっこう厄介。

素通し変換であれば、mkvへの変換の方が実用的。-fflags +genpts(presentation time stampの生成)指定が少々面倒だが、これのおかげで音ズレしなくなる。つか、このオプションを指定しないと、そもそもmkv素通し変換は不可能だったと思う。ただ、これを指定しても、ファイル先頭が0msから始まらないとか、HDレコーダーのファイルはけっこう厄介で、細かなところに問題が残る。

【追記】現在(2023年11月)はAvidemuxのavi素通し変換をメインに使用している。ffmpegを使用したavi素通し変換では上記のような不具合が発生するが、Avidemuxでは正常に変換可能。ただし、GUI版のAvidemuxでは非効率なので、コマンドライン版を使用してる。なお、ffmpegのmkv素通し変換は、Avidemuxのフレーム編集と相性が悪いので、現時点では推奨しない。

無劣化変換

そこで、多少時間は掛かるし、画質の劣化の不安もあるが、ff-mpeg4でq0(無劣化)変換することを推奨する。
q0:ffmpeg -i inp.vro -qscale 0 -vcodec mpeg4 -acodec copy out.avi
「-qscale 0 」と言うのは、ff-mpeg4固有(と言っても良いと思う)の無劣化モード。再エンコードはするが、元画質と同等の画質を維持する。動きの激しい動画では、サイズが非常に大きく膨らむこともある。尤も、VRO(mpeg2)のアニメであれば、最大でも3割増し程度、ほとんどの場合は元ファイルよりも小さくなる。何より、時間情報が奇麗になるようで、別項で述べるフレーム単位の編集の際には必須の変換となる。

やはり問題は画質の劣化。無劣化相当とは言うものの、本当に劣化はないのか、多少疑問は残る。けっこう何度もチェックしたが(拡大静止画を比較してみた)、確かに目に見える劣化はなかった。ただし、元画質に問題がある場合、あるいは古い映画フィルムの雰囲気を出すために意図的にノイズを乗せる演出などの場合、それを補正しようとする傾向があるようで、瑕疵まで忠実に再現する訳ではないようだ。

なお、上記の例で出力コンテナがmp4ではなく、aviになっているのは、音声を無変換で格納するため。mp4コンテナにac3を入れると、再生できないプレイヤーも少なくない。また、素通し変換で述べたaviコンテナの諸問題は、無劣化変換したファイルでは発生しない。


【ぽんこつビデオ工房目次】 【ホーム】