[]
BASH script ile random playlist oluşturma
Merhaba,
Şöyle bir sorunum var. Elimde birçok video dosyası var. Bu video dosyaları video001.MP4, video002.MP4, video003.MP4 …. şekline. Bu dosyaların yanında intro.MP4 ve outro.MP4 adında giriş-çıkış için kullanacağım 2 video dosyası da var.
Mpv adında video player kullanıyorum ve herhangi bir text dosyasını playlist olarak okuyabiliyor. Girdiyi şu şekilde istiyor;
Video001.MP4
Video002.MP4
….
Video045.MP4
Şimdi öyle bir BASH script istiyorum ki her çalıştırıldığında intro.MP4 dosyasını başa yazsın, ardından rastgele, belirlediğim miktarda video dosyasını altına eklesin ve son olarak outro dosyasını en sona yazsın ve bunu txt dosyası olarak kayıt etsin. Yani dosya içeriği şöyle olacak:
intro.MP4
Video002.MP4
Video013.MP4
Video008.MP4
….
outro.MP4
Bu konuda yardımcı olursanız çok sevinirim.
Şöyle bir sorunum var. Elimde birçok video dosyası var. Bu video dosyaları video001.MP4, video002.MP4, video003.MP4 …. şekline. Bu dosyaların yanında intro.MP4 ve outro.MP4 adında giriş-çıkış için kullanacağım 2 video dosyası da var.
Mpv adında video player kullanıyorum ve herhangi bir text dosyasını playlist olarak okuyabiliyor. Girdiyi şu şekilde istiyor;
Video001.MP4
Video002.MP4
….
Video045.MP4
Şimdi öyle bir BASH script istiyorum ki her çalıştırıldığında intro.MP4 dosyasını başa yazsın, ardından rastgele, belirlediğim miktarda video dosyasını altına eklesin ve son olarak outro dosyasını en sona yazsın ve bunu txt dosyası olarak kayıt etsin. Yani dosya içeriği şöyle olacak:
intro.MP4
Video002.MP4
Video013.MP4
Video008.MP4
….
outro.MP4
Bu konuda yardımcı olursanız çok sevinirim.
Linux kullanıyorsan (ki mpv kullanıyorsan muhtemelen öyledir:) shuf kullanabilirsin. Videoların bulunduğu klasörün adı "files" olsun mesela, bi üst directory'de:
ls files | shuf -n 10
Dersen, files klasöründen random 10 tane dosya adı döner sana.
Dosyaya yazmak için de:
echo "intro.MP4" && echo ls files | shuf -n 10 && echo "outro.MP4" >> myfile.txt
ls files | shuf -n 10
Dersen, files klasöründen random 10 tane dosya adı döner sana.
Dosyaya yazmak için de:
echo "intro.MP4" && echo ls files | shuf -n 10 && echo "outro.MP4" >> myfile.txt
- plutongezegendegilmi (06.11.22 20:38:42 ~ 20:49:31)
@plutongezegendegilmi, çok teşekkür ederim. kısmen başarılı oldum. şöyleki:
myfile.txt dosyasına yazabiliyorum ama dosya files klasörünün dışında olduğu için, videoplayer playlist dosyasındaki dosyaları üst klasörde arıyor. Dolayısıyla bulamadığı için videoları oynatamıyor. Ben de kulağı tersten tuttum biraz ama myfile.txt dosyasını "files" klasörünün içinde oluşturarak sorunu çözdüm. Tabii bu sefer myfile.txt dosyası da playliste eklendi ama bu şekilde çalışıyor. Intro ve outro dosyalarını da bir üst klasöre taşıdım.
Şöyle uzun bir komut silsilesi oldu.
touch myfile.txt && echo "../intro.m4v" >> myfile.txt && ls | shuf -n 10 >> myfile.txt && echo "../outro.m4v" >> myfile.txt
Çok teşekkür ederim tekrardan.
myfile.txt dosyasına yazabiliyorum ama dosya files klasörünün dışında olduğu için, videoplayer playlist dosyasındaki dosyaları üst klasörde arıyor. Dolayısıyla bulamadığı için videoları oynatamıyor. Ben de kulağı tersten tuttum biraz ama myfile.txt dosyasını "files" klasörünün içinde oluşturarak sorunu çözdüm. Tabii bu sefer myfile.txt dosyası da playliste eklendi ama bu şekilde çalışıyor. Intro ve outro dosyalarını da bir üst klasöre taşıdım.
Şöyle uzun bir komut silsilesi oldu.
touch myfile.txt && echo "../intro.m4v" >> myfile.txt && ls | shuf -n 10 >> myfile.txt && echo "../outro.m4v" >> myfile.txt
Çok teşekkür ederim tekrardan.
- postnuka (06.11.22 22:21:58)
sed kullanarak text manipülasyonu yapabilirsiniz.
Misal shuffle'dan dönen her satırın başına "../" eklemek için:
echo ls files | shuf -n 10 | sed 's/^/..\//'
Veya işte benzer bi şekilde başa "./files" eklemek için:
sed 's/^/.\/files\//'
Misal shuffle'dan dönen her satırın başına "../" eklemek için:
echo ls files | shuf -n 10 | sed 's/^/..\//'
Veya işte benzer bi şekilde başa "./files" eklemek için:
sed 's/^/.\/files\//'
- plutongezegendegilmi (06.11.22 22:32:49 ~ 22:38:35)
Harika oldu.
Bir bash script içine yerleştirdim hepsini. Şu şekilde oldu.
#!/bin/bash
echo "Create playlist"
touch myfile.txt && echo "intro.m4v" >> myfile.txt && ls files | shuf -n 10 | sed 's/^/.\/files\//' >> myfile.txt && echo "outro.m4v" >> myfile.txt
echo "Run mpv with the playlist"
mpv --fs --playlist=myfile.txt
echo "Delete playlist"
rm myfile.txt
Sonsuz teşekkürler.
Bir bash script içine yerleştirdim hepsini. Şu şekilde oldu.
#!/bin/bash
echo "Create playlist"
touch myfile.txt && echo "intro.m4v" >> myfile.txt && ls files | shuf -n 10 | sed 's/^/.\/files\//' >> myfile.txt && echo "outro.m4v" >> myfile.txt
echo "Run mpv with the playlist"
mpv --fs --playlist=myfile.txt
echo "Delete playlist"
rm myfile.txt
Sonsuz teşekkürler.
- postnuka (06.11.22 23:02:47 ~ 23:21:25)
1