LINUX.ORG.RU

ещё два скрипта, пожалуйста:

 ,


1

1

Приветствую!

Поскольку я езмъ жуткий дурак, и сам не могу придумать, как такое сделать, прошу помощи и подсказки:

есть следующий скрипт, перебирающий все .mkv файлы в текущем каталоге:

#!/bin/bash

for fname in *.mkv; do

echo $fname

read -p «Press enter to continue»
echo $fname >> DTS_videos.txt
ffprobe $fname -show_streams -select_streams a 2>&1 | grep dts >> DTS_videos.txt

done

надо: чтобы он это делал в текущем каталоге, и всех подкаталогах, к тому же к какждому файлу с ДТС в DTS_videos.txt дописывал полный путь, дабы потом этот файл можно было легко найти.

и второй скрипт - список файлов в текущем каталоге и всех подкаталогах, в одной колонке, типа

ls -1

можно без путей, в выводом в тхт файл - составить по быстрому список всех видяшек на моем медиа диске, буде диск развалится, остался хотябы список бест фильмов...

огромное спасибо заранее! :)

★★

Последнее исправление: beastie (всего исправлений: 1)

man find, если хочешь всё же написать сам (find у тебя вместо цикла for будет). Ошибся форумом (надо не Desktop, а Job), если хочешь, чтобы написали за тебя.

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 1)
Ответ на: комментарий от Black_Shadow

 Знаю, но вникать туда буду в самом крайнем случае, ибо для меня читать и вспоминать весь это баш программинг - весь день уйдёт, и не факт что один. несоизмеримый трах ради элементарного результата, который человек, который ежедневно с баш-скриптами работает, может написать за неполные пару минут...

wisedraco ★★
() автор топика
Ответ на: комментарий от wisedraco

Тогда - в Job. Там с радостью тебе за деньги напишут всё, что ты хочешь.

Black_Shadow ★★★★★
()
Ответ на: комментарий от buratino

пробелы в именах каталогов и файлов есть?

я от них стараюсь избавлятся, равно как и от нацсимволов в именах файлов, но кое где ещё могут встретится.

в принципе, если перед этим поискам в том же скрипте провести проверку / нормализацию имён файлов / каталогов, заменив пробелы нижним подчёркиванием, было бы совсем сказочно...

wisedraco ★★
() автор топика
Ответ на: комментарий от Deleted
#!/bin/bash

IFS='
'

convert() {
        realpath "$1" >> DTS_videos.txt
        echo ffprobe "$1" ... >> DTS_videos.txt
}

scan() {
        local i p

        for i in `ls "$1/*.mkv"`; do
                p="$1/$i"
                if [ -d "$p" ]; then
                        scan "$p"
                fi
                if [ -f "$p" ]; then
                        convert "$p"
                fi
        done
}

scan "."
vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 2)
Ответ на: комментарий от Deleted

find . -name '*.mkv' -print0

да, спасибо, хотя с моей задачей справился и ls -lhSR, но в вашем скрипте можно задавать расширение, что иногда весьма полезно, и он также корректно работает с файлнеймами, в которых содержится пробел - оказывается, ледженд оф сикер у меня сплошь с пробелами в именах файлов, но поскольку он стоит в торрент раздаче - пусть пока так и стоит :)

https://www.youtube.com/watch?v=jRX0TIe2jyY

wisedraco ★★
() автор топика
Ответ на: комментарий от vodz

#!/bin/bash
IFS='
'
convert() {

realpath «$1» >> DTS_videos.txt

да, спасибо, правда, пришлось искать и ставить realpath, которого в дефаулте, несмотря на кучу поставленного через ports & brew софта, не оказалось:

Here are the steps to install realpath if it's not present:

Ubuntu: sudo apt-get install coreutils OS X: brew install coreutils

но, вылезла небольшая проблема: ваш скрипт все проверяемые файлы в DTS_videos.txt пишет, а не только те, в которых обнаружился DTS audio.

было бы здорово, если можно было бы только те файлы и путь к ним, на которые команда

echo ffprobe «$1» -show_streams -select_streams a 2>&1 | grep dts >> DTS_videos.txt

даст выхлоп ?

wisedraco ★★
() автор топика
Последнее исправление: wisedraco (всего исправлений: 1)
Ответ на: комментарий от wisedraco

Ну как-то так:

convert() {
     ffprobe "$1" ... | grep dts > /tmp/$$.tmp
     if [ $? -eq 0 ]; then
           realpach "$1" >> DTS_videos.txt
           cat /tmp/$$.tmp >>  DTS_videos.txt
     fi
}

# в конце скрипта
rm -f /tmp/$$.tmp

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 2)
Ответ на: комментарий от vodz
convert() {
        echo ffprobe «$1» -show_streams -select_streams a 2>&1 | grep dts  >> $$.tmp
 if [ $? -eq 0 ]; then
           realpath «$1» >> DTS_videos.txt
           cat $$.tmp >>  DTS_videos.txt
     fi
}

