1

Я написал этот маленький скрипт для пакетного извлечения аудио из видео с помощью 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 ответа2

3

Кажется, вы используете старую версию 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"/* , или для рекурсивной версии используйте ** glob с опцией globstar . Здесь find … | while … строка может быть заменена на:

    shopt -s globstar
    for myvid in "$FOLDER_SRC/**"; do
    
  • Не забывайте правильно указывать "$myvid" везде, где вы используете его в цикле, иначе видео с пробелами в названии нарушают ваш сценарий.

  • Вы можете удалить исходное расширение файла, удалив что-либо после последней точки ${myvid%.*} И заменив его на .mp3 .
  • Вы должны указать avconv использовать кодирование с переменным битрейтом для libmp3lame , например, с -q:a 4 , со значениями от 0 до 10 и 4 по умолчанию. Это даст вам лучшее качество звука в целом.
0

Для интересующихся вот окончательный рабочий код:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .