映像を挿入して動画時間を伸ばすことができるtpad
フィルタの使い方。映像のフレームレートに合わせるのでフレーム数、時間の指定だけでよい。映像時間が伸びるので音声時間と合わなくなるときは-shortestをつけると短い方でカットされる。
音声も時間を延ばすには、
音声の先頭に無音を挿入する adelay
音声の末尾に無音を挿入する apad
基本コマンド
映像の最初に100フレーム真っ黒な映像を挿入する。
ffmpeg -i input -vf tpad=start=100 -c:a copy output
映像の最初に10秒間、真っ白な映像を挿入する。
ffmpeg -i input -vf tpad=start_duration=10:color=white -c:a copy output
映像の最後に50フレーム、最後のフレームをコピーする。
ffmpeg -i input -vf tpad=stop=50:stop_mode=clone -c:a copy output
公式ドキュメント:FFmpeg Filters Documentation : tpad
オプション
- start[int]
映像の最初に挿入されるフレーム数
既定値:0
範囲:0 から INT_MAX まで - stop[int]
映像の最後に挿入されるフレーム数。-1 は無限に挿入
既定値:0
範囲:-1 から INT_MAX まで - start_mode[int]
最初に挿入される映像の種類の指定 - 0, add:colorで指定した色。既定値
- 1, clone:最初のフレーム
- stop_mode[int]
最後に挿入される映像の種類の指定 - 0, add:colorで指定した色。既定値
- 1, clone:最後のフレーム
- start_duration[duration]
映像の最初に挿入される時間
既定値:0 - stop_duration[duration]
映像の最後に挿入される時間
既定値:0 - color[color]
addで指定する色。16進数のrrggbb形式か、色名を指定
ffmpeg -i input.mp4 -an -filter_complex “[0:v]setpts=PTS/2.000[v0];[v0]tpad=’stop_duration=1′” output.mp4
上記のように指定した場合、
まず、元動画の倍速の映像が流れ、次に元動画の半分の時間の黒画面が流れ、
最後にstop_durationで指定した時間分の黒画面が流れます。
希望の結果としては、
まず、元動画の倍速の映像が流れ、次にstop_durationで指定した時間分の黒画面が流れて欲しいのですが、tpadで行うことは無理なのでしょうか?
お手数おかけいたしますがご教示ください。
ffmpeg -i input.mp4 -f lavfi -i color=c=black:r=24/1.001:d=1:s=640×360 -filter_complex “[0:v]setpts=PTS/2.000[0];[0][1:v]concat=n=2:v=1:a=0” -an output.mp4
すぐに思いついたのがtpadフィルタを使わずにcocatフィルタを使う方法です。
https://nico-lab.net/concat_with_ffmpeg/
https://looooooooop.blog.fc2.com/blog-entry-1020.html
後ろに黒画面をつけるにはcolorソースで入力ファイルと同じフレームレート(-r)と解像度(-s)で作ります。
https://nico-lab.net/testsrc_with_ffmpeg/
カスタムのテストソースを作ってくっつける方法があるのですね。
tpadだと記述的に簡単ですが、内部処理が記述の順序を無視して、tpad→setptsの順で固定されているのでしょうか…
ご指南ありがとうございます!
[…] 映像の前後にフレームを挿入する (tpad) | ニコラボ […]
[…] 映像の前後にフレームを挿入する (tpad) | ニコラボ […]