2013年4月29日月曜日

ffmepgコマンドでmp4の動画からm4a(音声)を抜き出してみた

ffmpegコマンドでmp4からm4a音声データだけを抜き出す


中学時代の同級生から電話があり、何かと思ったら

「区民大会で使うBGMが欲しいのだけどどうにかならない? CDとか作り方分からないし...」

それは困った...けど俺もやりたくないし、やり方が分からない。
地元の区民大会にも「必ず出るように!」と町内の先輩から念を押されているので、「そんなこと、嫌です」なんて言えないし。

「了解しました、やりましょう」ということ引き受けてしまい、さらに悪いことに、
Windows8でやろうと思ったのですが、操作方法が難しいのでGentooでやってみました

まず、youtubeで適当にmp4を拾ってくる


これはブラウザで拾ってきてね

次にffmpegパッケージをインストールする


USEフラグはaacを入れてください、自分はこんな感じです
karky7 ~ # equery u media-video/ffmpeg 
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for media-video/ffmpeg-0.10.7:
 U I
 - - 3dnow                : Adds support for 3dnow multimedia processor instructions
 - - 3dnowext             : Enable manually-optimised routines using the AMD 3DNow!Ex SIMD instruction set, present in modern AMD CPUs. (Check for 3dnowext in
                            /proc/cpuinfo to know whether your CPU supports it). 
 + + X                    : Adds support for X11
 + + aac                  : Enables support for MPEG-4 AAC Audio
 - - aacplus              : AAC+ encoding via media-libs/libaacplus.
 + + alsa                 : Adds support for media-libs/alsa-lib (Advanced Linux Sound Architecture)
 - - amr                  : Enables Adaptive Multi-Rate Audio support
 - - avx                  : Adds support for Advanced Vector Extensions instructions (Intel Sandy Bridge, AMD Bulldozer and later chips)
 - - bindist              : Enforces license compatibility constraints via REQUIRED_USE.
 + + bzip2                : Use the bzlib compression library
 - - cdio                 : Enables audio CD grabbing with dev-libs/libcdio.
 - - cpudetection         : Enables runtime CPU detection (useful for bindist, compatibility on other CPUs)
 - - debug                : Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see
                            http://www.gentoo.org/proj/en/qa/backtraces.xml
 - - dirac                : Enable Dirac video support (an advanced royalty-free video compression format) via the reference library: dirac.
 + + doc                  : Adds extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
 + + encode               : Adds support for encoding of audio or video files
 - - faac                 : Use external faac library for AAC encoding
 + - fftools_aviocat      : cat's an URL to another one, useful for dumping streams.
 + - fftools_cws2fws      : converts cws files (Macromedia Flash, compressed) to fws ones (Macromedia Flash, uncompressed).
 + - fftools_ffeval       : A simple expression evalutor.
 + - fftools_graph2dot    : A tool to convert a libavfilter graph to a dot file.
 + - fftools_ismindex     : A tool for creating smooth streaming manifests.
 + - fftools_pktdumper    : Dumps packets as demuxed by libavformat.
 + - fftools_qt-faststart : Rearranges a Quicktime file to facilitate network streaming.
 + - fftools_trasher      : Writes burts of random data into a file. Great for testing error robustness/resilience/concealment.
 - - frei0r               : Enable frei0r wrapping in libavfilter
 - - gnutls               : Adds support for net-libs/gnutls (TLS 1.0 and SSL 3.0 support)
 - - gsm                  : Adds support for the gsm lossy speech compression codec
 + - hardcoded-tables     : Use pre-calculated tables rather than calculating them on the fly.
 - - ieee1394             : Enable FireWire/iLink IEEE1394 support (dv, camera, ...)
 - - jack                 : Adds support for the JACK Audio Connection Kit
 - - jpeg2k               : Support for JPEG 2000, a wavelet-based image compression format
 - - libass               : SRT/SSA/ASS (SubRip / SubStation Alpha) subtitle support
 - - libv4l               : Uses media-libs/libv4l for video4linux instead of direct calls. Adds support for more devices via the userspace library.
 + + mmx                  : Adds support for optimizations for Pentium MMX and Athlon class processors
 - - mmxext               : Enables mmx2 support
 - - modplug              : Adds libmodplug support for playing SoundTracker-style music files
 + + mp3                  : Add support for reading mp3 files
 - - network              : Enables network streaming support
 - - openal               : Adds support for the Open Audio Library
 - - openssl              : Enables dev-libs/openssl support. Adds support for encrypted network protocols (TLS/HTTPS).
 - - oss                  : Adds support for OSS (Open Sound System)
 - - pic                  : Force shared libraries to be built as PIC (this is slower)
 + + pulseaudio           : Adds support for PulseAudio sound server
 - - rtmp                 : Enable Real Time Messaging Protocol using librtmp
 - - schroedinger         : Enable Dirac video support (an advanced royalty-free video compression format) via libschroedinger (high-speed implementation in C of the
                            Dirac codec).
 + + sdl                  : Adds support for Simple Direct Layer (media library)
 - - speex                : Adds support for the speex audio codec (used for speech)
 - - ssse3                : Faster floating point optimization for SSSE3 capable chips (Intel Core 2 and later chips)
 - - static-libs          : Build static libraries
 - - test                 : Workaround to pull in packages needed to run with FEATURES=test. Portage-2.1.2 handles this internally, so don't set it in
                            make.conf/package.use anymore
 - - theora               : Adds support for the Theora Video Compression Codec
 - - threads              : Adds threads support for various packages. Usually pthreads
 + + truetype             : Adds support for FreeType and/or FreeType2 fonts
 - - v4l                  : Enable support for video4linux (using linux-headers or userspace libv4l libraries)
 - - vaapi                : Enables VAAPI (Video Acceleration API) for hardware decoding
 - - vdpau                : Enable the Video Decode and Presentation API for Unix acceleration interface
 + + vorbis               : Adds support for the OggVorbis audio codec
 - - vpx                  : Enables vp8 codec support using libvpx: Decoding vp8 does not require this to be enabled but libvpx can also be used for decoding; encoding
                            vp8 requires this useflag to be enabled though.
 + + x264                 : Enable h264 encoding using x264
 + + xvid                 : Adds support for xvid.org's open-source mpeg-4 codec
 + + zlib                 : Adds support for zlib (de)compression
