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 등도 작동할 수 있습니다.