сценарий оболочки к пакетному преобразованию M4V к MP3 с помощью VLC?

Все команды, которые пользователь мог бы хотеть выполнить, находятся в ПУТИ. Это - то, для чего это. Это включает команды, которые Вы выполняете непосредственно, управляет, чтобы другие люди, выполненные непосредственно, и, управляли, что Вы или другие люди, выполненные косвенно, потому что они вызываются другими командами. Это не ограничено командами, выполненными от терминала: команды, выполненные от GUI, также ищутся в пути поиска команды (снова, это - то, что это для).

Быть необходимостью для ввода полного пути была бы ужасна: необходимо было бы узнать, каков полный путь! Необходимо было бы отслеживать то, является ли это в /usr/bin (который содержит большинство программ, поставленных с операционной системой), или в /usr/local/bin (который содержит программы, установленные вручную администратором, а также программами, которые не являются частью базовой ОС на некоторых вариантах Unix), или в некотором другом определенном для системы каталоге, или где-нибудь в корневом каталоге пользователя.

Трудно ответить о “влиянии на производительность или пригодность для обслуживания”, потому что Вы не говорите, с чем Вы сравниваете его. Если Вы соответствуете необходимости ввести полный путь везде, это - кошмар для пригодности для обслуживания: если Вы когда-либо перемещаете программу, или если Вы хотите установить более новую версию, чем, что шло с ОС или было установлено системным администратором, необходимо заменить тот полный путь везде. Влияние производительности взгляда имени в нескольких каталогах незначительно.

Если Вы соответствуете Windows, это еще хуже: некоторые программы добавляют не только исполняемый файл, но также и все виды дерьма к ПУТИ, и Вы заканчиваете с длинной в милю PATH переменная, которая все еще не включает все программы, потому что много программ не добавляют себя к системному ПУТИ при установке их.

2
22.07.2018, 05:24
3 ответа

Вот то, как использование ffmpeg:

$ ./ffmpeg -i testing.m4v -b:a 192K -vn testing.mp3

Или переменная скорость передачи:

$ ./ffmpeg -i testing.m4v -q:a 0 -map a testing.mp3

версия ffmpeg

$ ./ffmpeg -version
ffmpeg version N-56896-ga927276
built on Oct  5 2013 05:42:36 with gcc 4.6 (Debian 4.6.3-1)
configuration: --prefix=/root/ffmpeg-static/64bit --extra-cflags='-I/root/ffmpeg-static/64bit/include -static' --extra-ldflags='-L/root/ffmpeg-static/64bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
libavutil      52. 46.100 / 52. 46.100
libavcodec     55. 34.100 / 55. 34.100
libavformat    55. 19.100 / 55. 19.100
libavdevice    55.  3.100 / 55.  3.100
libavfilter     3. 88.101 /  3. 88.101
libswscale      2.  5.100 /  2.  5.100
libswresample   0. 17.103 /  0. 17.103
libpostproc    52.  3.100 / 52.  3.100

Ссылки

2
27.01.2020, 22:14

Вот то, что я закончил тем, что использовал. Благодаря slm для справки ffmpeg. Я поместил тот код в цикл.

#!/bin/sh                                                                                                                                                     
arate="64K"
ext="mp3"                                                                                                                                              
app="/usr/bin/ffmpeg"                                                                                                                                           
if [ ! -e "$app" ]; then
    echo "Command '$app' does not exist"
    exit 1
fi

for file in "$@"; do
    echo "=> Transcoding '$file' ..."
    dst=`dirname "$file"`
    new=`basename "$file" | sed 's@\.[a-z][a-z][a-z]$@@'`.$ext
    $app -i "$file" -b:a $arate -vn "$dst/$new"
    ls -lh "$file" "$dst/$new"
    echo
done

Работает. Однако в моем именовании файла существует ошибка. Я еще не зафиксировал его. Выходные файлы называют blahblah.m4v.mp3 вместо blahblah.mp3.

0
27.01.2020, 22:14

Работы приятно, спасибо

Работает. Однако в моем именовании файла существует ошибка. Я еще не зафиксировал его. Выходные файлы называют blahblah.m4v.mp3 вместо blahblah.mp3.

#!/bin/sh                                                                                                                                                     
arate="64K"
ext="mp3"                                                                                                                                              
app="/usr/bin/ffmpeg"                                                                                                                                           
if [ ! -e "$app" ]; then
    echo "Command '$app' does not exist"
    exit 1
fi

for file in "$@"; do
    echo "=> Transcoding '$file' ..."
    dst=`dirname "$file"`
    new=`basename "$file" | sed 's@\.[a-z][a-z0-9][a-z0-9]$@@'`.$ext
    $app -i "$file" -b:a $arate -vn "$dst/$new"
    ls -lh "$file" "$dst/$new"
    echo
done

Я уверен, что будет лучший путь, но разрешение 0-9 в regex также означает .m4v, и .mp4 и т.д. будет работать.

0
27.01.2020, 22:14

Теги

Похожие вопросы