Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Hu] AVI --> Szuper-Matroska (H.264 + AAC)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Other Languages
View previous topic :: View next topic  
Author Message
Danuvius
Guru
Guru


Joined: 18 Sep 2004
Posts: 375
Location: Toronto

PostPosted: Mon May 09, 2005 4:34 pm    Post subject: [Hu] AVI --> Szuper-Matroska (H.264 + AAC) Reply with quote

Ú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
View user's profile Send private message
Danuvius
Guru
Guru


Joined: 18 Sep 2004
Posts: 375
Location: Toronto

PostPosted: Mon May 09, 2005 4:53 pm    Post subject: Reply with quote

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
View user's profile Send private message
pczolee
n00b
n00b


Joined: 16 Apr 2005
Posts: 53
Location: Hungary

PostPosted: Mon May 09, 2005 5:00 pm    Post subject: Reply with quote

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
View user's profile Send private message
Danuvius
Guru
Guru


Joined: 18 Sep 2004
Posts: 375
Location: Toronto

PostPosted: Mon May 09, 2005 5:24 pm    Post subject: Reply with quote

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 -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
View user's profile Send private message
ProTech
Tux's lil' helper
Tux's lil' helper


Joined: 30 Dec 2003
Posts: 88
Location: Hungary

PostPosted: Mon May 09, 2005 6:07 pm    Post subject: Reply with quote

Danuvius wrote:
Code:
$ ./avi2smkv Egy\ jó\ kis\ film.avi 500

Probald meg helyette:
Code:
$ ./avi2smkv "Egy jó kis film.avi" 500
Back to top
View user's profile Send private message
pczolee
n00b
n00b


Joined: 16 Apr 2005
Posts: 53
Location: Hungary

PostPosted: Mon May 09, 2005 7:19 pm    Post subject: Reply with quote

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 -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
View user's profile Send private message
Danuvius
Guru
Guru


Joined: 18 Sep 2004
Posts: 375
Location: Toronto

PostPosted: Mon May 09, 2005 7:21 pm    Post subject: Reply with quote

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 -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
View user's profile Send private message
pczolee
n00b
n00b


Joined: 16 Apr 2005
Posts: 53
Location: Hungary

PostPosted: Mon May 09, 2005 7:36 pm    Post subject: Reply with quote

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
View user's profile Send private message
Danuvius
Guru
Guru


Joined: 18 Sep 2004
Posts: 375
Location: Toronto

PostPosted: Tue May 10, 2005 3:45 am    Post subject: Reply with quote

Ú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
View user's profile Send private message
pczolee
n00b
n00b


Joined: 16 Apr 2005
Posts: 53
Location: Hungary

PostPosted: Tue May 10, 2005 5:06 pm    Post subject: Reply with quote

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
View user's profile Send private message
pczolee
n00b
n00b


Joined: 16 Apr 2005
Posts: 53
Location: Hungary

PostPosted: Wed May 11, 2005 8:04 am    Post subject: Reply with quote

Apropó, a topic címe elé elfelejtetted odaírni a [HU]-t! :wink:
_________________
<=PcZ On LinuxOS -- Powered By Gentoo Linux=>

'Software is like sex: It's better when it's free!'
By Linus Torvalds
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Other Languages All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum