avconvで動画を結合するスクリプト。雑。結構前に書いたのを(少し修正して)貼ってみた。 これ書いてて知ったんですが、-vcodec と -c:v って違うみたいですね。 使用例: avjoin v1.mkv v2.mkv "-c:v libx264 -c:a flac" vo.mkv 参考: https://libav.org/faq.html#How-can-I-join-video-files_003f
- #!/bin/sh
- #引数の最初からは結合する動画ファイルの連続。
- #初めて-で始まる引数が来たらそれは結合後エンコードオプション
- #普通変更したいようなものが多数、引数で変更できないので書き換えるべし。
- #次の引数は出力先
- ins=0
- framerate=30
- dbg=""
- mkdir /tmp/avjoin_$$
- while true
- do
- if printf %s "$1"|grep -q ^-
- then
- break
- elif [ "$1" = "" ]
- then
- rm -r /tmp/avjoin_$$
- exit 1
- fi
- ins=`expr ${ins} + 1`
- $dbg mkfifo /tmp/avjoin_$$/a.${ins}
- $dbg mkfifo /tmp/avjoin_$$/v.${ins}
- $dbg avconv -i "$1" -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 pipe:1 > /tmp/avjoin_$$/a.${ins} 2>/dev/null < /dev/null &
- $dbg avconv -i "$1" -r ${framerate} -an -f image2pipe -vcodec ppm pipe:1 > /tmp/avjoin_$$/v.${ins} 2>/dev/null < /dev/null &
- as="${as} /tmp/avjoin_$$/a.${ins}"
- vs="${vs} /tmp/avjoin_$$/v.${ins}"
- shift
- done
- $dbg mkfifo /tmp/avjoin_$$/a.a
- $dbg mkfifo /tmp/avjoin_$$/v.a
- $dbg cat ${as} > /tmp/avjoin_$$/a.a &
- $dbg cat ${vs} > /tmp/avjoin_$$/v.a &
- $dbg avconv -f u16le -acodec pcm_s16le -ac 2 -ar 44100 \
- -i /tmp/avjoin_$$/a.a \
- -r ${framerate} -f image2pipe -vcodec ppm \
- -i /tmp/avjoin_$$/v.a \
- $1 "$2"
- rm -r /tmp/avjoin_$$