VLC를 사용하여 M4V를 MP3로 일괄 변환하는 쉘 스크립트?

VLC를 사용하여 M4V를 MP3로 일괄 변환하는 쉘 스크립트?

VLC를 사용하여 M4V 비디오 파일 디렉터리를 MP3 오디오 파일로 일괄 변환하고 싶습니다. (ffmpeg를 사용해도 괜찮습니다.)

확립된bash 스크립트를 사용하여 시작했지만 스크립트에 어떤 VLC 매개변수를 삽입해야 할지 모르겠습니다.

가변 비트레이트나 64kb/s를 사용하고 싶습니다. 샘플링 속도는 44100(또는 그 이하)일 수 있습니다. 저는 비디오를 출력하지 않기 때문에 VLC에 이러한 매개변수가 필요한지 잘 모르겠습니다.

내 필요에 맞게 이 스크립트를 수정하는 데 도움을 줄 수 있는 사람이 있나요?

#!/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

답변1

사용 방법 ffmpeg:

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

또는 가변 비트레이트:

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

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

인용하다

답변2

이것이 내가 사용한 것입니다. ffmpeg에 도움을 주신 slm에게 감사드립니다. 이 코드를 루프에 넣었습니다.

#!/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

효과가있다. 그런데 파일 이름에 실수가 있습니다. 아직 고치지 않았습니다. 출력 파일의 이름은 blahblah.mp3이 아니라 blahblah.m4v.mp3입니다.

답변3

효과가 아주 좋네요 감사합니다

효과가있다. 그런데 파일 이름에 실수가 있습니다. 아직 고치지 않았습니다. 출력 파일의 이름은 blahblah.mp3이 아니라 blahblah.m4v.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

더 좋은 방법이 있다고 확신하지만 정규식에 0-9를 허용하면 .m4v 및 .mp4 등도 작동할 수 있습니다.

관련 정보