Mam kilka plików mp3 o różnej długości. Chcę go zmniejszyć do 50% -60% długości. Mówi, od 1 minuty do 30 sekund. Używanie ffmpeg powinno być trywialne. Ale nie wiem, jak określić jego pierwotną długość jako podstawę do przetwarzania przy użyciu ffmpeg.
Czy ktoś ma pomysł?
\n
aby wydrukować również nową linię.> mp3info -p "%S\n" sample.mp3
// całkowity czas w sekundachffmpeg
wypisze wszystko, co wie o pliku, jeśli nie podasz żadnych innych argumentów. Użyj,grep
aby usunąć wszystko oprócz „Czas trwania”:Możesz także użyć
mplayer
. Grep dla linii „ID_LENGTH =”:źródło
TOTLENGTH=0; for f in *.mp3; do LENGTH=$(mplayer -ao null -identify -frames 0 "$f" 2>&1 | awk -F= '/ID_LENGTH/ {print $2}' | awk -F. '{print $1}'); TOTLENGTH=$(($TOTLENGTH + $LENGTH)); done; echo $TOTLENGTH
wydrukowanie całkowitej długości dźwięku we wszystkich plikach, w kilka sekund. Prawdopodobnie można to zrobić bardziej wydajnie, ale ponieważ napisałem to jako jednorazowe, było wystarczająco dobre dla moich potrzeb. (Drugie wywołanie awk usuwa dziesiętne, więc wynik nie jest w 100% dokładny, ale znowu wystarczająco dobry dla moich potrzeb.)Estimating duration from bitrate, this may be inaccurate
. Myślę, że ta odpowiedź jest poprawna tylko w przypadku Constant Bitrate MP3.Co ciekawe, aplikacja EXIFTool podaje czas trwania MP3 jako ostatnią linię!
źródło
Po prostu inny sposób, aby uzyskać czas trwania tylko za pomocą
ffmpeg
igrep
:źródło
Zastosowane rozwiązania
ffmpeg
wydają mi się nieco delikatne, ponieważ analizują dane wyjściowe, które nie są zaprojektowane jako interfejs. Mimo to prawdopodobnie nadal będą pracować przez kilka lat.ffmpeg
zawiera narzędzieffprobe
do uzyskiwania informacji o plikach audio (wiele formatów, w tym mp3) i może generować dane wyjściowe do odczytu maszynowego. Następujące polecenie pobiera czas trwania utworu.źródło
ffprobe -show_entries stream=duration -of compact=p=0:nk=1 -v fatal song.mp3
Osobiście używam Mplayera do wydobywania informacji, głównie dlatego, że już go zainstalowałem i nie mogę niepokoić się niepotrzebną instalacją nowego oprogramowania. Zaletą tego jest to, że nie ogranicza się on w szczególności do plików mp3 i powinien działać z każdym plikiem multimedialnym, który Mplayer może obsłużyć. Następująca linijka zwróci długość ścieżki w sekundach.
źródło
Możesz użyć ffmpeg, aby uzyskać czas trwania pliku. Po prostu użyj:
źródło
Miałem ten sam problem i stwierdziłem, że polecenie mplayer (goldPseudo) działa dobrze, ale później odkryłem, że jeśli otworzysz album w RhythmBox, zobaczysz, że jego linia stanu podaje liczbę ścieżek, całkowity czas odtwarzania i rozmiar płyty.
źródło
Oto moje proste użycie powyższego.
Przesyłam tę wartość do zmiennej mp3_full_length
Dziękuję ponad ludzi! Korzystam z twoich pomysłów i wiedzy Dziękujemy za przeczytanie, miłego dnia! ;)
źródło