ビデオのフレームレートを変更して、再生時間を少し長くしたいのですが、再エンコードはしたくないので、オーディオは同期したままにしておきたいのです。ビデオから生のビデオを抽出し、次の方法で再多重化できました...
ffmpeg -i source.mkv -c copy -f h264 video.h264
ffmpeg -r 23.976 -i video.h264 -c copy dest.mp4
これにより、音声なしで正しい時間で再生されるビデオが作成されます。
オーディオ付きの完成した .mp4 を入手するにはどうすればいいですか?
答え1
ビデオに合わせてオーディオの速度を調整し、再エンコードする必要がありますが、ビデオを再エンコードしなくてもこれを行うことができます。
まず、オーディオをどの程度調整する必要があるかを計算します。元々 25fps のビデオで、速度を 23.976 に下げると仮定すると、速度係数は 23.976/25 = 0.959 になります。これをフィルターに挿入して、atempo
元のビデオからオーディオの速度を引き出して調整しますsource.mkv
。
ffmpeg -i source.mkv -r 23.976 -i video.h264 -filter_complex "[0:a]atempo=0.959[out]" -map 1:v -map "[out]" -c:a aac -c:v copy out.mp4
ここ-filter_complex
では、0 番目の入力ファイル ( ) からオーディオ ストリームを取得しsource.mkv
、それをフィルターに通してatempo
、出力に名前を付けます[out]
。次に、-map
引数を使用して、そのオーディオ ストリームと、最初の入力ファイル (0 から始まるため、実際には 2 番目のファイルvideo.h264
) からのビデオ ストリームを取得することを指定します。オーディオは変更したいので再エンコードする必要がありますが、ビデオはコンテナーにコピーするだけで済みます。