karky7 ~ # 

次にffmpegパッケージをインストールする


USEフラグを決めたらffmpegパッケージのインストール
karky7 ~ # emerge -pv media-video/ffmpeg 

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild     U  ] media-video/ffmpeg-0.10.7 [0.10.3] USE="X aac alsa bzip2 doc encode hardcoded-tables mmx mp3 pulseaudio sdl truetype vorbis x264 xvid zlib -3dnow -3dnowext -aacplus (-altivec) -amr -avx -bindist -cdio (-celt) -cpudetection -debug -dirac -faac -frei0r -gnutls -gsm -ieee1394 -jack -jpeg2k -libass -libv4l -mmxext -modplug (-neon) -network -openal -openssl -oss -pic -rtmp -schroedinger -speex -ssse3 -static-libs {-test} -theora -threads -v4l -vaapi -vdpau (-vis) -vpx" FFTOOLS="aviocat cws2fws ffeval graph2dot ismindex pktdumper qt-faststart trasher" 5,647 kB

Total: 1 package (1 upgrade), Size of downloads: 5,647 kB

 * IMPORTANT: 1 news items need reading for repository 'hacking-gentoo'.
 * IMPORTANT: 13 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.

karky7 ~ # emerge media-video/ffmpeg

ffmpegをコマンドから使ってみる

こんな感じで変換できる、とりあえずffmpeg --helpしても膨大なヘルプが出てくるので後で確認してください

オプションの説明
  • -i
    • inputファイル
  • -nv
    • 音声のみ抽出(disable video) 
  • -acodec copy
    •  force audio codec ('copy' to copy stream)

と言うような感じで、抜き出す

