
動画(ユーザーがアップロードしたもの)に透かしロゴを追加し、それをイントロと連結したいと考えています。結果の動画は入力動画と同じ形式である必要があります。
問題は、アップロードされたビデオに複数のオーディオ ストリームがあり、字幕が含まれている場合に発生します。
このコマンドのようなものを使用することでオーディオの問題を解決しました。
ffmpeg -i intro.mp4 -i input.mkv -i logo.png -filter_complex "[0:v] scale=480:270,setdar=16/9 [a]; [1:v] scale=480:270,setdar=16/9 [b]; [2:0] scale=480:270 [wm]; [b][wm] overlay[ov]; [a][0:a:0][0:a:0] [ov][1:a:0][1:a:1] concat=n=2:v=1:a=2 [vd] [a0] [a1]" -map "[vd]" -map "[a0]" -map "[a1]" -y output.mkv
しかし、出力には字幕が含まれません。
誰か助けてくれませんか?
答え1
使用
ffmpeg -i intro.mp4 -i input.mkv -itsoffset 4.5 -i input.mkv -i logo.png
-filter_complex
"[0:v] scale=480:270,setdar=16/9 [a];
[1:v] scale=480:270,setdar=16/9 [b];
[3:0] scale=480:270 [wm];
[b][wm] overlay[ov];
[a][0:a:0][0:a:0] [ov][1:a:0][1:a:1] concat=n=2:v=1:a=2 [vd] [a0] [a1]"
-map "[vd]" -map "[a0]" -map "[a1]" -map 2:s? -c:s copy -y output.mkv
マップ ステートメントを指定すると、マップされたストリームのみが含まれます。したがって、字幕ストリームを明示的にマップする必要があります。字幕ストリームが存在しない可能性があるため、?
条件付き割り当てを示す末尾を追加しました。
イントロがビデオの前にあるため、出力の字幕のタイムスタンプが間違ってしまうため、入力ビデオを 2 回入力しました。2 番目の入力にタイムスタンプ オフセットが追加され、そのフィードから字幕がマッピングされます。値はitsoffset
イントロの長さ (秒単位) と同じである必要があります。字幕をトランスコードする必要はありません。