まさしく、なう、何度も必要になるのであるからしての「マイ取り急ぎ」んぐメモ。
こんな紹介しといてなんだが剥き身の ffmpeg の話。PyAVでもない。
crop しつつ、「お尻の何秒かはゴミ」(ただしこれは音声なしの例):
1 me@host: ~$ ffmpeg -y -i in.mp4 -vcodec h264 -filter:v "crop=1280:768:0:0" -an -t 00:03:23.000 out.mp4
部分カットは「ダル」かった。一度目の作業ヒストリから「雑なシェルスクリプト」に:
1 #! /bin/sh
2 # USAGE:
3 # $prog input cut_start_time cut_end_time
4 # for example:
5 # $prog input.mp4 00:02:14.000 00:02:25.000
6
7 #
8 input="$1"
9 cut_s="$2"
10 cut_e="$3"
11
12 #
13 tmp1=.ffmpgcut$$1.mp4
14 tmp2=.ffmpgcut$$2.mp4
15 tmpL=.ffmpgcut$$CL.txt
16 trap 'rm -fv $tmp1 $tmp2 $tmpL' 0 1 2 3 15
17 #
18
19 ffmpeg -y -i ${input} -vcodec copy -acodec copy -t ${cut_s} ${tmp1}
20 ffmpeg -y -i ${input} -vcodec copy -acodec copy -ss ${cut_e} ${tmp2}
21
22 printf "file '%s'\nfile '%s'\n" `pwd -W`/${tmp1} `pwd -W`/${tmp2} > ${tmpL}
23 ffmpeg -y -f concat -safe 0 -i ${tmpL} -c copy ${input}.out.mp4
テンポラリをカレントに置いてるのは「MSYS と Windows ネイティブとの喧嘩」にまつわる問題を回避している。なまじ色気を出して /tmp なんぞに置こうとすると無駄にハマる。まぁここは詳しくは説明しない。あと「pwd -W」が移植性がなくてやぁねぇ。これ、「MSYS な bash 固有」(と思う)で、MSYS なマウントに基づく仮想ではなく実パスを返す。
こんなもんに Python (PyAV も含め) はお呼びでないでしょ、って思ってるわけでもなくて、そうすりゃぁ色々融通が利くかもなぁと思いつつも、「ひとまず本日の、以後何回かの用を足せればいい」ってノリ、今のところ。
ただ今後も何度も必要になる可能性は結構あるんで、必要に感じたら整理するかも。元はと言えば Windows のムービーメーカーでやろうとして、「遅過ぎて、ハングアップもしちゃって、止めることも出来なくて、…」で仕方なく ffmpeg でやろうとしてる。けど「整理されてりゃぁ」ffmpeg なら速いし快適とも言えるわけで。
2018-06-16追記: 部分カットのもちっとよろしい解を書いた。