動画の煮るなり焼くなりのメモ

 相変わらず動画関係で苦労している今日この頃。ということで忘れがちなコマンドを備忘的にメモ。

動画ソフト全般的な話

 Debianの場合、non-freeなライセンスのものは含まない方針であるので、FFmpegのような動画関係のソフトウェアにはつらいものがある。よって、debian-multimediaなどの外部リポジトリーを導入したり、あるいは自分のところでビルドすることになる。

 大抵はFFmpegを自分でビルドするか? とか、一部作業をHandBrakeのような他のソフトでやる、果てはwineでWindowsなソフトを動かすということが迫られるわけで。

 あと、DebianだとFFmpegが一時期avconvになっていた関係で、コマンドラインの記述が現在と違うことが結構ある。最新版と書いてあっても十年前の情報ということすらあるので、確認しながら行うと良い。

字幕(ソフトサブ)関係

 字幕関係、特にARIB字幕はFFmpegの公式版ではできない(注: version 4.2で追加された)ので、以下の中のarib-ts2assでass形式にして抽出してからFFmpegか何かでsrtに変換するとよい。ただ、FFmpegでソフトサブを埋め込めるコンテナー形式が例えばmkvなど限られたり、mp4だとmov_textしか入らないので、外部運用するなど考えないとならず。

github.com

 arib-ts2assは出力ファイル名に制限があるようなので、ASCIIなファイル名にで出力するようにするとよい。

% arib-ts2ass in.ts -o mid.ass

 FFmpegでの字幕形式の変換はこんな感じ。

% ffmepg -i mid.ass -scodec srt out.srt

 ちなみに、FFmpegには次のARIB字幕対応版が存在している。(追記: FFmpeg 4.2にて、libarib25経由でARIB STD B25の字幕に対応した)

github.com

 追記: 別解として、wineでtsCaptionを用いてdemux/remuxする方法がある。

my0nio.seesaa.net

ロゴ消し

 FFmpegにはdelogoとremovelogoの二つのフィルターが用意されており、あらかじめロゴ画像が用意できるならremovelogoを用いる。delogoはロゴがある座標範囲で周りの色と合わせてぼかすもの。removelogoで綺麗に消えない場合はその後にunsharpフィルターをかけるか、あるいはdelogoの方が綺麗に消える場合がある。

removelogoで消す場合

 removelogoフィルター用の画像は元の動画と同じ大きさで、ロゴしか入っていない黒地のPNG画像が望ましい。

 ロゴ画像を手動で作成するなら、VLC辺りのプレーヤーでスナップショットを撮って画像処理ソフト(ペイントでもよい)で整える。ただ、地デジのような1440x1080 pxをアスペクト比16:9の1920x1080 pxに引き伸ばしている動画だとスナップショットが1920x1080 pxになるので、幅を縮小することになる。

% ffmpeg -i in.mp4 -vf removelogo=logo.png (中略) out.mp4

 ロゴ画像をコマンドラインで作成する場合は、以下を参照するとよい。

nico-lab.net

delogoで消す場合

 一方、delogoの場合は次のようになる。

% ffmpeg -i in.mp4 -vf delogo=x=1322:y=954:w=46:h=66 (中略) out.mp4

ここでx=1322とy=954はロゴの左上座標が左から1322 px、上から954 pxであることを、w=46とh=66はロゴの幅が41 px、高さが66 pxであることを示している。ロゴ座標を簡単に調べる方法としては、comskipをかけたときにできるlogo.txtを参照するのが手っ取り早い。

Crop

 FFmpegでの動画の画面範囲の切り抜きはcropを用いる。例えば元動画が1920x1080 pxで4:3な動画がピラーボックスになっている場合は、左右両側を240 px取り除いて真ん中の1440x1080 pxを切り抜く形になるので、こんな感じになる。

% ffmpeg -i in.mp4 -vf crop=1440:1080:240:0 (中略) out.mp4

ここで1440:1080は切り抜く動画の大きさで、240:0は左端から240 px、上から0 pxであることを示している。地デジな1440x1080 pxでピラーボックスの場合だと、1880x1880 pxを切り抜くことになるので、crop=1880:1880:180:0となる。これだと画素が正方でないので、正方にするなら、-aspect 4:3 -s 1440x1080で1440幅に引き伸ばしてやることになる。

 また、SD放送の720x480 pxだと、同様に540x480を切り抜く形となりcrop=540:480:90:0、さらに画素を正方にする場合は-aspect 4:3 -s 640x480と幅方向に引き伸ばすことになる。

動画のアスペクト比の変更

 FFmpegだと、-aspect 16:9なりで指定する。通常は-s 1920x1080のように画面の大きさも同時に指定してやると良い。

CMカット

 comskipを用いる。前回書いているので省略。

yu-izumi.hatenablog.com