Python 9 ffmpeg GUI スクリプト完成! | Eee701

Eee701

愛機EeePC701にLinuxをインストール。
ソフトの使い方、設定などを書く予定です(´ω`)

CPU:celelon900M(L2=512k)
RAM:2048M
SSD:標準の8G USBメモリ並みに遅い(>_<)
server:今はSSHとFTPのみローカルで使う時がある

テーマ:
ffmpegmp4split.py(要ffmpeg, 入っているpython環境によってはtkpython)

どう考えても、たかだか拡張子変えるとかアスペクト比変えるだけで再変換待ちなどバカげている。やはりエンジンはavconv却下にして、ffmpegに変更した
今回は今までの音声抜き、映像抜きに加え、アスペクト比の変更(16:9,4:3)と、コンテナ換え(拡張子換え)に対応。
一瞬で変わるものだけをプリセットに加えた。
ガイドに従ってファイルを選び、左のコンボボックスでオプションを選択してGO!!を押すと、すぐに変換されたファイルが同じフォルダに出来る。UIにDONE表示が出れば完了だ。
通常の形式変換ソフトに慣れた者共では、あまりの早さにチビってしまうことうけあいだ。
拡張子換えのときは、オプション-codec copy ,を選択後、コンマの後に拡張子(mkv,mov,flvなどmp4と同じコーデックが使えそうなモノ)を入力してからEnterキーを押し、
下画面のガイドに入力した拡張子が表示されたらGo!ボタンを押せばオッケーザンス!

ソースも50行くらいしかないうえ、処理順に並べたので、分かりやすいと思う

今回のソース
操作に応じてラベルの表示を変える.configure
コンボボックスの操作に動作を関連付ける.bind
が今回で登場したオプションでっせ!

なお、今回もエラー処理は入れていないので、気になる輩は自分で足すが良かろう

# coding: utf-8
from Tkinter import *
import ttk
import tkFileDialog
import commands

inp=""
   
mado=Tk()
mado.title('ffmpeg GUI')

waku=Frame(mado, width=320, height = 240,bd = 2, relief = RAISED)
waku.pack(fill=BOTH, expand=1)

def load():
    global inp
    inp=tkFileDialog.askopenfilename()
    waku0.label0_textvariable=inp
    label0.configure(text=inp)
    labelhelp.configure(text='2.SELECT OPTIONS'
)

botan1=Button(waku, text="load", command = load)
botan1.grid(row=0, column=0,sticky=W+E)

def combo(*args):
    global option,outp
    opt=box.get()
    a = opt.split(',')
    option=a[0]
    kaku=a[1]
    outp = inp.rstrip('mp4') + kaku
    label1.configure(text=outp)
    label2.configure(text='')


box = ttk.Combobox(waku, values= (' -vn -acodec copy ,m4a', ' -vcodec copy -an ,m4v',' -aspect 16:9 -codec copy ,16:9.mp4',' -aspect 4:3 -codec copy ,4:3.mp4',' -codec copy ,'))
box.current(0)
box.bind("<<ComboboxSelected>>",combo)
box.bind("<Enter>",combo)

box.grid(row=0, column=1,sticky=W+E)

waku0=Frame(waku, width=320, height = 240,bd = 2)
waku0.grid(row=1, column=0, columnspan=2,sticky=W+E)

labelhelp=Label(waku0, text='1.PRESS LOAD !', width=32)
labelhelp.pack()
label0=Label(waku0, text='', width=32)
label0.pack()
label1=Label(waku0,text='', width=32)
label1.pack()
label2=Label(waku0,text='', width=32)
label2.pack()

def go():
    avcmd = 'ffmpeg -i "' + inp + '"' + option + '"' + outp + '"'   
    commands.getoutput(avcmd.encode('utf_8'))
    label2.configure(text='Done!')
botan3=Button(waku, text="GO!!", command = go)
botan3.grid(row=2, column=0, columnspan=2,sticky=W+E)

mado.mainloop()