cuomo@karky7 ~/m4a $ ffmpeg -i ニンジャリバンバンキャリーパミュパミュ.mp4 -vn -acodec copy ニンジャリバンバンキャリーパミュパミュ.m4a
ffmpeg version 0.10.7 Copyright (c) 2000-2013 the FFmpeg developers
  built on Apr 29 2013 16:33:56 with gcc 4.5.4
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --cxx=x86_64-pc-linux-gnu-g++ --ar=x86_64-pc-linux-gnu-ar --optflags='-mtune=native -O2 -pipe' --extra-cflags='-mtune=native -O2 -pipe' --extra-cxxflags='-mtune=native -O2 -pipe' --disable-static --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --disable-stripping --disable-debug --disable-network --disable-vaapi --disable-vdpau --enable-libmp3lame --enable-libvo-aacenc --enable-libvorbis --enable-libx264 --enable-libxvid --disable-indev=v4l --disable-indev=v4l2 --disable-indev=oss --disable-indev=jack --enable-x11grab --enable-libpulse --disable-outdev=oss --enable-libfreetype --disable-amd3dnow --disable-amd3dnowext --disable-altivec --disable-avx --disable-mmx2 --disable-ssse3 --disable-vis --disable-neon --cpu=host --enable-hardcoded-tables
  libavutil      51. 35.100 / 51. 35.100
  libavcodec     53. 61.100 / 53. 61.100
  libavformat    53. 32.100 / 53. 32.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 61.100 /  2. 61.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ニンジャリバンバンキャリーパミュパミュ.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-04-08 12:52:24
  Duration: 00:04:24.31, start: 0.000000, bitrate: 725 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x360, 626 kb/s, 23.98 fps, 23.98 tbr, 48k tbn, 47.95 tbc
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 96 kb/s
    Metadata:
      creation_time   : 2013-04-08 12:52:25
      handler_name    : 
Output #0, ipod, to 'ニンジャリバンバンキャリーパミュパミュ.m4a':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-04-08 12:52:24
    encoder         : Lavf53.32.100
    Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, 96 kb/s
    Metadata:
      creation_time   : 2013-04-08 12:52:25
      handler_name    : 
Stream mapping:
  Stream #0:1 -> #0:0 (copy)
Press [q] to stop, [?] for help
size=    3143kB time=00:04:24.31 bitrate=  97.4kbits/s    
video:0kB audio:3098kB global headers:0kB muxing overhead 1.460185%
cuomo@karky7 ~/m4a $

一つ一つコマンドを打つのは面倒なのでhaskellで片付ける


頑張ってhaskellで変換スクリプトをシコシコ作ってみました
第1引数にmp4のファイルがあるディレクトリを指定すると全部をm4aファイルに変換する優れものです
import System.Directory
import System.Environment (getArgs)
import System.Posix
import Control.Monad (forM, filterM)
import System.Process
import Data.List.Split
import System.Exit

main :: IO()
main = do
  path <- getPath
  fs <- getDirectoryContents path
  fullpath <- filterM isFile $ map (\filepath -> path ++ filepath) fs
  _ <- forM fullpath (\file ->
                   do (exitCode, stdout, stderr) <- readProcessWithExitCode "ffmpeg" (createArg file) []
                      case exitCode of
                        ExitFailure _ -> putStrLn stderr >> exitFailure
                        _ -> putStrLn $ "Convert OK: " ++ file)
  putStrLn "Complete."

getPath :: IO String
getPath = do
  path <- getArgs
  return (head path)


createArg :: FilePath -> [String]
createArg fname = case splitOn "." fname of
  [file, _] -> ["-i" , fname, "-vn", "-acodec", "copy", file ++ ".m4a"]
  _ -> []

