Bash скрипт для извлечения аудио из видео
Я написал этот маленький скрипт для пакетного извлечения аудио из видео с помощью avconv. Он работал нормально, но, как ни странно, он больше не работает (так как я изменил кодек с aac на mp3).
Сценарий должен проверять каждый файл в папке. Если это видео, оно должно извлечь аудио из него.
Может кто-нибудь помочь мне это исправить?
#!/bin/sh
#
# Batch conversion of audio extraction from video
# doesnt work with mkv files (file -i *.mkv returns application/octet)
FOLDER_SRC="/home/J/Music/TestBatchConv"
for myvid in $(find ${FOLDER_SRC})
do
if file -i $myvid | grep -q video ;
then avconv -i $myvid -acodec libmp3lame "${myvid}.mp3"
fi
done
exit 0
2 ответа
Кажется, вы используете старую версию file
где MKV файлы не были обнаружены должным образом. Вы можете использовать это ~/.magic
файл, чтобы иметь file
идентифицировать MKV.
Но на самом деле самый надежный способ проверить правильность видеофайлов - просто запустить avconv
и посмотрим, не получится или нет. Вот что вы можете сделать:
#!/bin/bash
FOLDER_SRC="/home/J/Music/TestBatchConv"
find "$FOLDER_SRC" -type f -print0 | while IFS= read -r -d '' myvid; do
echo "Trying to convert $myvid"
avconv -i "$myvid" -c:a libmp3lame -q:a 4 "${myvid%.*}.mp3" 2>/dev/null || echo "$myvid is not a valid file."
done
Если файл не является допустимым видео или есть какая-либо ошибка, avconv
выйдет в любом случае.
Несколько советов и объяснений:
Там нет необходимости анализировать вывод
ls
или жеfind
, Просто делайfor myvid in "$FOLDER_SRC"/*
или для рекурсивной версии используйте**
шар сglobstar
вариант. Здесьfind … | while …
Линия может быть заменена на:shopt -s globstar for myvid in "$FOLDER_SRC/**"; do
Не забудьте правильно процитировать
"$myvid"
где бы вы ни использовали его в цикле, иначе видео с пробелами в названии нарушают ваш сценарий.- Вы можете удалить исходное расширение файла, удалив что-нибудь после последней точки
${myvid%.*}
и заменить его на.mp3
, - Ты должен сказать
avconv
использовать переменную кодировку битрейта дляlibmp3lame
например, с-q:a 4
со значениями в диапазоне от 0 до 10 и 4 по умолчанию. Это даст вам лучшее качество звука в целом.
Для интересующихся вот последний рабочий код:
#!/bin/bash
#
# Batch conversion of audio extraction from video
echo $BASH_VERSION
FOLDER_SRC="/home/J/Music/TestBatchConv"
shopt -s globstar
for myvid in "$FOLDER_SRC"/**
do
echo "$myvid"
avconv -i "$myvid" -acodec libmp3lame "${myvid%.*}.mp3" 2>/dev/null || echo "$myvid is not a valid file."
done
exit 0