kivyLauncher でビデオプレイヤー…を作りたかったわけではない

やりたいこととは違ったの。

スマホで動画撮影するのにさ、デバイスの向きはあんまし気にしたくないじゃん。というよりか、そのときどきで持ちやすい向きってあるわけじゃん。なんてズボラなことしてるとこんなお馬鹿な動画が撮影出来る:


寝っ転がった状態でなにげに撮ったのよね。

これをスマホ上で補正出来ないかなぁと思ったのね。ffmpeg なんてモジュールが入ってるから、出来るんじゃないのかなぁと。PC で補正するやり方は Qiita に挙げてる人がいる

と思ったんだけれど、どうもffmpeg モジュールは期待のものとは違っているらしい。

実体は_ffmpeg.pyxと思う。これをみるに、ffmpeg そのものを抱え込んでラップしているのは間違いないんだけれども、_ffmpeg.pyxを覗き込んでみてもどうにも単なるプレイヤー用途の部分しか見当たらないようにみえる。そして、これをさらにこれ経由で kivy.uix.videokivy.uix.videoplayerが包んでいるという関係。というわけで、どうにもまさに「プレイヤーを作る目的」のものしか見当たらない。うーん、せっかく ffmpeg 丸ごと抱え込んでるのにもったいないよなぁ…。

ひとまず「ワォ、自分でプレイヤー作れるなんてステキ!」:

main.py
 1 # -*- coding: utf-8 -*-
 2 from kivy.app import App
 3 from kivy.lang import Builder
 4 from kivy.uix.boxlayout import BoxLayout
 5 
 6 kv = '''
 7 <VideoPlayerDemo>:
 8     orientation: 'vertical'
 9 
10     FileChooserListView:
11         id: filechooser
12         path: '/sdcard/Movies'
13         on_selection: video.source = filechooser.selection[0].encode('utf-8')
14 
15     VideoPlayer:
16         id: video
17         #source: '/sdcard/Movies/160809_190715.mp4'
18         #source: '/sdcard/Movies/High_Speed_IGZO_demo.mp4'
19 '''
20 Builder.load_string(kv)
21 
22 
23 class VideoPlayerDemo(BoxLayout):
24     def __init__(self):
25         super(VideoPlayerDemo, self).__init__()
26 
27 class VideoPlayerDemoApp(App):
28     def build(self):
29         return VideoPlayerDemo()
30 
31 if __name__ == '__main__':
32     VideoPlayerDemoApp().run()

コードで「.encode(‘utf-8′)」がバカらしくてやだが Cython コードで unicode をちゃんと扱ってないんだろう。結果も見ての通りステキとは言えない:

出来ることもあんまりないみたい。ちょっとしたことにはいいだろうが、ちょっとしたことしか出来ない、てことか。

上の FileChooser で High_Speed_IGZO_demo.mp4 てのが見えてると思うけど、これはアタシの AQUOS ZETA SH-04H にサンプルで入ってた動画で、めでたくこのプレイヤーで再生出来ない(のかあるいはデコードにひたすら時間がかかって再生が始まらないのかどっちか不明)。キャプチャで再生出来てる -o が付いた名前の方は、PC で ffmpeg で変換かけたヤツ。

アタシの今の目的の場合だと、「加工処理プログラムを使うようなものを書くにしてもプレビューはいるよね」な目的には合わないこともない。のでやり損てことでもない。けど「加工処理プログラムが欲しいよね」のためには、「android 用 ffmpeg」を別途入れて python から subprocess とかで起動して使うとか、あるいは _ffmpeg.pyx を拡張してしまうとか、まぁそんなことになるんだろうな。