isFile :: FilePath -> IO Bool
isFile file = getFileStatus file >>= (\fs -> return $ not $ isDirectory fs)
実行結果すると、こんな感じです
cuomo@karky7 ~ $ runhaskell convert.hs ~/mp4/
Convert OK: /home/cuomo/mp4/そのまま東へ-ファンモン.mp4
Convert OK: /home/cuomo/mp4/晴伝説-湘南乃風.mp4
Convert OK: /home/cuomo/mp4/虹-福山雅治.mp4
Convert OK: /home/cuomo/mp4/キセキ-GReeeeN.mp4
Convert OK: /home/cuomo/mp4/ワイルトアットハート-嵐.mp4
Convert OK: /home/cuomo/mp4/夏色-ゆす.mp4
Convert OK: /home/cuomo/mp4/ヘヒーローテーション-AKB48.mp4
Convert OK: /home/cuomo/mp4/JAMBOREE!!-AAA.mp4
Convert OK: /home/cuomo/mp4/あの紙ヒコーキくもり空わって-19.mp4
Convert OK: /home/cuomo/mp4/女々しくて-ゴールデンボンバー.mp4
Convert OK: /home/cuomo/mp4/栄光の架け橋-ゆず.mp4
Convert OK: /home/cuomo/mp4/PartyItUp-AAA.mp4
Convert OK: /home/cuomo/mp4/パンダヒーロー-初音ミク.mp4
Convert OK: /home/cuomo/mp4/走れ-ももいろクローバー.mp4
Convert OK: /home/cuomo/mp4/つけまつける-きゃりーぱみゅぱみゅ.mp4
Convert OK: /home/cuomo/mp4/PONPONPON-きゃりーぱみゅぱみゅ.mp4
Convert OK: /home/cuomo/mp4/あなたに-MONGOL800.mp4
Convert OK: /home/cuomo/mp4/にんじゃりばんばん-きゃりーぱみゅぱみゅ.mp4
Convert OK: /home/cuomo/mp4/Sunny Day Sunday-センチメンタル・バス.mp4
Convert OK: /home/cuomo/mp4/JOINT-RIPSLYME.mp4
Convert OK: /home/cuomo/mp4/ウルトラソウル-Bz.mp4
Convert OK: /home/cuomo/mp4/楽園ベイベー-RipSlyme.mp4
Convert OK: /home/cuomo/mp4/夢叶う-MONGOL800.mp4
Convert OK: /home/cuomo/mp4/高架線-ELLEGARDEN.mp4
Convert OK: /home/cuomo/mp4/ロコローション-オレンジレンジ.mp4
Convert OK: /home/cuomo/mp4/世界はそれを愛と呼ぶんだぜ-サンボマスター.mp4
Convert OK: /home/cuomo/mp4/日曜日よりの使者.mp4
Convert OK: /home/cuomo/mp4/マトリョシカ-初音ミク.mp4
Convert OK: /home/cuomo/mp4/SPARK-三代目.mp4
Convert OK: /home/cuomo/mp4/Sabotage-Beastie Boys.mp4
Convert OK: /home/cuomo/mp4/以心電信-オレンジレンジ.mp4
Convert OK: /home/cuomo/mp4/マツケンサンバII.mp4
Convert OK: /home/cuomo/mp4/Monster-嵐.mp4
Convert OK: /home/cuomo/mp4/フライングゲット-AKB48.mp4
Convert OK: /home/cuomo/mp4/爆音男-湘南乃風.mp4
Complete.
cuomo@karky7 ~ $ 
こんな感じでm4aファイルができあがる、Shellスクリプトで書いた方が早いような気がしますが...笑 ^^;

抜いたm4aがMacで聞けるか試してみる


これをMacで聞いてみる、と


ニンジャリバンバン、松ケンとか、聞けてる、とりあえずこれでOK、区民大会はGentoo >>= Macな音楽転送で何とかなりそうです。

2013年4月23日火曜日

HACKING: 美しき策謀(第2版) がたまらなく面白い

正しいHACKINGを学びましょう

前から欲しかった本がタマタマ本屋さんにあったので、思わず買ってしまいました。ほぼバイナリー的なお話が多いです。そちらに興味がある方には必読の本でしょう。



昨今、セキュリティーや脆弱性をついた攻撃などが多いデスよね、最近も色々あったばかりで、やはり自社システムなどを正常、安定に保にはいろいろな攻撃方法、クラッキング方法などを知っていた方が為になるとは思います。

偉いことをいってるようですが、さほど知っている理由ではありません 笑...

単純なコードでもこんなことになってる! 

 

日頃、仕事上LWな言語で仕事をするので、Lowレベルなところを意識する事が少なくなったような感じがします。
バイナリーの世界ではこんなことになってるって事が多いのです(タマタマ発見したのですが...)


普通のCのコード、見れば分かりますが5回「I'm tired today」を表示する
#include <stdio.h>

int main(void)
{
  int i;
  for(i = 0; i < 5; i++) {
    printf("Ah, I'm tired today\n");                                                     
  }
  return 0;
}

これをコンパイルして実行
cuomo@karky7 ~/sample $ gcc print.c -o print
cuomo@karky7 ~/sample $ ./print 
Ah, I'm tired today
Ah, I'm tired today
Ah, I'm tired today
Ah, I'm tired today
Ah, I'm tired today
cuomo@karky7 ~/sample $

これをobjdumpで見てみると、こうなってます。 アセンブラのコードはx86系の64bitCPUならこうなると思います。

レジスタはrsp(64bitスタックポインタレジスタ)、rbp(64bitスタックベースポインタ)、eax(32bitアキュムレータレジスタ)など色々ありますが割愛させて下さい。

