Avatar billede tzr Nybegynder
23. januar 2006 - 09:32 Der er 4 kommentarer og
1 løsning

Batch Mencoder

Hejsa

Jeg optager en del video med mit digtalkamera. Problemet er bare at kameraret encoder i QuickTime MPEG4, hvilket for det første fylder ad helvede til, og så er xine ikke lige så glad for lyden i det. Anyway, har lavet et simpelt script der ser sådan her ud:

mencoder $1 -oac mp3lame -lameopts abr:br=96 -ovc xvid -xvidencopts bitrate=250 -o $1.avi
mv $1 $1~

Men det er lidt besværligt. Så jeg vil gerne have et script der gør følgende:

1. For hver fil der slutter med .MOV
1.1 Encode filen med output file extension .avi, og ikke .MOV.avi (som den gør nu)
1.2 Flyt den originale fil til .MOV~

Scriptet må ikke encode filer der hedder .MOV~, kun .MOV.

Jeg kører Linux, og vil foretrække et bash script, men python er også ok, så længe det virker. Har ikk så meget erfaring (læs: intet) med python, men hvis nogen har er der 150 point at hente :)
Avatar billede bertelbrander Novice
23. januar 2006 - 23:59 #1
Jeg har strikket noget sammen i python.

Du skal selv ændre linien:
Command = "renxx.exe " + OldName + " " + NewName
Det er den kommando der skal til for at lave .avi filen, OldName er navnet op .mov filen, NewName er navnet på .avi filen.
Jeg vil tro at det skal se sådan ud:
"mencoder " + OldName + " -oac mp3lame -lameopts abr:br=96 -ovc xvid -xvidencopts bitrate=250 -o " + NewName

Linien:
MyPath='c:\\temp'
Fortæller hvor den skal lede efter filer.

For at teste kan du udskifte linien:
os.system(Command)
Med:
print Command
og slette linien
os.rename(OldName, BackupName)

Så udfører den ingenting, men udskriver den kommando den ville have udført.


import time, os, sys, fnmatch, shutil
from stat import *

MyPath='c:\\temp'

for Root, Dirs, Files in os.walk(MyPath) :
  MatchFiles = fnmatch.filter(Files, "*.mov")
  for File in MatchFiles :
      OldName = os.path.join(Root, File)
      Mode = os.stat(OldName)[ST_MODE]
      if not S_ISDIR(Mode):
        Base, Ext = os.path.splitext(OldName)
        NewName = Base + ".avi"
        Command = "renxx.exe " + OldName + " " + NewName
        os.system(Command)
        BackupName = OldName + "~"
        os.rename(OldName, BackupName)
Avatar billede tzr Nybegynder
26. januar 2006 - 12:37 #2
Med en smule redigering så det passer til Linux, så virker det fint :) takker mange gange.

Lige for en god ordens skyld, så er her det script jeg bruger:
#!/usr/bin/env python

import time, os, sys, fnmatch, shutil
from stat import *

MyPath='/home/des/Images/'

for Root, Dirs, Files in os.walk(MyPath) :
    MatchFiles = fnmatch.filter(Files, "*.MOV")
    for File in MatchFiles :
        OldName = os.path.join(Root, File)
        Mode = os.stat(OldName)[ST_MODE]
        if not S_ISDIR(Mode) :
            Base, Ext = os.path.splitext(OldName)
            NewName = Base + ".avi"
            Command = "mencoder " + OldName + " -oac mp3lame -lameopts abr:br=96 -ovc xvid -xvidencopts bitrate=350 -o " + NewName
            os.system(Command)
            BackupName = OldName + "~"
            os.rename(OldName, BackupName)

Grunden til det er .MOV og ikke .mov er fordi Linux er case-sensitive. Har ikk prøvet med lower-case .mov, så ved ikk om python ignorerer case-sensitivity, men det ville jeg finde meget meget mærkeligt ...
Avatar billede tzr Nybegynder
26. januar 2006 - 12:37 #3
hvis du lige gider smide et svar ?
Avatar billede bertelbrander Novice
26. januar 2006 - 20:04 #4
Jeg havde glemt at filnavne i linux er case sensitive, jeg går også ud fra at de også er det i python på linux.

Jeg samler ikke på point.
Avatar billede tzr Nybegynder
27. januar 2006 - 08:34 #5
som De ønsker :)

Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester