動画の煮るなり焼くなりのメモ
相変わらず動画関係で苦労している今日この頃。ということで忘れがちなコマンドを備忘的にメモ。
動画ソフト全般的な話
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しか入らないので、外部運用するなど考えないとならず。
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の字幕に対応した)
追記: 別解として、wineでtsCaptionを用いてdemux/remuxする方法がある。
ロゴ消し
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
ロゴ画像をコマンドラインで作成する場合は、以下を参照するとよい。
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を用いる。前回書いているので省略。