228 개의 mp4 파일 (2.6GB)이 있고 그로부터 오디오를 추출하고 싶습니다 (mp3 또는 ogg). 나는 바람직하게 bash로 배치 추출을 원합니다. 모든 파일이 2006-2012 년에 걸쳐 서로 다른 연도에 기록 된 것과 동일한 오디오 코덱을 사용하는지 확실하지 않습니다.
모든 파일을 반복하고 파일 이름을 선택하고 오디오 코덱을 감지하고 ffmpeg를 사용하여 오디오를 추출하고 싶습니다.
가능합니까?
228 개의 mp4 파일 (2.6GB)이 있고 그로부터 오디오를 추출하고 싶습니다 (mp3 또는 ogg). 나는 바람직하게 bash로 배치 추출을 원합니다. 모든 파일이 2006-2012 년에 걸쳐 서로 다른 연도에 기록 된 것과 동일한 오디오 코덱을 사용하는지 확실하지 않습니다.
모든 파일을 반복하고 파일 이름을 선택하고 오디오 코덱을 감지하고 ffmpeg를 사용하여 오디오를 추출하고 싶습니다.
가능합니까?
답변:
"오디오에서 오디오를 추출합니다 (mp3 또는 ogg)"라고 말합니다. 그러나 mp4 파일의 오디오가 그중 하나가 아닌 경우 어떻게해야합니까? 어쨌든 트랜스 코딩해야합니다. 그렇다면 오디오 형식 감지 기능을 ffmpeg로 유지하지 않으시겠습니까?
하나의 파일을 변환하려면
ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg
많은 파일을 변환하려면
for vid in *.mp4; do ffmpeg -i "$vid" -vn -acodec libvorbis "${vid%.mp4}.ogg"; done
물론 비트 레이트 등을 설정하기 위해 원하는 오디오 인코딩에 대한 ffmpeg 매개 변수를 선택할 수 있습니다.
사용 -acodec libmp3lame
에서 확장자를 변경 .ogg
하는 .mp3
MP3 인코딩.
원하는 오디오 를 실제로 추출 하려면을 사용하여 오디오 트랙을 파일로 "복사"하면됩니다 -acodec copy
. 물론, 주요 차이점은 트랜스 코딩이 느리고 CPU를 많이 사용한다는 것입니다. 한 파일에서 다른 파일로 바이트를 옮기는 것만으로도 복사가 빠릅니다. 다음은 오디오 트랙 만 복사하는 방법입니다 (mp3 형식이라고 가정).
ffmpeg -i videofile.mp4 -vn -acodec copy audiofile.mp3
이 경우, audiofile 형식이 있습니다 이 컨테이너가 무슨과 일치하도록 (오디오는 AAC 형식 인 경우 즉, 당신은 말할 필요 audiofile.aac
). 이 ffprobe
명령을 사용하여 사용 중인 코덱을 확인할 수 있습니다.이 정보는 다음과 같습니다.
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "videofile.mp4"
오디오 코덱을 자동으로 구문 분석하고 그에 따라 오디오 파일 이름을 지정하는 가능한 방법은 다음과 같습니다.
mkdir -p output
# current directory has to contain at least one .mp4 file
for vid in *.mp4; do
codec="$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "$vid")"
case "$codec" in
mp3 ) filetype=mp3 ;;
vorbis ) filetype=ogg ;;
* ) filetype= ;;
esac
if [ "$filetype" ]; then
ffmpeg -i "$vid" -vn -acodec copy output/"${vid%.*}"."$filetype"
else
ffmpeg -i "$vid" -vn -acodec libvorbis output/"${vid%.*}".ogg
done
주 : 출력 파일은 output
처음에 작성하는 서브 디렉토리 에 작성됩니다 (필요한 경우). mp3 및 vorbis 이외의 코덱의 경우 오디오를 ogg로 변환합니다. Ubuntu 14.04에는 표준 리포지토리에 ffmpeg가 없지만 ppa : mc3man / trusty-media 리포지토리를 추가하고 ffmpeg 패키지를 설치하여 필요한 소프트웨어를 얻을 수 있습니다. 자세한 내용은 여기 를 참조 하십시오 .
ffprobe "$file" 2>&1 |sed -rn 's/.*Audio: (...), .*/\1/p'
; done 수정합니다.
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
ffmpeg
또는 ffprobe
나중에 우분투 14.04 또는 사용할 수 없습니다.
Nicolas Raoul이 말했듯이 업데이트가 필요합니다. 다음은 roadmr이 제공했지만 avconv를 대신 사용하는 것과 동일한 줄입니다.
for vid in *.mp4; do avconv -i "$vid" "${vid%.mp4}.mp3"; done