Kirjoittaja Aihe: Realmediasta mp3:ksi ja linkkien kaappaus html-koodista  (Luettu 1473 kertaa)

jussike

  • Käyttäjä
  • Viestejä: 979
    • Profiili
Väsäilin omiin tarpeisiin tällaisen skriptin ja ajattelin jakaa, jos vaikka joku muukin pienin muutoksin onnistuu sitä johonkin tarkoitukseen soveltamaan.
Lopputulos ei ole hiottu eikä välttämättä edes hyvän ohjelmointitavan mukainen, mutta itselleni se ajaa asiansa.
Sitten asiaan. Tarve oli saada ladattua tietyltä nettisivulta kohtalaisen suuri määrä .rm -tiedostoja ja muuttaa ne mp3:ksi matkasoitinta varten.

Homman pitäisi toimia siten, että luodaan hakemistot: htm, links, rm ja mp3 sekä skriptit run ja rm2mp3. Lähde .htm kopioidaan hakemistoon htm ja ajetaan run-skripti. Luonnollisesti skripteille pitää muistaa antaa ajo-oikeudet ennen sitä. Jos kaikki toimii niinkuin pitää, prosessin jälkeen .htm -tiedostosta löytyvien rm-linkkien mukaiset tiedostot on ladattu rm-kansioon ja niistä konvertoidut mp3:t tehty mp3-kansioon. Muunnos vaatii toimiakseen, että lame ja mplayer ovat asennettuna.

Koodia: [Valitse]
./run foo.htm

Hakemistorakennetta:
Koodia: [Valitse]
--|--- run
  |
  |--- rm2mp3
  |
  |--- htm (dir)   --- foo.htm
  |
  |--- links (dir) --- foo.links.txt
  |
  |--- rm (dir)    --- foo (dir)------- file.rm
  |                                 |
  |                                 --- file2.rm
  |--- mp3 (dir)   --- foo (dir)------- file.mp3
                                    |
                                    --- file2.mp3


run-skripti
Koodia: [Valitse]
#!/bin/bash
# Author: jussike

RMDIR=rm        # directory for .rm -files
MP3DIR=mp3      # directory for .mp3 -files
HTMDIR=htm      # directory for .htm -files
LINKSDIR=links  # directory for .links.txt -files

BASENAME=`echo $1 | sed -e 's/.htm//1'`
BASEDIR=$PWD

# This strips real media audio links from .htm -file

cat $HTMDIR/$1 | sed -n -e '/http.*rm/p' | sed -e 's/.*\(http\)/\1/' \
                | sed -e 's/rm.*/rm/1' >> $LINKSDIR/$BASENAME.links.txt


# This loads all the linked files from .links.txt -file

DESTDIR=$RMDIR/$BASENAME
mkdir -p $DESTDIR
cd $DESTDIR
for i in `cat $BASEDIR/$LINKSDIR/$BASENAME.links.txt` ; do wget $i ; done

# This converts real media audio files to mp3
$BASEDIR/rm2mp3 $BASEDIR/$DESTDIR $BASEDIR/$MP3DIR/$BASENAME


rm2mp3 -skripti (tämä on pääosin copy/paste -koodia)
Koodia: [Valitse]
#!/bin/bash
# transcodes realmedia (RM) audiofiles to MP3 audio files.
# Original Author: Arjen
# Modified by jussike

### Configuration

#This is where the temporary wav files will be stored
TMPDIR="/tmp"

#Path to mplayer binary. Don't change unless you know what you're doing.
MPLAYER="/usr/bin/mplayer"

#Path to lame binary. Don't change unless you know what you're doing.
LAME="/usr/bin/lame"

#Options for lame encoding

#LAME_OPTS="--vbr-new -q0 -V3" # for music
LAME_OPTS="--vbr-new -a -mm -q0 -V8 -B40" # for speech

#Define working directory
WORK="$TMPDIR/rm2mp3.$$"

#Define working name for tracks
WAV="$WORK/track.wav"

# Get absolute directory paths
INPUTDIR="$1" #you can change this to an absolute path
cd "$INPUTDIR"
INPUTDIR="$PWD"

#This is where the MP3 files will end up
OUTPUTDIR="$2"
mkdir -p "$OUTPUTDIR"

# Setup work directory, clean and create
rm -rf "$WORK"
if [ -e "$WORK" ]; then
        echo "Couldn't delete $WORK"
        exit 1
fi
mkdir "$WORK"
        if [ ! -d "$WORK" ]; then
        echo "Couldn't create $WORK"
        exit 1
fi

# Transcode the files
cd "$INPUTDIR"
OLDIFS="$IFS"
IFS=$'\n'
for filepath in $(find . -type f -name '*.rm' -print \
        | sort | sed -e 's/^\.\///' -e 's/\.rm$//'); do
        IFS="$OLDIFS"
        filedir="$(dirname "$filepath")"
        filename="$(basename "$filepath")"
        if [ ! -d "$OUTPUTDIR/$filedir" ]; then
                mkdir -p "$OUTPUTDIR/$filedir"
        fi
        if [ ! -f "$OUTPUTDIR/$filepath.mp3" ]; then
                #Create wav file
                $MPLAYER "$INPUTDIR/$filepath.rm" -ao pcm:file=$WAV

                # Encode MP3
                $LAME $LAME_OPTS "$WAV" "$OUTPUTDIR/$filepath.mp3"
        fi
done

# Clean up
rm -rf "$WORK"
exit
« Viimeksi muokattu: 06.07.08 - klo:17.14 kirjoittanut jussike »