cuomo@karky7 ~/sample $ objdump -D print | grep -A14 '<main>'
0000000000400534 <main>:
  400534:       55                      push   %rbp
  400535:       48 89 e5                mov    %rsp,%rbp
  400538:       48 83 ec 10             sub    $0x10,%rsp
  40053c:       c7 45 fc 00 00 00 00    movl   $0x0,-0x4(%rbp)
  400543:       eb 0e                   jmp    400553 <main+0x1f>
  400545:       bf 4c 06 40 00          mov    $0x40064c,%edi
  40054a:       e8 e1 fe ff ff          callq  400430 <puts@plt>
  40054f:       83 45 fc 01             addl   $0x1,-0x4(%rbp)
  400553:       83 7d fc 04             cmpl   $0x4,-0x4(%rbp)
  400557:       7e ec                   jle    400545 <main+0x11>
  400559:       b8 00 00 00 00          mov    $0x0,%eax
  40055e:       c9                      leaveq 
  40055f:       c3                      retq 

ちなみに知らなかったのですがobjdumpがIntelシンタックスでも出力できる
cuomo@karky7 ~/sample $ objdump -M intel -D print | grep -A14 '<main>'
0000000000400534 <main>:
  400534:       55                      push   rbp
  400535:       48 89 e5                mov    rbp,rsp
  400538:       48 83 ec 10             sub    rsp,0x10
  40053c:       c7 45 fc 00 00 00 00    mov    DWORD PTR [rbp-0x4],0x0 ーー> i=0
  400543:       eb 0e                   jmp    400553 <main+0x1f> ーー> 400553のアドレスへジャンプ
  400545:       bf 4c 06 40 00          mov    edi,0x40064c ーー> I'm tired todaiのIの保存されているアドレスをediへ入れる
  40054a:       e8 e1 fe ff ff          call   400430 <puts@plt> ーー> printfのcall(コンパイラがputsに修正)
  40054f:       83 45 fc 01             add    DWORD PTR [rbp-0x4],0x1 ーー> i++
  400553:       83 7d fc 04             cmp    DWORD PTR [rbp-0x4],0x4 ーー> i < 5
  400557:       7e ec                   jle    400545 <main+0x11>
  400559:       b8 00 00 00 00          mov    eax,0x0 ーー> return 0(関数の戻り値はeaxレジスタに入れて返す)
  40055e:       c9                      leave  
  40055f:       c3                      ret  
MS-DOSとかでアセンブラを書いていた自分にとってはこちらの方が読みやすいのデスが、今となってはもうどちらでもいいです。コード中に説明を書いてしまいましたが、こんな感じでプログラムが動くって分かります。printfでコード中に書いているのデスが、可変長引数が無いので、gccがputsへ最適化してくれたりと色々「ふーん」っていうことがたくさんあります。 さらにgccのオプションをちょっと変えると....
cuomo@karky7 ~/sample $ gcc -O3 print.c -o print
cuomo@karky7 ~/sample $ objdump -M intel -D print | grep -A14 '<main>'
0000000000400540 <main>:
  400540:       48 83 ec 08             sub    rsp,0x8
  400544:       bf 6c 06 40 00          mov    edi,0x40066c
  400549:       e8 e2 fe ff ff          call   400430 <puts@plt>
  40054e:       bf 6c 06 40 00          mov    edi,0x40066c
  400553:       e8 d8 fe ff ff          call   400430 <puts@plt>
  400558:       bf 6c 06 40 00          mov    edi,0x40066c
  40055d:       e8 ce fe ff ff          call   400430 <puts@plt>
  400562:       bf 6c 06 40 00          mov    edi,0x40066c
  400567:       e8 c4 fe ff ff          call   400430 <puts@plt>
  40056c:       bf 6c 06 40 00          mov    edi,0x40066c
  400571:       e8 ba fe ff ff          call   400430 <puts@plt>
  400576:       31 c0                   xor    eax,eax ーー> return 0
  400578:       48 83 c4 08             add    rsp,0x8
  40057c:       c3                      ret

初め見たときは、これなんだ?って思いますがよく見てみると、forが単純にそのまま5回分展開されてprintf(puts)がcallされてるアセンブラコードの展開されているのですね。xor eax,eaxなんてmov eax,0ってやるよりオペコードのバイト数が少なく済むようにちゃんと変わってるところが凄い。オペコードが少なければCPUクロック数が少なく済むからね、 

エコじゃないか!!!!!!

