ビデオに画像を重ね、特定の間隔でビデオとオーディオを一時停止します。

ビデオに画像を重ね、特定の間隔でビデオとオーディオを一時停止します。

オーバーレイ期間中にオーディオとビデオを一時停止することはできますか? オーディオが一時停止されたら、その間隔だけで新しいオーディオ トラックを追加することはできますか? 残りの時間は元のオーディオを再生する必要があります。

例えば、

私はffmpegを使用して、以下のコマンドを使用してビデオに複数の画像を重ねています。

ffmpeg -i 2.mp4 -i globes.png -i socks.png -filter_complex "[1:v]scale=320:240 [ovrl]; [0:v][ovrl]overlay=y=Hh:enable='between(t,3,8)'[v1];[2:v]scale=320:240 [ovrl1];[v1][ovrl1]overlay=y=Hh:enable='between(t,15,20)'[v2]" -map "[v2]" -map 0:a -c:a コピー outputVideo.mp4

ここで、ビデオとオーディオを 3 ~ 8 秒間一時停止し、その 3 ~ 8 秒間だけ新しいオーディオを再生し、残りの時間は古いオーディオを続行する必要があります。

これについてどうか助けてください。

答え1

オーディオとビデオを一時停止するには、loopストリームを停止するか、PTS をオフセットします。

ループストリーム

loop=loop={len_frames}:size=1:start={pos_frames},setpts=N/FRAME_RATE/TB

ここで、は{len_frames}フレーム単位のループの長さ、は{pos_frames}フレーム単位の一時停止の位置です。これらの数値は、ビデオのフレームレートを取得し、選択した長さとタイムスタンプ(秒単位)を掛け合わせることで計算できます。

オーディオ部分についても同様で、それぞれaloopasetpts、および Hz 単位のサンプル レートを使用する必要があります。さらに、 を設定してオーディオをミュートする必要がありますvolume=0

ループされたビデオとオーディオのストリームは元のストリームよりも長くなり、その上にオーバーレイを表示できます。

このようなコマンドは組み立てるのがかなり複雑なので、Pythonプログラムビデオとオーディオが一時停止している間に「バッファリング」インジケータを挿入します。ループコマンドがどのように生成されるかを確認できますここ

PTSのオフセット

ギャンのここに答えてください本質的には次のようになります。

setpts='PTS+gte(T\,{start_time})*({shift}/TB)'

と組み合わせると-vsync vfr{start_time}フレームがオフセットされる時間、{shift}適用されるシフトになります。

オーディオの切り替え

特定の時間間隔でオーディオを再生するには、-itsoffset入力オプションを使用する開始を相殺するため。

または、フィルターを使用して、オーディオ ストリームの PTS を固定量でオフセットしますasetpts

関連情報