Very first working prototype

This commit is contained in:
Yorick Barbanneau 2015-12-08 17:32:42 +01:00
parent 5a59ef0367
commit b22258d88e

View file

@ -3,75 +3,172 @@
# export-video.py # export-video.py
# --------------- # ---------------
# ré-écriture complète du script bash eponyme en python # ré-écriture complète du script bash eponyme en python
import sys, getopt, re, os import sys
import getopt
import re
import os
import subprocess
def usage ():
print ("export-video -i input -o output [-d --desinterlace]") def usage():
params = {\ print("export-video -i input -o output [-d --desinterlace]")
"desinterlace":False,\
"file_output":"video",\ params = {
"file_input":"",\ "desinterlace": False,
"video_bitrate":"600k",\ "file_output": "video",
"audio_bitrate":"96k",\ "file_input": "",
"video_quality":"good",\ "vbitrate": "600k",
"h264_vcommand":"-trellis 0 -me_method umh -subq 8 -me_range 16 -bf 3 -rc_lookahead 16 -g 250",\ "abitrate": "96k",
"h264_acommand":"-strict -2'",\ "video_quality": "good",
"webm_vcommand":"rc_lookahead 16 -keyint_min 0 -g 250 -skip_threshold 0 -level 116 -bufsize 500k",\ "h264_vcommand": [
"webm_acommand":"-strict -2",\ "-trellis", "0",
"verbose":True,\ "-me_method", "umh",
"pattern":""} "-subq", "8",
"-me_range", "16",
"-bf", "3",
"-rc_lookahead", "16",
"-g", "250"
],
"h264_acommand": ["-strict", "experimental"],
"webm_vcommand": "-rc_lookahead 16 -keyint_min 0 -g 250 -skip_threshold \
0 -level 116",
"webm_acommand": "-strict -2",
"verbose": True,
"pattern": "",
"twopass": True}
VERSION = "0.1dev" VERSION = "0.1dev"
ffmpeg = "" exec_ffmpeg = os.path.join("ffmpeg")
def listFile (directory, pattern):
if params["verbose"]: print ("searching in directory" , directory)
files_list=[]
try:
dirs = os.listdir(directory)
except notDirectory:
print ("error : not a directory?")
return
for i in dirs:
if os.path.isdir(directory+"/"+i):
files_list.extend(listFile(directory+"/"+i, pattern))
else:
if re.search(pattern, i) is not None:
files_list.append(directory + "/"+ i)
return files_list
def processArg (sysarg): def log(msg):
output = "video" sys.stdout.write(msg + "\n")
try:
opts, args = getopt.getopt(sysarg, "hi:o:dp:", ["help","input=" "output=", "desinterlace", "pattern="])
except getopt.GetoptError: def listFile(directory, pattern):
usage() if params["verbose"]:
sys.exit(2) print("searching in directory", directory)
for opt, arg in opts: files_list = []
if opt in ("-h, --help"): try:
usage() dirs = os.listdir(directory)
sys.exit() except:
if opt in ("-o", "--output"): print("error : not a directory?")
print ("output spécifié " + arg) return
params["file_output"] = arg
if opt in ("-d","--desinterlace"): for i in dirs:
print ("desinterlace on") if os.path.isdir(directory + "/" + i):
params["desinterlace"] = True files_list.extend(listFile(directory + "/" + i, pattern))
if opt in ("-i","--input"): else:
params["file_input"] = arg if re.search(pattern, i) is not None:
if opt in ("-p", "--pattern"): files_list.append(directory + "/" + i)
params["pattern"] = "^\\w*."+arg+"$" return files_list
def processArg(sysarg):
try:
opts, args = getopt.getopt(
sysarg, "hi:o:dp:a:v:2",
[
"help",
"input=",
"output=",
"desinterlace",
"pattern=",
"abitrate=",
"vbitrate=",
"twopass"
]
)
except getopt.GetoptError:
usage()
sys.exit(2)
for opt, arg in opts:
if opt in ("-h, --help"):
usage()
sys.exit()
if opt in ("-o", "--output"):
log("output spécifié " + arg)
params["file_output"] = arg
if opt in ("-d", "--desinterlace"):
log("desinterlace on")
params["desinterlace"] = True
if opt in ("-i", "--input"):
params["file_input"] = arg
if opt in ("-p", "--pattern"):
params["pattern"] = "^\\w*."+arg+"$"
if opt in ("-a", "--abitrate"):
params["abitrate"] = arg
if opt in ("-v", "--vbitrate"):
params["vbitrate"] = arg
if opt in ("-2", "--twopass"):
log("TwoPass encoding on")
params["twopass"] == True
def encode_h264(src, dest):
if (params["twopass"] == True):
log("two pass encoding started ...")
firstpass = [
exec_ffmpeg,
"-y",
"-i", src,
"-codec:va", "libx264",
"-b:v", params["vbitrate"],
"-pass", "1",
] + params["h264_vcommand"] + [
"-f", "rawvideo",
"/dev/null"
]
secondpass = [
exec_ffmpeg,
"-i", src,
"-pass", "2",
"-codec:v", "libx264",
"-b:v ", params["vbitrate"]
] + params["h264_vcommand"] + [
"-b:a", params["abitrate"]
] + params["h264_acommand"] + [
dest+".mp4"
]
subprocess.call(firstpass)
subprocess.call(secondpass)
else:
log("one pass encoding started ...")
encode = [
exec_ffmpeg,
" -i " + src,
" -pass 2",
"-codec:v libx264",
" -b:v " + params["vbitrate"]
] + params["h264_vcommand"] + [
" -b:a "+params["abitrate"],
params["h264_acommand"],
dest+".mp4"
]
subprocess.call(encode)
if __name__ == "__main__": if __name__ == "__main__":
processArg(sys.argv[1:]) log("export_video v" + VERSION + "FFMPEG exec " + exec_ffmpeg)
if not params["file_input"]: processArg(sys.argv[1:])
print ("you must specify a file / directory" + params["file_input"]) if not params["file_input"]:
sys.exit(2) print("you must specify a file / directory" + params["file_input"])
if os.path.isdir (params["file_input"]): sys.exit(2)
if params["verbose"]: print (params["file_input"], " is a directory") if os.path.isdir(params["file_input"]):
video_files = listFile(params["file_input"], params["pattern"]) if params["verbose"]:
log(params["file_input"]+" is a directory")
video_files = listFile(params["file_input"], params["pattern"])
else:
if os.path.isfile(params["file_input"]):
if (params["file_output"]):
params["file_output"] = os.path.basename(params["file_input"])
else:
if(os.path.isdir(params["file_output"])):
params["file_input"] += \
os.path.basename(params["file_input"])
log(params["file_input"] + " is a file")
encode_h264(params["file_input"], params["file_output"])
else:
print("input file desn't exist, bye bye")
sys.exit(2)
sys.exit(0)