まぁそんなことはどうでもいいのですが、こんな感じで色々バイナリ感を楽しむ事ができます、タイトルと内容がかなりかけ離れてしまいましたが、とにかくバイナリは楽しいです。
みなさんも是非.....



2013年4月21日日曜日

gentooのpython-pptxで美人の水着画像をpptx化する

python-pptxで美人の水着画像をpptx化する


Shizuoka.pyでちょっと人気だったpythonのパッケージpython-pptxのebuildを作りました。良かったら使って下さい。
まずpython-pptxパッケージをインストールする

karky7 ~ # layman -a karky7
...
...
...
karky7 ~ # emerge -pv dev-python/python-pptx

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] dev-python/beautifulsoup-4.1.3-r1:4  USE="doc {-test}" PYTHON_TARGETS="python2_7 python3_2 -python2_6 -python3_1 (-python3_3)" 129 kB
[ebuild  N     ] dev-python/lxml-3.0.1  USE="doc threads -examples" PYTHON_TARGETS="python2_7 python3_2 -python2_6 -python3_1 (-python3_3)" 3,131 kB
[ebuild  N     ] dev-python/python-pptx-0.2.2::karky7  PYTHON_TARGETS="python2_7 -python2_6" 0 kB

Total: 3 packages (3 new), Size of downloads: 3,259 kB

 * IMPORTANT: 1 news items need reading for repository 'hacking-gentoo'.
 * IMPORTANT: 12 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.

karky7 ~ # emerge dev-python/python-pptx


画像収集pythonスクリプトを実行する


適当なディレクトリを掘って、その中でスクリプトを実行する。
これで、かわいい水着のおねぇさんの画像がpptxで出来上がる

cuomo@karky7 ~ $ mkdir mizugi
cuomo@karky7 ~ $ cd mizugi/
cuomo@karky7 ~/mizugi $ python mizugi-pptx.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

from pptx import Presentation
from pptx.util import Inches, Px
import requests
import re

prs = Presentation()
bullet_slidelayout = prs.slidelayouts[0]
c = requests.get('http://matome.naver.jp/odai/2135350364969742801').content
urls = [x.group(1) for x in re.finditer(r'', c)]
for i, url in enumerate(urls[:10], 1):
    img_path = "{}.jpg".format(i)
    r = requests.get(url)
    if r.status_code == 200:
        img = r.content
        with open(img_path, 'w') as f:
            f.write(img)
        shapes = prs.slides.add_slide(bullet_slidelayout).shapes
        shapes.placeholders[0].text = '水着アイドル({})'.format(i)
        top = Inches(1.5)
        led = Inches(3)
        width = Px(280)
        height = int(width * 1.427)
        pic = shapes.add_picture(img_path, led, top, width, height)

prs.save('tamannai.pptx')



これはたまんない、Pythonの無限の可能性を感じる、今日この頃です....


2013年4月16日火曜日

静岡Python会、Shizuoka.py行ってきました

Shizuoka.py面白かった

4月13日(土)に静岡市で行われたPythonの勉強会へ出席させて頂きました。やはりPythonの人気は凄いですね。
静岡中部にはPython遣いが多くいるととある日本酒党のコワモテHaskellerに聞いていたのでちょっとビビってました...


Shizuoka.pyやったこと

  • 他言語ユーザーが素早くpythonを学ぶために(@kzfm)
  • Try not. Do or do not.〜GAE4Pと開発環境のお話〜(@secondarykey)
  • お手軽構成管理ツールfabricの紹介(@ando_ando_ando)
  • azureでdjango(@ishisaka)
  • igo-pythonでTwitterに共有された音楽情報の簡単な形態素解析(@oec014)
  • subprocessのススメ(@ksmakoto)
  • Python でmunin plugin を書いてみる(@ftnk)
  • pythonでpptx(@kzfm)
色々、情報が収集できたきがします、Python系の新しい書籍や、GAE for python、から形態素解析、Pythonのプロセス、IPC系functionの説明、サーバー管理者のPythonの使いどころ、Pythonで収集した水着系アイドル写真のpptx化(ebuild作成中です)など、皆さんのPythonの使い方が半端ない事がわかりました。 笑

最近、HaskellにハマってPythonが手薄になっているのでまたPythonを書こうかと思っています。

ちなみに、静岡にくる他県の方は、この様な縮図になっているので注意してください

ネタ元・・・@kzfm

また参加したいと思いますのでよろしくお願いします