View previous topic :: View next topic |
Author |
Message |
Danuvius Guru
Joined: 18 Sep 2004 Posts: 375 Location: Toronto
|
Posted: Mon May 09, 2005 4:34 pm Post subject: [Hu] AVI --> Szuper-Matroska (H.264 + AAC) |
|
|
Új Verzió
Átírtam python szkriptbe az egészet. Ennek már nincsenek problémái hely karakterekkel. És *.avi módon egyszerre több fájllal is tud dolgozni. Még egy plusz hogy a konsole ablaknevében mutatja a státuszát.
Ajánlom a screen-nel használni.
Új Verzió
Másik topikban való Matroska + H.264 + AAC álmodozásaimat valóra váltottam. S gondoltam megosztom a szkriptet.
A szükséges csomagok a következõek:
faac (ajánlott verzió: 1.23.5 -- az újabb nekem mindig lefagyott)
x264 (nem-hivatalos: itt)
mplayer (nem-hivatalos: itt)
mkvtoolnix
Használat:
Code: | ./tudo.sh -p mp4 -b bitrateszám fájlnév.avi |
vagy
Code: | ./tudo.sh -p mp4 -b bitrateszám *.avi |
A végeredmény egy Matroska (.mkv) tartályú fájl H.264-es videóval és AAC audióval.
A már elõzõleg említett 22 perces 260 MB-os rajzfilmemet evvel (500 bitrate-el) levittem 90 MB-ra. (lásd itt minõségmintát 640 bitrate-el) Ebben az is szerepet játszott hogy az MP3-al kódolt hang AC-val feleakkora volt a lent használt paraméterekkel (én nem hallok különbséget), 30 MB-ból hát lett 12 MB audió.
pczolee--ha van kedved birizgáld át ezt a szkriptet OGG használatra; aztán bele-"olvasztom" ebbe a szkriptbe a változtatásaidat (avagy hogy válaszható legyen OGG vagy AAC)
Code: | #!/usr/bin/python -O
# -*- coding: ISO-8859-2 -*-
# Copyright 2005 danuvius@gmail.com
# Distributed under the terms of the GNU General Public License v2
import os,sys,time,getopt
from output import xtermTitle,xtermTitleReset,yellow,bold,green,darkgreen,red,blue,darkred,darkblue,darkyellow,turquoise,nocolor
xtermTitle("Tudó : Magyar Videó Konvertáló Szkript")
print
print bold("Tudó") + " : " + red("Magyar Vid") + bold("eo Konvertá") + green("ló Szkript")
print
print "Copyright 2005 danuvius@gmail.com"
print "Distributed under the terms of the GNU General Public License v2"
print
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "hp:b:", ["help", "profile=", "bitrate="])
except:
usage()
sys.exit(2)
bitrate = None
profile = None
audio_parameters = None
video_parameters = None
for o, a in opts:
if o in ("-h", "--help"):
usage()
sys.exit()
if o in ("-b", "--bitrate"):
bitrate = a
for o, a in opts:
if o in ("-p", "--profile"):
if a == "mp4":
profile = a
audio_parameters = "-q 60 -c 13000"
video_parameters = "-ovc x264 -x264encopts subq=5:4x4mv:bitrate=" + bitrate
else:
usage()
print red("hiba: ") + "ismeretlen profil lett megadva"
print
sys.exit(3)
for file in args:
if not fileExists(file):
print red("hiba: ") + turquoise(file) + " vagy nem létezik vagy nem olvasható"
sys.exit(4)
firstfile = 29
filecount = 0
for file in args:
filecount += 1
if firstfile == 29:
print green(" fájlok: ") + turquoise(file)
firstfile = 0
else:
print " " + turquoise(file)
print green(" profil: ") + blue(profile)
print green(" bitrate: ") + yellow(bitrate)
print
filecurrent = 0
for file in args:
filecurrent += 1
filestatus = repr(filecurrent) + " of " + repr(filecount)
xtermTitle("Tudó [" + filestatus + "]")
print darkgreen(" [" + filestatus + "]") + " : " + turquoise(file)
print
print yellow(" 1/6. Konvertálom a hangsávot wav formátumba.")
print
print " $ mplayer -ao pcm -vo null " + '"' + file + '"'
print
xtermTitle("Tudó [" + filestatus + "] 1/6. avi --> wav")
os.system("mplayer -ao pcm -vo null \"" + file + "\"")
print yellow(" 2/6. Konvertálom a hangsávot aac formátumba.")
print
print " $ faac " + audio_parameters + " audiodump.wav \"" + file + ".aac\""
print
xtermTitle("Tudó [fájl " + filestatus + "] 2/6. wav --> aac")
os.system("faac " + audio_parameters + " audiodump.wav \"" + file + ".aac\"")
print yellow(" 3/6. Kikülönítem a képsávot.")
print
print " $ mencoder -nosound -ovc copy \"" + file + "\" -o \"" + file + ".video.avi\""
print
xtermTitle("Tudó [fájl " + filestatus + "] 3/6. avi --> képsáv")
os.system("mencoder -nosound -ovc copy \"" + file + "\" -o \"" + file + ".video.avi\"")
print yellow(" 4/6. Konvertálom a képsávot H.264 formátumba.")
print
print " $ mencoder \"" + file + ".video.avi\" " + video_parameters + ":pass=1 -o /dev/null"
print " $ mencoder \"" + file + ".video.avi\" " + video_parameters + ":pass=3 -o /dev/null"
print " $ mencoder \"" + file + ".video.avi\" " + video_parameters + ":pass=3 -o \"" + file + ".H264.avi\""
print
xtermTitle("Tudó [fájl " + filestatus + "] 4/6. képsáv --> H.264 : menet 1/3")
os.system("mencoder \"" + file + ".video.avi\" " + video_parameters + ":pass=1 -o /dev/null")
xtermTitle("Tudó [fájl " + filestatus + "] 4/6. képsáv --> H.264 : menet 2/3")
os.system("mencoder \"" + file + ".video.avi\" " + video_parameters + ":pass=3 -o /dev/null")
xtermTitle("Tudó [fájl " + filestatus + "] 4/6. képsáv --> H.264 : menet 3/3")
os.system("mencoder \"" + file + ".video.avi\" " + video_parameters + ":pass=3 -o \"" + file + ".H264.avi\"")
print yellow(" 5/6. Matroska tartályba teszem a kép és a hangsávot.")
print
print " $ mkvmerge \"" + file + ".aac\" \"" + file + ".H264.avi\" -o \"" + file[:len(file)-3] + "mkv\""
print
xtermTitle("Tudó [fájl " + filestatus + "] 5/6. képsáv + hangsáv --> mkv")
os.system("mkvmerge \"" + file + ".aac\" \"" + file + ".H264.avi\" -o \"" + file[:len(file)-3] + "mkv\"")
print yellow(" 6/6. Törlöm az ideiglenes fájlokat.")
print
print " $ rm audiodump.wav"
print " $ rm \"" + file + ".aac\""
print " $ rm \"" + file + ".video.avi\""
print " $ rm \"" + file + ".H264.avi\""
print
xtermTitle("Tudó [fájl " + filestatus + "] 6/6. ideiglenes fájlok törlése")
os.system("rm audiodump.wav")
os.system("rm \"" + file + ".aac\"")
os.system("rm \"" + file + ".video.avi\"")
os.system("rm \"" + file + ".H264.avi\"")
print bold(" Kész: ") + file[:len(file)-3] + "mkv"
print
def usage():
print " Használat: "
print " " + bold("tudo.py ") + green("-p ") + blue("profilnév ") + green("-b ") + yellow("bitrate ") + turquoise("eredeti.avi ")
print
print " " + red("Figyelem: ") + "a fájlnév az utolsó paraméter kell hogy legyen"
print " Az eredeti fájlnév lehet wildcard is, avagy *.avi, hogy"
print " egy futamban több videó fájlt konvertáljon a túdó."
print
print " profilnév: " + blue("mp4") + " vagy " + blue("ogg")
print " bitrate: " + yellow("120") + " - " + yellow("5000") + " terjedõ szám"
print " ajánlott bitrate számokért: " + bold("tudo.py ") + green("-h ") + blue("bitrate")
print
print " Színmagyarázat: "
print " " + bold("szkriptnév.py")
print " " + green("-paraméterjelölõ")
print " " + turquoise("szabad szöveg")
print " " + blue("megszabott választási lehetõség")
print " " + yellow("szám")
print
def fileExists(f):
try:
file = open(f)
except IOError:
exists = 0
else:
exists = 1
return exists
if __name__ == "__main__":
main() |
Last edited by Danuvius on Wed May 11, 2005 12:36 pm; edited 2 times in total |
|
Back to top |
|
|
Danuvius Guru
Joined: 18 Sep 2004 Posts: 375 Location: Toronto
|
Posted: Mon May 09, 2005 4:53 pm Post subject: |
|
|
Könnyû (nem 6+ órás) teszteléshez így lehet csinálni egy 60 másodperces klippet:
Code: | $ mencoder eredeti.avi -oac copy -ovc copy -endpos 60 -o rovid_klip.avi |
|
|
Back to top |
|
|
pczolee n00b
Joined: 16 Apr 2005 Posts: 53 Location: Hungary
|
Posted: Mon May 09, 2005 5:00 pm Post subject: |
|
|
Jónak tünik a script, még nem próbáltam, de majd kipróbálom! Holnap átnézem, és beleépítem az ogg-s részt! Gratula hozzá!
Apropó, itt egy kis szösszenet arra, hogy a fileneveket normálisan kezelje! Szerintem építsd ezt is bele, vagy majd holnap én!
Code: | #!/bin/bash
current_directory=$( pwd )
#space-k eltavolitasa
for i in *.avi; do mv "$i" `echo $i | tr ' ' '_'`; done
#kis-es-nagy betuk a kiterjesztesben
for i in *.[Aa][Vv][Ii]; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done
|
Egyébként így a könyvtárban levõ több file is átnevezhetõ, tehát egymás után tömöríthetõ! _________________ <=PcZ On LinuxOS -- Powered By Gentoo Linux=>
'Software is like sex: It's better when it's free!'
By Linus Torvalds |
|
Back to top |
|
|
Danuvius Guru
Joined: 18 Sep 2004 Posts: 375 Location: Toronto
|
Posted: Mon May 09, 2005 5:24 pm Post subject: |
|
|
A fájlnév normalizáló kód jó--de nekem az a bajom hogy egyáltalán nem tudom kezelni a hely karakteres fájlneveket...
Szóval ha egy ilyen jön:
Code: | $ ./avi2smkv Egy\ jó\ kis\ film.avi 500 |
Akkor a bash a $1-be teszi az Egy-et és a $2-be a jó-t. Ezek után komplikáltabb programozás nélkül nem tudom kitalálni hogy melyik fájlt akarta kezelni a felhasználó, hiába normalizálom a neveket.
Avagy a gond az hogy magának a bash szkriptnek van gondja a hely karakterrel, nem az mplayer-nek meg a többi programnak. Van erre valami okos megoldás mellesleg? Vagy korlátja ez a bash-nek? |
|
Back to top |
|
|
ProTech Tux's lil' helper
Joined: 30 Dec 2003 Posts: 88 Location: Hungary
|
Posted: Mon May 09, 2005 6:07 pm Post subject: |
|
|
Danuvius wrote: | Code: | $ ./avi2smkv Egy\ jó\ kis\ film.avi 500 |
|
Probald meg helyette:
Code: | $ ./avi2smkv "Egy jó kis film.avi" 500 |
|
|
Back to top |
|
|
pczolee n00b
Joined: 16 Apr 2005 Posts: 53 Location: Hungary
|
Posted: Mon May 09, 2005 7:19 pm Post subject: |
|
|
Danuvius wrote: | A fájlnév normalizáló kód jó--de nekem az a bajom hogy egyáltalán nem tudom kezelni a hely karakteres fájlneveket...
Szóval ha egy ilyen jön:
Code: | $ ./avi2smkv Egy\ jó\ kis\ film.avi 500 |
Akkor a bash a $1-be teszi az Egy-et és a $2-be a jó-t. Ezek után komplikáltabb programozás nélkül nem tudom kitalálni hogy melyik fájlt akarta kezelni a felhasználó, hiába normalizálom a neveket.
Avagy a gond az hogy magának a bash szkriptnek van gondja a hely karakterrel, nem az mplayer-nek meg a többi programnak. Van erre valami okos megoldás mellesleg? Vagy korlátja ez a bash-nek? |
Épp ezért írtam, a space-k helyére "_"-t tesz! De te tudod... _________________ <=PcZ On LinuxOS -- Powered By Gentoo Linux=>
'Software is like sex: It's better when it's free!'
By Linus Torvalds |
|
Back to top |
|
|
Danuvius Guru
Joined: 18 Sep 2004 Posts: 375 Location: Toronto
|
Posted: Mon May 09, 2005 7:21 pm Post subject: |
|
|
pczolee wrote: | Danuvius wrote: | A fájlnév normalizáló kód jó--de nekem az a bajom hogy egyáltalán nem tudom kezelni a hely karakteres fájlneveket...
Szóval ha egy ilyen jön:
Code: | $ ./avi2smkv Egy\ jó\ kis\ film.avi 500 |
Akkor a bash a $1-be teszi az Egy-et és a $2-be a jó-t. Ezek után komplikáltabb programozás nélkül nem tudom kitalálni hogy melyik fájlt akarta kezelni a felhasználó, hiába normalizálom a neveket.
Avagy a gond az hogy magának a bash szkriptnek van gondja a hely karakterrel, nem az mplayer-nek meg a többi programnak. Van erre valami okos megoldás mellesleg? Vagy korlátja ez a bash-nek? |
Épp ezért írtam, a space-k helyére "_"-t tesz! De te tudod... |
Azt hiszem nem ertem mit javasolsz, pczolee. Hiaba teszem be az altalad irt sorokat az avi2smkv.sh-be... amikor mar fut az avi2smkv.sh akkor mar tul keso a felulirt okbol.
Mikent ertettelek felre? |
|
Back to top |
|
|
pczolee n00b
Joined: 16 Apr 2005 Posts: 53 Location: Hungary
|
Posted: Mon May 09, 2005 7:36 pm Post subject: |
|
|
A lényeg, hogy a parancs kimenetér eltárolod egy változóban, és utánna erre hivatkozol a script további részében! Így a bemenö file neve tuti szabványos lesz, a kimenõ pedig ugyanez csak más kiterjesztéssel! _________________ <=PcZ On LinuxOS -- Powered By Gentoo Linux=>
'Software is like sex: It's better when it's free!'
By Linus Torvalds |
|
Back to top |
|
|
Danuvius Guru
Joined: 18 Sep 2004 Posts: 375 Location: Toronto
|
Posted: Tue May 10, 2005 3:45 am Post subject: |
|
|
Újraírtam python szkriptként--fennt van az elsõ hozzászólásban. =)
Ez az új szkript már ideális sok fájl automatikus átkonvertálására.
Én a screen-nel nice -n 19-al futtatom egyszerre 10+ fájlon. Így csak csinálja ahogy bírja anélkül hogy engem zavarna. Aztán egy idõ után kész lesz. =)
---
Ahoz képest hogy elvileg nem tudom a Python-t, nem rossz.
Csak alapvetõ szintaxis ismeretem van, megy egy szélessávú internetem a google-al. =)
2-3 órás akció volt... és csak azért ilyen sok mert, mint írom, nem igazán tudtam mit csinálok az idõ nagy részében.
Avagy: Ajánlom a Python-t produktív programozásra! =) |
|
Back to top |
|
|
pczolee n00b
Joined: 16 Apr 2005 Posts: 53 Location: Hungary
|
Posted: Tue May 10, 2005 5:06 pm Post subject: |
|
|
Grarula a Python verzióhoz! Jó lett! Így megolda a filenév problematika... _________________ <=PcZ On LinuxOS -- Powered By Gentoo Linux=>
'Software is like sex: It's better when it's free!'
By Linus Torvalds |
|
Back to top |
|
|
pczolee n00b
Joined: 16 Apr 2005 Posts: 53 Location: Hungary
|
Posted: Wed May 11, 2005 8:04 am Post subject: |
|
|
Apropó, a topic címe elé elfelejtetted odaírni a [HU]-t! _________________ <=PcZ On LinuxOS -- Powered By Gentoo Linux=>
'Software is like sex: It's better when it's free!'
By Linus Torvalds |
|
Back to top |
|
|
|