Если Вы знаете, что существует только 1 аудиопоток и что это aac
, затем Вам только нужно это:
ffmpeg -acodec copy -i "movie.mp4" -y "audio.aac"
Если Вы хотите написать сценарий первого идентификатора аудиопотока и типа кодека/расширения файла, можно использовать это:
eval $(ffmpeg -i "movie.mp4" 2>&1 |awk '/Stream.*Audio/{print "stream=" $2 ";codec=" $4}' |head -n1)
stream=${stream:1}; stream=${stream/:/}
extn=${codec/,/}; [[ $extn == "aac" ]] ||
{ echo "You need to manually set the fiie extension. Codec type is: $codec"; exit 1; }
ffmpeg -map $stream -acodec copy -i "movie.mp4" "audio.$extn"
Можно использовать ${#VAR}
получить длину переменной $VAR
:
if [ "${#filename}" -eq 5 ]; then
rename_file
fi
for file in ?????; do
something with "$file"
done
Обработает только (нескрытые) файлы в текущем каталоге, имя которого состоит в 5 символах. Обратите внимание на это некоторыми оболочками как dash
и некоторые реализации ksh
, это - 5 байтов вместо 5 символов, которые могут иметь значение в многобайтовых локалях.
Для тех тех же оболочек, ${#var}
расширится до числа байтов в переменной вместо количества символов.
С ударом можно вызвать Арифметический Контекст
if (( ${#filename} == 5 )); then
:
fi
Скажите, "filename.txt" является файлом затем, можно использовать,
file=`echo "fileName.txt" | cut -d'.' -f1`
if [ ${#file} -ge 5 ]; then
#you can rename your filename accordingly
fi
${#..}
должен возвратить просто число во всех случаях. – jofel 26.09.2013, 17:46