aviからmp4へのオーディオトラックを効率的に結合

aviからmp4へのオーディオトラックを効率的に結合

動画(シリーズのエピソード)が2回ほど100本ほどあります。

  1. [avi] 720p のビデオ解像度と好みのオーディオトラック
  2. [mp4] 1080pですが言語が間違っています

もちろん、私は私の好みの言語で良いビデオしかし、可能であれば、両方のオーディオ オプションを維持したいと思います。

mp4 ジョイナー (mp4box の GUI) を使用して手動で結合しようとしましたが、時間がかかります。そのプロセスを自動化および最適化するための提案があればぜひ教えてください。

答え1

これはとても簡単にできますffmpeg(静的ビルドをダウンロード) 次のようにします:

ffmpeg -i input.mp4 -i input.avi -c copy -map 0:v:0 -map 1:a output.mp4

この意志地図次のストリームが出力ファイルに出力されます。

  • 最初の入力の最初のビデオチャンネル(0:v:0
  • 2 番目の入力のオーディオ チャンネル ( 1:a) – 最初の入力だけが必要な場合は、1:a:0などを使用します。

ビデオとオーディオのストリームがコピーされるため、このプロセスは高速です。

互換性のないオーディオ

AVI ファイルがオーディオ ストリームに MP3 を使用する場合、MP4 ファイルにマップすることはできません。この場合、次を使用します。

ffmpeg -i input.mp4 -i input.avi -c:v copy -c:a aac -b:a 192k -map 0:v:0 -map 1:a output.mp4

これにより、192 kBit/s の AAC を使用してオーディオ ストリームが再エンコードされます。これは、再エンコードによるアーティファクトが気付かないほど十分な高品質であるはずです。

または、事実上すべてのコーデックをサポートする MKV を出力コンテナーとして使用することもできます。

ffmpeg -i input.mp4 -i input.avi -c copy -map 0:v:0 -map 1:a output.mkv

バッチで実行する方法

当然ながら、このコマンドをループ内で使用して、すべてのファイルに対して実行できます。たとえば、Linux の Bash では、MP4 ファイルと AVI ファイルの基本名が同じで、1 回だけ実行することを前提としています (そうでない場合は、出力ファイルも変換しようとします)。

for f in *.mp4; do
    aviFile="${f%%.mp4}.avi" # replace the extension
    outputFile="${f%%.mp4}-output.mp4" # create output filename
    ffmpeg -i "$f" -i "$aviFile" -c copy -map 0:v:0 -map 1:a "$outputFile"
done

Windows バッチ ファイル ループでコマンドを実行する方法については、オンラインで多くの例が見つかります。

関連情報