Portál AbcLinuxu, 12. května 2025 04:22

Dotaz: shell hromadny prevod videa

petka avatar 7.1.2010 19:48 petka | skóre: 25 | blog: heydax | Klasterec N/O
shell hromadny prevod videa
Přečteno: 429×
Odpovědět | Admin
Zkousim si napsat svuj shell script pro automaticky prevod vsech souboru *.avi do formatu h264.mkv , videa jsou v adresari a podadresarich . A v tom je ten problem . Umim udelat jen co je v aktualnim adresari , vic ne . Hledal jsem na netu tam bylo podobne reseni , jen ne s adresari .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.1.2010 20:07 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Odpovědět | | Sbalit | Link | Blokovat | Admin
man find?
Překladač ti nikdy neřekne: "budeme kamarádi"
petka avatar 7.1.2010 20:20 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Akorat jsi mi to vzal z ust , ted ale resim jak to nacpat do cyklu .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
petka avatar 7.1.2010 20:50 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Uz to mam hotove jen se ted babram s podminkou , aby se prikaz nemusel vykonavat . Tak potrebuju jestli soubor s priponou mkv uz existuje .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
7.1.2010 21:02 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
No... pokud znáš jméno souboru, můžes zkusit nahradit .avi za .mkv - např. pomocí
MKV_FILE=${$AVI_FILE/\.avi/\.mkv}
a pomoci
[[ -e $MKV_FILE ]]
zjistit, jestli už existuje. Jinak ten test na .avi by měl správně obsahovat konec řetězce, ale nevím jak to v bashi zapsat, to už si musíš najít sám.
Překladač ti nikdy neřekne: "budeme kamarádi"
7.1.2010 21:04 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Samozřejmě špatně... má být
MKV_FILE=${AVI_FILE/\.avi/\.mkv}
Překladač ti nikdy neřekne: "budeme kamarádi"
petka avatar 7.1.2010 21:31 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Tak presne s timhle se tu babram . Find posilam do logu . Neco jako file.log . Ten prikaz co je psany nademnou nevim jak pouzit . Podminku uz jo .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
petka avatar 7.1.2010 22:04 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
V file.log co jsou jmena souboru i s cestou , jsem pres sed prekopal na jmena souboru s koncovkou mkv , ale co ted dal . Nic mi to nebere .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
petka avatar 7.1.2010 22:07 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Nenak takhle
cat file.log | sed 's/.avi/.mkv/g' .
S tim ze v logu mam napr.
/cesta/video1.avi
/jinacesta/video2.avi
/uplnejinacesta/video3.avi

/cesta/video1.mkv
/jinacesta/video2.mkv
/uplnejinacesta/video3.mkv
a ted jak dat do podminky ze soubor uz exituje aby mencoder nemusel delat video znovu .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
7.1.2010 22:05 Ash | skóre: 53
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
find . -name '*.avi' | while read avi; do
  mkv="${avi%.avi}.mkv"
  if [[ -f "$mkv" ]]; then
petka avatar 7.1.2010 22:33 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Dekuju moc , tohle je fakt originalni . Funguje perfekte , jeste se mam co ucit .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
7.1.2010 23:39 Ash | skóre: 53
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
no je to dá se říci standard. Někdy ve skriptech může vadit že while cyklus (za pajpou) běži v podprocesu a musí se to obcházet, ale pro jednodušší jednorázové úlohy to je jak říkám standard.
petka avatar 9.1.2010 03:01 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Jeste jedne malej dotaz , vsude na netu se tak vseobecne pise o shellu , ale napriklad o

mkv="${avi%.avi}.mkv"

jsem se nikde moc nedocetl. Exituje nejaka dobra dokumentace ?
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
9.1.2010 09:48 Ash | skóre: 53
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Dokumentace určitě, man bash, zde konkrétně Parameter Expansion, je to tam detailně a lze fulltextově vyhledávat. Pokud jde o konkrétní oblasti aplikace, je řada příkladů na TLDP: Advanced Bash-Scripting Guide nebo totéž s možnostmi stažení či pdf Linux Reviews: Advanced Bash-Scripting Guide Pokud jste myslel spíš nějaký populárně naučný článek, nebo něco v češtině, co neznudí, tak třeba někdo doplní nějaký dobrý seriál, v bookmarcích teď nic nevidím.
petka avatar 12.1.2010 18:34 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Tak po delsi dobe konverze videa se nekam ztrati zaznam souboru a pri pokracovani na dalsi radce skonci hned po prvnim prikazu .

Ted pro zmenu zkousim obsah findu poslat do logu , ktery nikam neutece :-)
find . -name '*.avi' > file.log 
while read avi; do
  mkv="${avi%.avi}.mkv"
  if [[ -f "$mkv" ]]; then 
   nejake prikazy
  fi
done < file.log
Doufam ze se zadari ...
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
12.1.2010 19:26 Ash | skóre: 53
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Ono toto řešení je takové jednodušší, pokud se vám v názvu souboru vyskytuje znak nový řádek:
touch "novy
>radek"
Tak se to chová špatně:
find . -iname 'novy*' | while read soubor; do
  echo "soubor: \"$soubor\"";
done

soubor: "./novy"
soubor: "radek"
Nutno upravit, pak to funguje správně:
find . -iname 'novy*' -print0 | while read -r -d $'\0' soubor; do
  echo "soubor: \"$soubor\"";
done

soubor: "./novy
radek"
Takže to chce (asi i při čtení ze souboru!) tu bezpečnější variantu:
find . -name '*.avi' -print0 | while read -r -d $'\0' avi; do
  mkv="${avi%.avi}.mkv"
  if [[ -f "$mkv" ]]; then 
   nejake prikazy
  fi
done < file.log
Tohle je celkem odolné (před časem jsme tu na toto téma vedli diskuzi). Pak jsou i možnosti použít jiné nástroje (perl, ...).

Omlouvám se že jsem nepoužil hned to odolnější řešení, je trochu složitější ale člověk samozřejmě nikdy neví co se mu do názvů souboru vmísí za znaky, takže to chce raději pořádně.
12.1.2010 19:34 Ash | skóre: 53
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
samozřejmě bez toho file.log na konci, pokud to čtete rovnou z findu
petka avatar 12.1.2010 19:37 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Diky moc , ta posledni vec se mi moc libi . Poradne prostuduju .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
petka avatar 15.1.2010 21:36 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: shell hromadny prevod videa
Tak porad se nedari
find . -name '*.avi' -print0 | while read -r -d $'\0' avi; do
  mkv="${avi%.avi}.mkv"
  if [[ -f "$mkv" ]]; then 
   nejake prikazy
  fi
done
Pokazde to skonci na prvnim konvertovanem videu a dal to uz nepokracuje . Skcript tak musim spustit znovu kdy probehne detekce hovoveho videa a pokracuje dal .Pro kratsi videa neni problem , ale jak konvertuju delsi dobu tak to skonci a dal uz nic .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.