SSブログ

音がずれてゆくmp4 (10) 結局謎は謎のまま、音合わせは強引に [手記さまざま3]

どうしても再エンコードできないmp4。それが気になってしょうがなかった。それで色々試した。
最初のほうのフレームに問題があるのはわかった。AviUtlに読み込み、真ん中だけを選択してエンコードすると失敗しない。
入力プラグインで問題が生じていることもわかった。失敗のしかたは入力プラグインによって異なり、出力プラグインを変えても変わらない。
入力プラグインにDirectShow File Readerを使い、あらかじめ設定で59.94fpsにしておけば読み込みはできる。ただし読み込んだフレーム数が元動画のフレーム数よりも多いという、不穏な読み込み方になる。
問題のあるフレームの前後をかなりごっそりと削除しないとエンコードに失敗することもわかった。ごっそり削除すると、その部分は無くなってしまう。私は、何度もテストした動画の中から削除部分が含まれる別のmp4を探し出した。その動画の末尾が、問題のある動画の最初と重複している。この2つの動画を連結して、削除部分を補えないだろうか。
Avidemux ではタイムラインをシークすると、表示されるフレームと実際に処理されるフレームがずれてしまい、2つの動画から不要な部分だけを正確に削除することができなかった。AviUtl を使うことになった。エンコードは成功したが、AviUtl ではx264のqualityを26にしてもファイルサイズがかなり大きかった。1時間に1GB以上。Avidemuxとはx264の細かな設定が違うのだろう。ファイルサイズをもっと小さくしたいが、x264の細かな設定は私にはいじれない。そこでAviUtlで不要部分をカットした後は画質最高・巨大ファイルとして書き出し、それをAvidemuxに読み込んで再エンコードする。ファイルサイズ縮小が目的だ。しかしこれのせいで、また音ずれが生じた。音ずれを直すために、AviUtl で書き出した画質最高・巨大ファイルからタイムコードを抽出した。それをDtsEdit.exeで音ずれ動画に適用しようとしたが、「フレームが足りないため、TimeCode入力を停止しました。」のエラーが出た。真空波動研で見ると画質最高・巨大ファイルのフレーム数は422264、音ずれ動画のフレーム数も422264。ところがタイムコードtxtには、冒頭の#行を除いて45376行も書き込まれていた。私は画質最高・巨大ファイルにavi(XviD,PCM)を使った。mp4は音ずれしやすくて不安だったから。それでタイムコード抽出にはavi2timecode.exeを使うことになったが、これが抽出するタイムコードはDtsEdit.exeのタイムコードと何か違うのだろうか。
私はそれでも果敢に、というか哀れにも、諦めなかった。上記aviから抽出したタイムコードが使えないならば、そのaviの元になった2つの元動画から正確に必要部分のタイムコードを取り出し、それを連結して、音ずれ動画に適用できないか。連結したタイムコードをDtsEdit.exeで適用しようとしたら、「フレームが足りないため、TimeCode入力を停止しました。」のエラーが出た。再エンコードした動画は422264フレームあるが、タイムコードは422244しかない。間違えないように慎重を期して調べたのに、なぜなんだ。
私は別の方法をとることにした。動画の冒頭は、問題のあるフレームの代わりに他の動画で補った部分。ここは音ずれが感じられない。Avidemuxでエンコードしたから後に行くほど音はずれているのだろうが、冒頭の音ずれが一番少ない部分でしかも短いから、音ずれが感じられないのだろう。その部分を過ぎると、唐突に一番音ずれがひどい部分が来る。200ms音が遅い。そこから後へ行くほど音ずれが少なくなり、動画末尾辺りではまた音が映像に合う。Avidemuxを通す前の画質最高・巨大ファイルは音ずれがないのに、どうしてAvidemuxを通したらこんな不可解な音ずれのしかたになるのか、謎だ。私は冒頭から音を合わせてゆくことにした。冒頭の音ずれが感じられない部分は、いじらない。その直後で、音声だけを200msカットする。これで、その部分の音が合う。そこから先へ行くほどタイムコードを進める。これは自作プログラムで行う。こうして、結局不可解な謎は最後まで謎のまま、理屈もへったくれもなく強引に音を合わせるしかなかった。


コメント(0) 

コメント 0

コメントの受付は締め切りました