はじめに
mp4形式の動画ファイルをffmpegを使用して一定時間ごとに分割して1から連番にしたかったが、どうしても0からの連番になってしまい若干てこずったのでまとめた
環境
- ffmpeg 4.3.6-0+deb11u1
$ ffmpeg -v
ffmpeg version 4.3.6-0+deb11u1 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 10 (Debian 10.2.1-6)
configuration: --prefix=/usr --extra-version=0+deb11u1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
状況
mp4形式の動画ファイル(例、in.mp4)を一定時間(例、600秒間=10分間)ごとにffmpegを使用して分割するとき、出力ファイル名(例、out<連番>.mp4)の連番が0からになってしまう。
$ ffmpeg -i in.mp4 -c copy -f segment -segment_time 600 out%d.mp4
$
$ ls out*.mp4
out0.mp4 out1.mp4 out2.mp4 .... (out0.mp4から始まる)
解決方法
ネットを検索してffmpegのオプションとしてstart_number
を指定すればいいのかと思ったら期待した通り動作せず、segment_start_number
オプションで開始番号を指定すれば期待通りに動作させることができた。
$ ffmpeg -i in.mp4 -c copy -f segment -segment_time 600 \
-segment_start_number 1 out%d.mp4 # -segment_start_numberで開始番号を指定
$
$ ls out*.mp4
out1.mp4 out2.mp4 out3.mp4 .... (out1.mp4から始まる)
ややこしいことに出力ファイル形式が静止画と動画ではパラメータ名
、および省略時の値
が変わってしまう
静止画出力の例(パラメータを指定しない場合)
連番は1から始まる(動画の場合は0から始まる)
$ ffmpeg -i in.mp4 -vcodec png out%d.png
$
$ ls out*.png
out1.png out2.png out3.png .... (out1.pngから始まる)
静止画出力の例(パラメータを指定する場合)
開始番号の指定はstart_number
(動画の場合はsegment_start_number
)
$ ffmpeg -i in.mp4 -vcodec png \
-start_number 0 out%d.png # -start_numberで開始番号を指定
$
$ ls out*.png
out0.png out1.png out2.png .... (out0.pngから始まる)