私はここ 2 日間ほど .mp4 に苦戦しており、約 20 個の連続ファイルを 1 つのファイルに連結しようとしています。ファイル間に違いがあると、悪夢になります。ファイルによっては fps が異なり、比率も異なります。
mp4 が使用すべき形式なのか、それとも連結にもっと適した使いやすい形式があるのかを知りたいです。時間は問題ではなく、ほとんどの状況で連結できる比較的高品質の形式が必要なだけです。
これが存在しない場合は、mp4 ファイルの大きく異なるプロパティを処理する方法についての提案があればありがたいです (問題を引き起こす可能性のあるビデオ間の fps と比率以外に何が異なるのかはよくわかりません)。
私は ffmpeg を使用してファイルを連結しようとしています。最初にデマルチプレクサを使用し、次に連結フィルターを使用しようとしましたが、連結フィルターは非常に難しく、どのように使用したらよいのかまったくわかりません。
各ビデオには音声があり、静止画像のものもあれば、動画のものもあります。
答え1
マルチメディア ファイルは複雑なので、連結にはいくつかの要件があります。
- 連結されるすべてのセグメントは、ストリームの数とタイプが同じである必要があります。
- すべてのストリームは同じパラメータを持つ必要があります。
各入力は任意のパラメータで変化する可能性があるため、連結フィルタを使用することをお勧めします。フィルタを使用して、各入力を共通のパラメータ セットに適合させる必要があります。いずれにしてもすべてを再エンコードするため、入力形式はそれほど重要ではありません。
main.mp4
ビデオとオーディオがあるものと、ビデオがありオーディオがないものの基本的な一般的な例end.mp4
です。他のすべてのパラメータは異なるものと想定されます。ここで使用されるフィルターは、anullsrc、scale、pad、setsar、fps、format、aformat、および concat です。
ffmpeg -i main.mp4 -i end.mp4 -f lavfi -t 0.1 -i anullsrc=channel_layout=stereo:sample_rate=44100 -filter_complex "[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=25,format=yuv420p[v0];[1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=25,format=yuv420p[v1];[0:a]aformat=channel_layouts=stereo:sample_rates=44100[a0];[v0][a0][v1][2:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" -c:v libx264 -c:a aac -movflags +faststart output.mp4
これを行うにはいくつかの方法があり、入力内容に基づいて、または要件に合わせて調整する必要がある場合があります。