ffmpegを使って複数の動画を結合した際、結合後のファイル自体は完成しているのに、特定のプレイヤーでは後半部分だけ再生されないという問題が発生することがあります。別の動画プレイヤーでは正常に再生できる場合、動画データが完全に壊れているとは限りません。
この記事では、ffmpegでA動画とB動画を結合した際にB側だけ再生されない原因や、Media Player Classic(MPC)など一部プレイヤーで問題が起きる理由、安定して結合するための方法について解説します。
ffmpeg結合後に後半動画だけ再生できない主な原因
ffmpegで作成した動画の一部分だけ再生できない場合、よくある原因は「動画ストリームの形式が一致していない」「結合方法が適切ではない」「インデックス情報が正しく作成されていない」といったものです。
A動画とB動画が同じ拡張子でも、内部的な映像コーデック、音声コーデック、解像度、フレームレートなどが違う場合があります。
例えば、AがH.264形式・30fpsの動画で、BがH.265形式・60fpsの動画の場合、単純に連結しただけではプレイヤーによって正常に読み込めないことがあります。
Media Player Classicだけ再生できない場合に考えられること
他のプレイヤーでは再生できるのにMedia Player Classic(MPC)ではB部分が再生されない場合、動画ファイルそのものよりもMPC側の解析方法や対応状況が原因である可能性があります。
動画ファイルには、映像や音声データだけでなく、時間情報や再生位置を管理するメタデータがあります。この情報が不完全だと、一部プレイヤーでは途中から正常に読み込めないことがあります。
例えばVLC Media Playerでは多少不完全な動画情報でも補正して再生できる一方、MPCではインデックス情報の問題により途中部分を認識できないケースがあります。
ffmpegのconcat方法による違い
ffmpegで動画を結合する方法はいくつかありますが、単純なファイル連結とffmpegのconcat機能では結果が異なります。
よく使われる方法として、以下のようなconcat demuxerがあります。
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
この方法は再エンコードせず高速に結合できますが、結合する動画同士の形式が完全に一致している必要があります。
例えば、撮影したスマートフォン動画と編集ソフトから出力した動画を混ぜる場合、見た目は同じMP4でも内部仕様が異なることがあります。その場合は正常に結合できないことがあります。
結合前に動画情報を確認する方法
結合する前に、それぞれの動画の詳細情報を確認すると原因を特定しやすくなります。
ffprobeを使うと、動画のコーデックやフレームレートなどを確認できます。
ffprobe input.mp4
確認するポイントは以下の項目です。
- 映像コーデックが同じか
- 音声コーデックが同じか
- 解像度が一致しているか
- フレームレートが一致しているか
- 音声サンプルレートが一致しているか
これらが異なる場合は、結合前に形式を統一すると再生トラブルを防ぎやすくなります。
再エンコードして結合する方法
形式が異なる動画を確実に結合したい場合は、コピー結合ではなく再エンコードを行います。
例えば以下のような方法があります。
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mp4
再エンコードは時間がかかりますが、映像や音声の形式を統一できるため、多くのプレイヤーで安定して再生できる動画になります。
特に配布用動画や長期保存する動画の場合は、再エンコードによる結合の方がトラブルが少なくなります。
MP4のインデックス情報を修復する方法
MP4形式では、ファイル末尾にあるmoov atomという管理情報が再生に影響する場合があります。この情報が適切でないと、一部プレイヤーでシークや途中再生が正常にできないことがあります。
ffmpegでは以下のようにmovflagsを指定して、再生互換性を高めることができます。
ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4
この処理によってMP4の管理情報が先頭側へ移動し、Webブラウザや一部プレイヤーでの読み込み改善につながる場合があります。
結合した動画が正常か確認するポイント
問題を切り分けるためには、結合後の動画を複数のプレイヤーで確認することが重要です。
例えば以下のような確認方法があります。
- VLCで最後まで再生する
- MPCで途中からシークして確認する
- ffprobeで動画時間を確認する
- 別のPC環境で再生する
複数の環境で再生できる場合は、動画データの破損ではなくプレイヤー側の対応問題である可能性が高くなります。
まとめ
ffmpegで結合した動画の後半部分だけ再生できない場合、原因として多いのは動画形式の違い、concat方法の問題、MP4のインデックス情報の不整合です。
特にMedia Player Classicだけで問題が発生する場合は、動画ファイル自体が壊れているとは限らず、プレイヤー側の読み込み方法が原因の場合があります。
まずはffprobeで元動画の形式を確認し、同じ条件の動画だけをconcatするか、必要に応じて再エンコードして結合すると、より多くのプレイヤーで安定して再生できる動画を作成できます。


コメント