http://www.google.co.jp/search?num=100&hl=ja&safe=off&biw=1272&bih=776&q=yuv+sox+ffmpeg&btnG=%E6%A4%9C%E7%B4%A2&aq=f&aqi=&aql=&oq=
http://ffmpeg.org/faq.html#SEC23
http://ffmpeg.org/libavfilter.html#SEC34
利用するディスクサイズが少なくなったはずです。果たして本当にそうでしょうか?
soxは100倍まで対応しているようです。
聞き取る場合100倍は無理で2~4倍程度になると思います。
下記の例はperlやexprなどの外部コマンドが必要です。
threadNumを手動で入れる場合で、cpuの利用を最低にしたい場合は1です。
srcFile=./src.mp4 \ && threadNum=$(expr $(grep ^processor /proc/cpuinfo | wc -l) \* 2 - 1) \ && frameSize="-s 512x288" \ && frameRate=60 \ && diameter=3 \ && videoBitrate=1600 \ && ffmpeg -threads ${threadNum} -y -i ${srcFile} \ -mbd 2 -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 2147483647 \ -vcodec mpeg4 -f mp4 ${frameSize} \ -vf "setpts=$(perl -e "print 1/${diameter}")*PTS" \ -an -r $(perl -e "print int(${diameter}*${frameRate})") \ -b $(perl -e "print ${videoBitrate}*${diameter}")k \ -bt $(perl -e "print ${videoBitrate}*${diameter}*20")k -bufsize 1835k -maxrate 400000k -minrate 0 \ tmp1.mp4 \ && ffmpeg -threads ${threadNum} -y -i ${srcFile} -vn -aq 100 tmp2.wav \ && sox tmp2.wav tmp3.wav tempo ${diameter} 30 \ && ffmpeg -threads ${threadNum} -y -i tmp1.mp4 -i tmp3.wav \ -mbd 2 -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 2147483647 \ -vcodec mpeg4 -f mp4 ${frameSize} \ -acodec libfaac -aq 80 -async 30 -r ${frameRate} \ -b ${videoBitrate}k -bt $(expr ${videoBitrate} \* 20)k -bufsize 1835k -maxrate 4000k -minrate 0 \ -pass 1 /dev/null \ && ffmpeg -threads ${threadNum} -y -i tmp1.mp4 -i tmp3.wav \ -mbd 2 -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 2147483647 \ -vcodec mpeg4 -f mp4 ${frameSize} \ -acodec libfaac -aq 80 -async 30 -r ${frameRate} \ -b ${videoBitrate}k -bt $(expr ${videoBitrate} \* 20)k -bufsize 1835k -maxrate 4000k -minrate 0 \ -pass 2 result.mp4流れは、速い映像を作る => 速い音を作る => 2passエンコードで合成する、です。
mpeg4のオプションはマニュアルの内容のままです。
実は -vf sox=xxx のようなオプションがあるのかもしれません、が見つかりません。
例えば、&& ffmpeg, && sox となっている部分を、
&& echo ffmpeg, && echo sox と変更すると、コマンドの文字が出力されます。
0 件のコメント:
コメントを投稿