на выходе даёт чтото совсем дивное:

bash-3.2$ cat DTS_videos.txt 
/Volumes/Maxtor/NEW/20.04.2017/dts_detect_video.scr
ffprobe ./NEW/20.04.2017/dts_detect_video.scr -show_streams -select_streams a
/Volumes/Maxtor/NEW/20.04.2017/ffmpeg_recode_dts.scr
ffprobe ./NEW/20.04.2017/dts_detect_video.scr -show_streams -select_streams a
ffprobe ./NEW/20.04.2017/ffmpeg_recode_dts.scr -show_streams -select_streams a
/Volumes/Maxtor/NEW/FROM/256ssd/Sobachye serdtse.mkv
ffprobe ./NEW/20.04.2017/dts_detect_video.scr -show_streams -select_streams a
ffprobe ./NEW/20.04.2017/ffmpeg_recode_dts.scr -show_streams -select_streams a
ffprobe ./NEW/FROM/256ssd/Sobachye serdtse.mkv -show_streams -select_streams a
/Volumes/Maxtor/NEW/dts_detect_video.scr
ffprobe ./NEW/20.04.2017/dts_detect_video.scr -show_streams -select_streams a



 при этом по завершении тмп-файла нет.
пытался назвать .tmp - файл а-ля dtstmp.tmp - тогда по завершению темп-файл есть, но результат тако же :-О
wisedraco ★★
() автор топика
Ответ на: комментарий от vodz
bash-3.2$ cat dts_scan_recursive_v2.scr 
#!/bin/bash

IFS='
'


convert() {
        echo ffprobe «$1» -show_streams -select_streams a 2>&1 | grep dts > $$.tmp
 if [ $? -eq 0 ]; then
           realpath «$1» >> DTS_videos.txt
           cat $$.tmp >>  DTS_videos.txt
     fi
}

scan() {
        local i p

        for i in `ls «$1»`; do
                p=«$1/$i»
                if [ -d «$p» ]; then
                        scan «$p»
                fi
                if [ -f «$p» ]; then
                        convert «$p»
                fi
        done
}

scan "."

#rm -f /tmp/$$.tmp

bash-3.2$ 


bash-3.2$ cat DTS_videos.txt 
/Volumes/Maxtor/NEW/20.04.2017/dts_detect_video.scr
ffprobe ./NEW/20.04.2017/dts_detect_video.scr -show_streams -select_streams a
/Volumes/Maxtor/NEW/20.04.2017/ffmpeg_recode_dts.scr
ffprobe ./NEW/20.04.2017/ffmpeg_recode_dts.scr -show_streams -select_streams a
/Volumes/Maxtor/NEW/FROM/256ssd/Sobachye serdtse.mkv
ffprobe ./NEW/FROM/256ssd/Sobachye serdtse.mkv -show_streams -select_streams a
/Volumes/Maxtor/NEW/dts_detect_video.scr
ffprobe ./NEW/dts_detect_video.scr -show_streams -select_streams a
/Volumes/Maxtor/ORIGINAL_HDD/MacScripts/dts_detect_video.scr
ffprobe ./ORIGINAL_HDD/MacScripts/dts_detect_video.scr -show_streams -select_streams a
/Volumes/Maxtor/ORIGINAL_HDD/MacScripts/ffmpeg_recode_dts.scr
ffprobe ./ORIGINAL_HDD/MacScripts/ffmpeg_recode_dts.scr -show_streams -select_streams a
/Volumes/Maxtor/USSR/Sobachye serdtse.mkv
ffprobe ./USSR/Sobachye serdtse.mkv -show_streams -select_streams a
/Volumes/Maxtor/dts_detect_video.scr
ffprobe ./dts_detect_video.scr -show_streams -select_streams a
/Volumes/Maxtor/dts_scan_recursive.scr
ffprobe ./dts_scan_recursive.scr -show_streams -select_streams a
/Volumes/Maxtor/dts_scan_recursive_v2.scr
ffprobe ./dts_scan_recursive_v2.scr -show_streams -select_streams a
bash-3.2$ 



более того, изначальный вариант тоже не работал, меня сбивали с толку первые строки дтс- файла, которые остались ещё с моего первого скрипта, который в первом сообщении сего топика приведён.

и что ещу - ваш скрипт, если запустить первую версию, которая типа все найденные файлы в тхт пишет - он не только .мкв, но все файлы смотрит почему то:

bash-3.2$ cat dts_scan_recursive.scr 

#!/bin/bash

IFS='
'

convert() {
        realpath «$1» >> DTS_videos.txt
        echo ffprobe «$1» -show_streams -select_streams a 2>&1 | grep dts  >> DTS_videos.txt
}

