Ffmpeg - 再エンコードせずにフレームレートを変更する

Ffmpeg - 再エンコードせずにフレームレートを変更する

ビデオのフレームレートを変更して、再生時間を少し長くしたいのですが、再エンコードはしたくないので、オーディオは同期したままにしておきたいのです。ビデオから生のビデオを抽出し、次の方法で再多重化できました...

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) からのビデオ ストリームを取得することを指定します。オーディオは変更したいので再エンコードする必要がありますが、ビデオはコンテナーにコピーするだけで済みます。

関連情報