複数のビデオファイルを使用して、画像ビデオに画像の外観を作成しようとしています。
FFMpegを使用して.mp4ファイルを作成しました。ビデオはWindowsの「Movies&TV」アプリで正しく表示されます。 Chrome、Firefox、VLC Media Player、またはその他のアプリでは正しく表示されません。ビデオをブラウザで表示する予定なので、クロスブラウザのサポートは私にとって重要です。
ビデオは、ビデオハングアウトの2つの部分を取り、FFMpegで次のことを行うことによって作成されました。
私のFFMpegコマンドは次のとおりです。
ffmpeg -itsoffset 2.501 -i remote.mp4 -i local.mp4 \
-filter_complex \
" [1:v]scale=iw/4:-1:flags=lanczos[loc0]; \
[0:v]transpose=1[rotate1]; \
[rotate1][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10:eof_action=pass[rem0]; \
[0:a]adelay=2501|2501[0adelay]; \
[0adelay]apad[0a]; \
[0a][1:a]amerge=inputs=2[a]" \
-map "[rem0]" -map "[a]" \
-ac 2 -vcodec libx264 \
-ar 44100 -acodec aac \
completed.mp4
ビデオのプロパティ:
完成したビデオをブラウザで見ると、16秒ではなく18秒と表示されます。完成したビデオでffprobeを使用すると、次のように表示されます。再生時間:00:00:16.68。ローカルオーディオとビデオも、ブラウザで再生されるまで2.501秒待機します。
どんな助けでも素晴らしいでしょう。ブラウザが意図したものとは異なる方法でレンダリングしている理由がわかりません。ありがとう!
タイムスタンプオフセットを使用すると、ffmpegは出力MP4の編集リストを介してそれに影響します。ブラウザはそれらを解析しないようです。したがって、回避策が必要です。
ffmpeg -i remote.mp4 -i local.mp4 \
-filter_complex \
" [1:v]scale=iw/4:-1:flags=lanczos[loc0]; \
[0:v]transpose=1,setpts='if(eq(N,0),PTS,PTS+2.501/TB)',fps=30[rotate1]; \
[rotate1][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10:eof_action=pass[rem0]; \
[0:a]adelay=2501|2501,apad[0a]; \
[0a][1:a]amerge=inputs=2[a]" \
-map "[rem0]" -map "[a]" \
-ac 2 -vcodec libx264 \
-ar 44100 -acodec aac \
completed.mp4
setpts
は、最初のフレームを除くすべてのフレームのタイムスタンプをシフトします。次に、fps
フィルターは、最初のフレームの複製でそのギャップを埋めます。入力ストリームレートを30と想定しました。