†ぽんこつビデオ工房†
作成開始日 2018.09.10
最終更新日 2022.05.26
構文)ffmpeg -ss[開始位置]も[長さ]も基本的に秒数指定だが、[hh:mm:ss]形式で[時:分:秒]指定も可能。また、入力/出力ファイルのコーデックとコンテナは統一しておくことが望ましい(-c copyが指定できるので)。開始位置 -i 入力ファイル名 -t長さ -c copy 出力ファイル名
用例)ffmpeg -ss 53:20 -i stand-by.mp3 -t 21.5 -c copy 綾音理沙おでん.mp3この例では「stand-by.mp3」と言う音声ファイルの53分20秒の位置から21.5秒分切り出している。ちなみに、これは『森本毅郎スタンバイ』で流れた佐倉綾音と種田理沙のセブンイレブンのCMを切り出したときの操作 (^^ゞ
なお、
ffmpeg -i 入力ファイル名 -t【用例】「inp.mp3」の「15秒〜3分30秒」部分(長さ3分15秒)を切り出して「out.mp3」とする終了位置 一時ファイル名 ffmpeg -ss開始位置 -i 一時ファイル名 出力ファイル名
ffmepg -i inp.mp3 -t 3:30 -c copy temp.mp3 ffmepg -ss 15 -i temp.mp3 -c copy out.mp3先に[終了位置]を指定して一時ファイルを作成するのがミソ。これによって、[長さ]指定がそのまま[終了位置]指定になる。
先に[開始位置]を指定してしまうと、[終了位置]=[長さ]−[開始位置]となり、時間計算が必要になる。バッチでhh:mm:ss形式の演算処理はかなり面倒臭い。
ただし、この方法では変換が2回必要で、しかも中間の一時ファイルを作成する必要もある。何とか1行で収まらないかと、オプションの記述位置を変えていろいろと試してみたが、残念ながら1行では無理だった。× ffmpeg -ssこの指定では、「-to」が「-t」と同じ機能になっているカンジなのだ。やはり、[終了位置]が[開始位置]よりも前にないとダメなようなのだが、だからと言って;開始位置 -i 入力ファイル名 -to終了位置 出力ファイル名
× ffmpeg -toとすると、今度はエラーが出て止まってしまうorz 結局、私が成功したのは;終了位置 -ss開始位置 -i 入力ファイル名 出力ファイル名
○ ffmpeg -i 入力ファイル名 -toこれで一応、意図通りの処理をしてくれるようになった。ただし、ffmpegでは「-ss」は「-i」よりも前に指定するのがセオリーのはず。そう考えると、ちょっと気持ちの悪い指定だ。終了位置 -ss開始位置 出力ファイル名
【参考】秒単位で指定する場合は+1
[開始位置]や[終了位置]をミリ秒単位で指定する場合は、そのままの数値を指定すればよい。しかし、秒単位で指定する場合は、値に「+1」しておくことを推奨。たとえば、「10秒〜30秒」の間を切り出したければ、開始位置は「11秒」、終了位置は「31秒」とする。秒指定では1秒以下の端数が切捨てられるため、[開始位置]には前のデータが微妙に残り、[終了位置]では末尾のデータが微妙に足りなくなる可能性がある。