Bạn nói rằng bạn muốn "trích xuất âm thanh từ họ (mp3 hoặc ogg)". Nhưng nếu âm thanh trong tệp mp4 không phải là một trong số đó thì sao? dù sao bạn cũng phải chuyển mã. Vậy tại sao không để phát hiện định dạng âm thanh lên đến ffmpeg?
Để chuyển đổi một tập tin:
ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg
Để chuyển đổi nhiều tập tin:
for vid in *.mp4; do ffmpeg -i "$vid" -vn -acodec libvorbis "${vid%.mp4}.ogg"; done
Tất nhiên bạn có thể chọn bất kỳ tham số ffmpeg nào cho mã hóa âm thanh mà bạn thích, để đặt những thứ như bitrate, v.v.
Sử dụng -acodec libmp3lame
và thay đổi phần mở rộng từ .ogg
sang .mp3
mã hóa mp3.
Nếu điều bạn muốn là thực sự trích xuất âm thanh, bạn chỉ cần "sao chép" đoạn âm thanh vào một tệp bằng cách sử dụng -acodec copy
. Tất nhiên, sự khác biệt chính là chuyển mã chậm và thâm dụng cpu, trong khi sao chép thực sự nhanh chóng khi bạn chỉ di chuyển byte từ tệp này sang tệp khác. Đây là cách sao chép chỉ bản nhạc âm thanh (giả sử nó ở định dạng mp3):
ffmpeg -i videofile.mp4 -vn -acodec copy audiofile.mp3
Lưu ý rằng trong trường hợp này, định dạng audiofile có để phù hợp với những gì container có (ví dụ: nếu âm thanh định dạng AAC, bạn phải nói audiofile.aac
). Bạn có thể sử dụng ffprobe
lệnh để xem codec nào bạn có, điều này có thể cung cấp một số thông tin:
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "videofile.mp4"
Một cách có thể để tự động phân tích codec âm thanh và đặt tên tệp âm thanh phù hợp sẽ là:
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
Ghi chú: các tệp đầu ra được tạo trong thư mục con output
mà nó tạo vào đầu (nếu cần). Đối với các codec khác ngoài mp3 và vorbis, nó chuyển đổi âm thanh thành ogg. Ubuntu 14.04 không có ffmpeg trong kho lưu trữ tiêu chuẩn, nhưng bạn có thể thêm kho lưu trữ ppa: mc3man / trusty-media và cài đặt gói ffmpeg để có được phần mềm cần thiết. Xem ở đây để biết chi tiết.