scan() {
        local i p

        for i in `ls «$1»`; do
                p=«$1/$i»
                if [ -d «$p» ]; then
                        scan «$p»
                fi
                if [ -f «$p» ]; then
                        convert «$p»
                fi
        done
}

scan "."
bash-3.2$ 

bash-3.2$ sh dts_scan_recursive.scr 
bash-3.2$ cat DTS_videos.txt 
/Volumes/Maxtor/Avatar.2009.x264.BDRip(1080p).mkv
/Volumes/Maxtor/Avatar.2009.x264.BDRip(1080p).srt
/Volumes/Maxtor/BRATVA_I_KOLJCO_RUS_GOBLIN.AVI
/Volumes/Maxtor/Bratva_i_koltso.v.1.0.avi
/Volumes/Maxtor/Buska/Dancer.in.the.Dark.2000_HDRip____[scarabey.org].avi
/Volumes/Maxtor/Buska/Dogville (2003) HDTVRip [Rus. Eng].avi
/Volumes/Maxtor/Buska/Melancholiya.2011.HDRip.x264.potroks.mkv
/Volumes/Maxtor/Buska/Nimfomanka.I.2013.DUAL.BDRip.x264.-HELLYWOOD.mkv
/Volumes/Maxtor/Buska/Nimfomanka.II.2013.DUAL.BDRip.x264.-HELLYWOOD.mkv
/Volumes/Maxtor/Comedy/Bolshaya.progulka/Bolshaya.progulka- English.sup
/Volumes/Maxtor/Comedy/Bolshaya.progulka/Bolshaya.progulka- French.ac3
/Volumes/Maxtor/Comedy/Bolshaya.progulka/Bolshaya.progulka- French.sup
/Volumes/Maxtor/Comedy/Bolshaya.progulka/Bolshaya.progulka- Russian.ac3
/Volumes/Maxtor/Comedy/Bolshaya.progulka/Bolshaya.progulka.1966.RUS.BDRip1080р.mkv
/Volumes/Maxtor/Comedy/Ckup0j.avi
/Volumes/Maxtor/Comedy/Il bisbetico domato_1980_HDRip__[scarabey.org].avi
/Volumes/Maxtor/Comedy/Korotkometrazhnye.filmy.Rezo.Gabriadze.1974-1980.DivX.TVRip/reso.gabriadze.01.pari.avi
/Volumes/Maxtor/Comedy/Korotkometrazhnye.filmy.Rezo.Gabriadze.1974-1980.DivX.TVRip/reso.gabriadze.02.saturday.evening.avi
/Volumes/Maxtor/Comedy/Korotkometrazhnye.filmy.Rezo.Gabriadze.1974-1980.DivX.TVRip/reso.gabriadze.03.termometr.avi
/Volumes/Maxtor/Comedy/Korotkometrazhnye.filmy.Rezo.Gabriadze.1974-1980.DivX.TVRip/reso.gabriadze.04.three.rubles.avi
/Volumes/Maxtor/Comedy/Korotkometrazhnye.filmy.Rezo.Gabriadze.1974-1980.DivX.TVRip/reso.gabriadze.05.lemon.cake.avi
/Volumes/Maxtor/Comedy/Korotkometrazhnye.filmy.Rezo.Gabriadze.1974-1980.DivX.TVRip/reso.gabriadze.06.mountains.explorers.avi
/Volumes/Maxtor/Comedy/Korotkometrazhnye.filmy.Rezo.Gabriadze.1974-1980.DivX.TVRip/reso.gabriadze.07.butterfly.avi
/Volumes/Maxtor/Comedy/Korotkometrazhnye.filmy.Rezo.Gabriadze.1974-1980.DivX.TVRip/reso.gabriadze.08.three.fiances.avi
/Volumes/Maxtor/Comedy/Korotkometrazhnye.filmy.Rezo.Gabriadze.1974-1980.DivX.TVRip/rezo.gabriadze.09.udacha.avi
/Volumes/Maxtor/Comedy/Million_let_do_nashey_eri/Million_let_do_nashey_eri.avi
/Volumes/Maxtor/Comedy/Moonwalkers BDRip 720p.D.2015.mkv
/Volumes/Maxtor/Avatar.2009.x264.BDRip(1080p).mkv
/Volumes/Maxtor/Avatar.2009.x264.BDRip(1080p).srt



 а этой мой, старенький скрипт:
bash-3.2$ cat dts_detect_video.scr 
#!/bin/bash


for fname in *.mkv; do
#ffmpeg -i $fname
echo $fname
#echo -n «Enter number of srt stream after semicolon ( like 15 if stream is 0:15)  > »
#read sub_str

#fullfile=$fname
#filename=«${fullfile%.*}»
#subtitles=$filename.srt

