shell script para converter em lote o M4V para MP3 usando o VLC?

2

Eu quero converter em lote um diretório de arquivos de vídeo M4V para arquivos de áudio MP3 usando o VLC. (Eu não me importo de usar o ffmpeg como alternativa.)

Eu encontrei um script bash para começar, mas não sei quais parâmetros do VLC devem ser incluídos no script .

Eu quero usar uma taxa de bits variável ou 64kb / s. A taxa de amostragem pode ser 44100 (ou inferior). Eu não estou emitindo vídeo, então não tenho certeza se o VLC requer esses parâmetros.

Alguém pode me ajudar a corrigir este script para atender às minhas necessidades?

#!/bin/sh                                                                                                                                                     

vcodec="mp4v"
acodec="mp4a"
bitrate="1024"
arate="128"
mux="mp4"

vlc="/usr/bin/vlc"                                                                                                                                           

if [ ! -e "$vlc" ]; then
    echo "Command '$vlc' does not exist"
    exit 1
fi

for file in "$@"; do
    echo "=> Transcoding '$file'... "

    dst='dirname "$file"'
    new='basename "$file" | sed 's@\.[a-z][a-z][a-z]$@@''.$mux

    $vlc -I dummy -q "$file" \
       --sout "#transcode{vcodec=mp4v,vb=1024,acodec=mp4a,ab=128}:standard{mux=mp4,dst=\"$dst/$new\",access=file}" \
       vlc://quit
    ls -lh "$file" "$dst/$new"
    echo
done
    
por MountainX 27.11.2013 / 00:18

3 respostas

2

Veja como usar ffmpeg :

$ ./ffmpeg -i testing.m4v -b:a 192K -vn testing.mp3

Ou taxa de bits variável:

$ ./ffmpeg -i testing.m4v -q:a 0 -map a testing.mp3

versão ffmpeg

$ ./ffmpeg -version
ffmpeg version N-56896-ga927276
built on Oct  5 2013 05:42:36 with gcc 4.6 (Debian 4.6.3-1)
configuration: --prefix=/root/ffmpeg-static/64bit --extra-cflags='-I/root/ffmpeg-static/64bit/include -static' --extra-ldflags='-L/root/ffmpeg-static/64bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
libavutil      52. 46.100 / 52. 46.100
libavcodec     55. 34.100 / 55. 34.100
libavformat    55. 19.100 / 55. 19.100
libavdevice    55.  3.100 / 55.  3.100
libavfilter     3. 88.101 /  3. 88.101
libswscale      2.  5.100 /  2.  5.100
libswresample   0. 17.103 /  0. 17.103
libpostproc    52.  3.100 / 52.  3.100

Referências

por 27.11.2013 / 00:48
0

Veja o que acabei usando. Obrigado ao slm pela ajuda do ffmpeg. Eu coloquei esse código em um loop.

#!/bin/sh                                                                                                                                                     
arate="64K"
ext="mp3"                                                                                                                                              
app="/usr/bin/ffmpeg"                                                                                                                                           
if [ ! -e "$app" ]; then
    echo "Command '$app' does not exist"
    exit 1
fi

for file in "$@"; do
    echo "=> Transcoding '$file' ..."
    dst='dirname "$file"'
    new='basename "$file" | sed 's@\.[a-z][a-z][a-z]$@@''.$ext
    $app -i "$file" -b:a $arate -vn "$dst/$new"
    ls -lh "$file" "$dst/$new"
    echo
done

Funciona. No entanto, há um bug na minha nomeação de arquivos. Eu não consertei ainda. Os arquivos de saída são nomeados blahblah.m4v.mp3 em vez de blahblah.mp3.

    
por 27.11.2013 / 01:03
0

Funciona bem, obrigado

It works. However, there's a bug in my file naming. I didn't fix it yet. The output files are named blahblah.m4v.mp3 instead of blahblah.mp3.

#!/bin/sh                                                                                                                                                     
arate="64K"
ext="mp3"                                                                                                                                              
app="/usr/bin/ffmpeg"                                                                                                                                           
if [ ! -e "$app" ]; then
    echo "Command '$app' does not exist"
    exit 1
fi

for file in "$@"; do
    echo "=> Transcoding '$file' ..."
    dst='dirname "$file"'
    new='basename "$file" | sed 's@\.[a-z][a-z0-9][a-z0-9]$@@''.$ext
    $app -i "$file" -b:a $arate -vn "$dst/$new"
    ls -lh "$file" "$dst/$new"
    echo
done

Tenho certeza de que haverá uma maneira melhor, mas permitir 0-9 na regex também significa que .m4v e .mp4 etc. funcionarão.

    
por 19.01.2014 / 23:20