オーバーレイ期間中にオーディオとビデオを一時停止することはできますか? オーディオが一時停止されたら、その間隔だけで新しいオーディオ トラックを追加することはできますか? 残りの時間は元のオーディオを再生する必要があります。
例えば、
私は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}
フレーム単位の一時停止の位置です。これらの数値は、ビデオのフレームレートを取得し、選択した長さとタイムスタンプ(秒単位)を掛け合わせることで計算できます。
オーディオ部分についても同様で、それぞれaloop
とasetpts
、および Hz 単位のサンプル レートを使用する必要があります。さらに、 を設定してオーディオをミュートする必要がありますvolume=0
。
ループされたビデオとオーディオのストリームは元のストリームよりも長くなり、その上にオーバーレイを表示できます。
このようなコマンドは組み立てるのがかなり複雑なので、Pythonプログラムビデオとオーディオが一時停止している間に「バッファリング」インジケータを挿入します。ループコマンドがどのように生成されるかを確認できますここ。
PTSのオフセット
ギャンのここに答えてください本質的には次のようになります。
setpts='PTS+gte(T\,{start_time})*({shift}/TB)'
と組み合わせると-vsync vfr
、{start_time}
フレームがオフセットされる時間、{shift}
適用されるシフトになります。
オーディオの切り替え
特定の時間間隔でオーディオを再生するには、-itsoffset
入力オプションを使用する開始を相殺するため。
または、フィルターを使用して、オーディオ ストリームの PTS を固定量でオフセットしますasetpts
。