#ffmpeg -i «$fname» -vn -an -map 0:«$sub_str» -codec:s srt  $subtitles

##ffmpeg -i «$1» -vn -an -map 0:«$2» -codec:s srt  $subtitles
##'$subtitles'

#echo $subtitles
read -p «Press enter to continue»
echo $fname >> DTS_videos.txt
ffprobe $fname -show_streams -select_streams a 2>&1 | grep dts >> DTS_videos.txt

#pause 5
done



bash-3.2$ 


и результат его работы:

bash-3.2$ cat DTS_videos.txt 
Avatar.2009.x264.BDRip(1080p).mkv
    Stream #0:1(rus): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 768 kb/s (default)
    Stream #0:2(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 1536 kb/s
codec_name=dts
codec_name=dts
Voobrajarium.2012.D.BDRip.720p.mkv
    Stream #0:2(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 768 kb/s
codec_name=dts
bash-3.2$ 

wisedraco ★★
() автор топика
Ответ на: комментарий от wisedraco

и что ещу - ваш скрипт, если запустить первую версию, которая типа все найденные файлы в тхт пишет - он не только .мкв, но все файлы смотрит почему то:

Почему почему. Потому что это был мой тестовый скрипт, а не ваш конвертер mkv.

Что вам не нравится в окончательном варианте на первый взгляд не видно, хотите помощи - сделайте короткие тестовые данные и укажите проблему.

vodz ★★★★★
()
Ответ на: комментарий от vodz
scan() {
        local i p

        for i in `ls "$1/*.mkv"`; do
                p="$1/$i"
                if [ -d "$p" ]; then
                        scan "$p"
                fi
                if [ -f "$p" ]; then
                        convert "$p"
                fi
        done
}

scan "."

bash-3.2$ sh dts_scan_recursive_v2.scr 
ls: ./*.mkv: No such file or directory
bash-3.2$ 

wisedraco ★★
() автор топика
Ответ на: комментарий от wisedraco

ошибка ещё в том, что он не все вложенные директории будет проверять, а только заканчивающиеся на .mkv

teod0r ★★★★★
()
Ответ на: комментарий от teod0r

в имеющимся виде он не проверяет ничего вообще. сразу после запуска скрипта вываливается ошибка

ls: ./*.mkv: No such file or directory

и скрипт завершает работу.

если вместо for i in `ls «$1/*.mkv»`; do

сделать for i in `ls «$1»`; do

то скрипт работает, но честихвостит все файлы, с любыми расширениями.

wisedraco ★★
() автор топика
Последнее исправление: wisedraco (всего исправлений: 1)

testiruy

cat ./finde.sh

#!/bin/bash

if [ -t 0 ]; then
    if [ -z "$EXEC" ]; then
        EXEC='echo "${item}"'
    fi
    find "$@" | "${0}" "$EXEC"
else
    EXEC="$1"
    qf () {
        printf %s "$@" | sed -e 's/'"'"'/'"'"'"'"'"'"'"'"'/g' -e "s/^\|$/'/g"
    }
    while IFS= read -r item || [ -n "$item" ]; do
        qitem="$(qf "$item")"
        #echo -n "$EXEC"
        eval "$EXEC"
    done
fi


EXEC='ffprobe $qitem -show_streams -select_streams a 2>&1 | grep dts >> DTS_videos.txt' ./finde.sh ./ -iname '*.mkv'

Bad_ptr ★★★★★
()
Ответ на: комментарий от vodz
Да, большое спасибо, теперь всё работает:

bash-3.2$ cat DTS_videos.txt 
/Volumes/sms640ExFAT/Lars.and.the.Real.Girl.2007.BDRip.720p/Lars.and.the.Real.Girl.2007.BDRip.720p.mkv
    Stream #0:2(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 1536 kb/s
codec_name=dts
/Volumes/sms640ExFAT/Nightwish.Showtime.Storytime.2013.BDRip.720p.mkv
    Stream #0:2(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 1536 kb/s
codec_name=dts
/Volumes/sms640ExFAT/Voobrajarium.2012.D.BDRip.720p.mkv
    Stream #0:2(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 768 kb/s
codec_name=dts
bash-3.2$ 


а с детектом дтс это я сам ступил - не убрал echo перед командой.
совсем плох стал, видать... но теперь всё работает!

спасибо ещё раз, и приятного дня! :)
wisedraco ★★
() автор топика
Ответ на: testiruy от Bad_ptr

спасибо за вариант, правда,

мне сначала полмешка травы надо бы достать, чтобы хоть приблизительно понять,

что этот скрипт делает, и как его правильно запускать, но на досуге поковыряю :)

wisedraco ★★
() автор топика
Ответ на: testiruy от Bad_ptr

Между прочим, чтобы не извращаться с sed достаточно в вашем printf поменять «%s» на «%q»

А вообще, конечно, знатное извращение, да :)

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.