#ffmpeg #ubuntu #createvideofromaudio #mp3video #bashscript
Bir MP3 dosyası ve bir PNG dosyası kullanarak bir video dosyası oluşturup bunu youtube üzerine yüklemek mümkün.
Normal şartlarda tek bir resim kullanılarak oluşturulacak video dosyasını üretmek, videonun uzunluğuna ve bilgisayarın performansına bağlı olarak ciddi bir zaman alabilmektedir. Ancak ffmpeg komut satırı uygulamasını kullanarak çok hızlı bir biçimde ve çok küçük boyutta bir video dosyası oluşturmak mümkündür. Üstelik MP3 dosyası da yeniden dönüştürülmeden, orijinal kalitede kullanılır.
Bununla birlikte oluşturulacak bu video dosyasının biraz hileli olduğunu belirtmem gerek. Zira sabit resim dosyası kullanıldığı için onu saniyede 25 kere yinelemek yerine, birkaç saniyede bir yineletsek de görüntü açısından bir değişiklik olmayacaktır. Öte yandan Youtube üzerine yüklenen videolar yeniden işlendiği için, o esnada normal video üretilmiş olmaktadır.
Gereken uygulamar Ubuntu 18.04 ortamında şu şekilde kurulabilir.
Aşağıdaki komutla videoyu oluşturan script, daha sonra her taraftan erişilebilsin diye PATH içerisinde bulunan ~/bin klasörüne indirilir ve çalışma izni verilir.
- mkdir ~/bin
- wget "https://mim.mbirgin.com/upload/files/mbirgin_create_video.sh" -O "~/bin/mbirgin_create_video.sh"
- chmod +x ~/bin/mbirgin_create_video.sh
Kullanım:
- mbirgin_create_video.sh "PNG_Konumu" "MP3_Konumu
Video, MP3 dosyasının bulunduğu yere oluşturulur.
Örnek:
- mbirgin_create_video.sh "/media/data/test/background.png" "Enlem_ve_Boylam.mp3"
Bir klasördeki tüm mp3 dosyalarını otomatik olarak videoya dönüştürmek de mümkün:
Script dosyası içeriği
#!/bin/bash
png="$1";
mp3="$2";
echo "PNG ve MP3 dosyalarından video oluşturan bir uygulamadır."
echo "Kullanım: script PNG MP3"
echo "PNG: $png"
echo "MP3: $mp3"
if [ ! -f "$mp3" ]; then
echo "Dosya bulunamadı: $mp3";
exit
fi
if [ ! -f "$png" ]; then
echo "Dosya bulunamadı: $png";
exit
fi
sec=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$mp3");
sec=$(echo "$sec/1.0" | bc);
minute=$(( $sec/60 ));
remainder=$(( $sec % 60 ));
echo minute: $minute - remainder: $remainder
echo "Ses süresi (sn): $sec";
avi="$mp3.avi";
ffmpeg -f concat -safe 0 -i <( echo "file $png"; echo "duration 0.1"; for (( l=0; l<$minute; l++ )); do echo "file $png"; echo "duration 60"; done; for (( k=0; k<=$remainder; k++ )); do echo "file $png"; echo "duration 1"; done; ) -i "$mp3" -c:a copy -map 0:v -map 1:a -shortest "$avi"
echo "'$avi' oluşturuldu."
echo ""
echo "Tool version: 2019.01.02 by mbirgin.com"