やるきなし

2020/08/28 13:59 / ffmpeg を使って mp4 の一部を削除する

お手軽に ffmpeg を使って mp4 の一部を削除するメモ.

[Makefile]
FILES=input-0.mp4 input-1.mp4
output.mp4: $(FILES:.mp4=.ts)
    t=`echo $(FILES:.mp4=.ts) | sed 's, ,|,'` ;\
    ffmpeg -y -i "concat:$$t" -c copy -bsf:a aac_adtstoasc $@
input-0.mp4: input.mp4
    ffmpeg -y -t "59:32" -i $< -c copy $@
input-1.mp4: input.mp4
    ffmpeg -y -ss "59:38" -i $< -c copy $@
$(FILES:.mp4=.ts): %.ts: %.mp4
    ffmpeg -y -i $< -c copy -bsf:v h264_mp4toannexb -f mpegts $@

MP4 (Video: h264, Audio: aac) を想定.59分32秒のところまでの mp4 と 59分38秒から終わりまでの mp4 を作成して,それを(一旦TSを経由して)結合(つまりその間の6秒をカット).コーデックはそのまま(copy)なので高速に (ほぼディスクアクセスのみで)処理できる反面,切り出しの指定の精度はかなり悪いので,ざっくりとした削除しかできないけど.

TSを経由するのは https://trac.ffmpeg.org/wiki/Concatenate を参考にした.以下とのこと.

If you have MP4 files, these could be losslessly concatenated by first transcoding them to MPEG-2 transport streams.