Zpracování MOD video souborů na Linuxu

Video soubory mají koncovku .MOD. Dle informací tento formát používají i některé kamery Canon a Sony.

MOD files - specifikace


Zatím jsem, bohužel nenašel žádnou oficiální specifikaci souborů. Takže jen ze zkušeností:

Založení projektu - adresáře, soubory


Pro příklad: vytvoříme adresář video s následující strukturu adresářů:
$ tree -d video
video/
|-- avidemux
|-- dvd
|-- mod_files
|-- mpeg
`-- openshot_projects
        
Z kamery jdou soubory stáhnout celkem snadno (připojení přes USB). Soubory zkopírujeme do adresáře mod_files.
Soubory přejmenujeme - dle data a času vytvoření.
$ find mod_files -type f -printf "mv %p mod_files/%TY%Tm%Td%TH%TM%TS\n" >> rename.sh
$ ./rename.sh
        

Titulky


Mezi jednotlivými tituly budoucího DVD budou titulky a také záverečné titulky. Ty vytvoříme třeba OpenShot video editorem. V našem příkladu bude existovat pět titulů a sedm titulkových souborů (jedny navíc na začátku a jedny na konci). V editoru nastříháme jak potřebujeme a vyexportujeme.
Parametry exportu:

Pokročilá nastavení
 Exportovat do:Video a audio
Typ projektu
  DV PAL Widescreen
Nastavení sekvence snímků
 Formát obrázku:png
Video nastavení
 Video formát:vob
 Video kodek:mpeg2video
 Datový tok:5 Mb/s
Audio nastavení
 Audio kodek:ac3
 Vzorkovací frekvence:48000
 # kanálů:2
 Datový tok:256 kb/s

Tím vznikly v adresáři openshot_projects soubory 001.vob, 002.vob, 003.vob, 004.vob, 005.vob, 006.vob a 007.vob.

Indexace mpeg


Nyní vytvoříme index pro všechny soubory. Například skriptem indexing.sh:
$ cd avidemux
$ cat indexing.sh
for f in ../openshot_projects/*.vob
do
    fn=$(basename "$f")
    cp $f ../mod_files/openshot_$fn
done

cd ../mod_files
for f in *
do
    avidemux --autoindex --load $f --nogui --quit
done
./indexing.sh
        
Skript zároveň zkopíruje vob soubory (z OpenShot editoru) do adresáře mod_files.

Spojení, deinterlace


Pro zpracování využijeme avidemux, který má kvalitní filtry a celkem dobře se s ním pracuje.

Varianta A

V adresáři avidemux vytvoříme textové soubory 001.mf, 002.mf, 003.mf, 004.mf, 005.mf, 006.mf a 007.mf, které obsahují po sobě jdoucí video soubory. Například:
$ cat 002.mf
openshot_002.vob
20090919_103614.0000000000.mod
20090919_111256.0000000000.mod
20090919_112212.0000000000.mod
20090919_112434.0000000000.mod
20090919_112534.0000000000.mod
20090919_112758.0000000000.mod
20090919_113114.0000000000.mod
20090919_113434.0000000000.mod
        
Vytvoříme avidemuxfiles_template.txt, ve kterém jsou parametry pro zpracování souborů pomocí avidemux.
Parametry:
Video
DVD (lavc)
 Encoding mode:Two pass - average bitrate
 Average bitrate (kb/s):7500
 Max. datový tok:9000
 Min. datový tok:150
 Řízení datového toku z kodeku Xvid:True
 Velikost bufferu:DVD 224 kB
 Poměr stran:16:9
 Prokládání:Progresivní
 Matice:Výchozí
 Velikost GOP:12
Video filtry
KernelDeint
 Field order:Top
 Treshold:6
 Sharp:True
 Twoway:False
 Map:False
Audio
AC3 (lav)
 Bitrate:224
Audio filtry
 Změna snímkové frekvence:Nic
 Mixér:Beze změny
 Časový posun (ms):False
 Převzorkování (Hz):False
 Komprese dynamického rozsahu:False
 Zvýšení hlasitosti:Nic
Formát
MPEG-PS (A+V)

Spustíme python skript avidemuxfiles.py, který ze souborů *.mf a avidemuxfiles_template.txt vytvoří skripty pro avidemux.
$ cat avidemuxfiles.py
import os

base_path = os.path.abspath('..')
# v *.mf jsou ulozeny mod file, ktere prijdou do jednoho klipu

files = []
for f in os.listdir('.'):
    if os.path.splitext(f)[1] == '.mf':
        files.append(f)

files.sort()

template = open('avidemuxfiles_template.txt').read()
for f in files:
    modfiles = open(f).read().strip().split('\n')
    s = ''
    for i in range(len(modfiles)):
        cmd = 'append'
        if i == 0:
            cmd = 'load'
        s += 'app.%s("%s/mod_files/%s.idx");\n' % (cmd, base_path, modfiles[i])
        #s += 'app.rebuildIndex();\n'
    ofilename = 'avscript_%s.avs' % os.path.splitext(f)[0]
    outfile = open(ofilename, 'w')
    outfile.write(template % (ofilename,
                              s,
                              os.path.join(base_path, 'mpeg', '%s.mpeg' % os.path.splitext(f)[0]))
                 )
    outfile.close()
    print '%s ulozen' % ofilename
        
Tím nám v adresáři avidemux vznikly soubory avscript_001.avs, avscript_002.avs, avscript_003.avs, avscript_004.avs, avscript_005.avs, avscript_006.avs a avscript_007.avs.

Varianta B

Nebudeme potřebovat žádný soubor *.mf, avidemuxfiles_template.txt ani avidemuxfiles.py. Prostě za pomoci nějaké editoru vytvoříme přímo soubory avscript_*.avs. Například avscript_002.avs:
$ cat avscript_002.avs
//AD  <- Needed to identify//
//--automatically built--
//--Project: /tmp/video//avidemux/avscript_002.avs

var app = new Avidemux();

//** Video **
// videos source
app.load("/tmp/video/mod_files/openshot_002.vob.idx");
app.append("/tmp/video/mod_files/20090919_103614.0000000000.mod.idx");
app.append("/tmp/video/mod_files/20090919_111256.0000000000.mod.idx");
app.append("/tmp/video/mod_files/20090919_112212.0000000000.mod.idx");
app.append("/tmp/video/mod_files/20090919_112434.0000000000.mod.idx");
app.append("/tmp/video/mod_files/20090919_112534.0000000000.mod.idx");
app.append("/tmp/video/mod_files/20090919_112758.0000000000.mod.idx");
app.append("/tmp/video/mod_files/20090919_113114.0000000000.mod.idx");
app.append("/tmp/video/mod_files/20090919_113434.0000000000.mod.idx");

// segments
app.rebuildIndex();

//** Postproc **
app.video.setPostProc(3,3,0);

app.video.fps1000 = 25000;

//** Filters **
app.video.addFilter("kerneldeint","order=1","threshold=6","sharp=1","twoway=0","map=0");

//** Video Codec conf **
app.video.codec("XDVD", "2PASSBITRATE=7400", "160 05 00 00 00 00 00 00 00 00 00 00 00 00 00 ......");

//** Audio **
app.audio.reset();
app.audio.codec("LavAC3",224,4,"e0 00 00 00 ");
app.audio.normalizeMode=0;
app.audio.normalizeValue=0;
app.audio.delay=0;
app.audio.mixer="NONE";
app.setContainer("PS");
//setSuccess(1);

app.save("/tmp/video//mpeg/002.mpeg");
//app.Exit();

//End of script
        

Kafe, pohoda...


Zpracování souborů bude nějakou dobu trvat, takže si vytvoříme shell skript run.sh a ten spustíme.
$ cat run.sh
for i in 1 2 3 4 5 6 7
do
    avidemux --run avscript_00$i.avs --quit
done
        

Závěr


Pokud nedošlo k žádné chybě, tak v adresáři mpeg vznikly soubory 001.mpeg, 002.mpeg, 003.mpeg, 004.mpeg, 005.mpeg, 006.mpeg a 007.mpeg. Tyto soubory už můžeme jako jednotlivé tituly vložit do nějakého authoringového software a vytvořit DVD. Já jsem použil DVD Styler a pro mpeg použil volbu 'do not remultiplex/transcode'.

Last update: 18.11.2010 22:34:49