Znalazłem coś do filmów, które wyglądają tak.
ffmpeg -i * -c:v libx264 -crf 22 -map 0 -segment_time 1 -g 1 -sc_threshold 0 -force_key_frames "expr:gte(t,n_forced*9)" -f segment output%03d.mp4
Próbowałem użyć tego do pliku audio, ale tylko pierwszy plik audio zawierał rzeczywisty dźwięk, inne milczały, poza tym, że było dobre, tworzył nowy plik audio na każdą sekundę. Czy ktoś wie, co zmodyfikować, aby działało z plikami audio lub innym poleceniem, które może zrobić to samo?
Odpowiedzi:
To działało dla mnie, gdy próbowałem go na pliku mp3.
Gdzie
-segment_time
jest czas, jaki chcesz na każdy plik (w sekundach).Referencje
źródło
mp3
zm4a
Aby podzielić duży plik audio na zestaw ścieżek o różnych długościach, możesz użyć następującego polecenia:
Na przykład podzieliłem pojedynczy plik .opus oryginalnej ścieżki dźwiękowej Inception na pod-pliki przy użyciu tego pliku tekstowego zawierającego początek, koniec, nazwę:
Napisałem ten krótki
awk
program do odczytu pliku tekstowego i tworzeniaffmpeg
poleceń z każdej linii:Oto bardziej szczegółowa
python
wersja programu o nazwiesplit.py
, w której teraz zarówno oryginalny plik ścieżki, jak i plik tekstowy określający ścieżki podrzędne są odczytywane z wiersza poleceń:Możesz łatwo tworzyć coraz bardziej skomplikowane
ffmpeg
wywołania, modyfikując szablon poleceń i / lub dodając więcej pól do każdej linii pliku track_list.źródło
subprocess.call(command)
jestpython
analogowosystem(command)
wawk
, z których oba umożliwiają wysyłanieffmpeg
poleceń powłoki. Zredagowałem swój post, aby uwzględnić elastycznąpython
implementację ilustrującą jeden ze sposobów, w jaki możesz to zrobić.echo
aby faktycznie uruchomić polecenia.source="source audio file.m4a"; i=0; t1=0:00; for end_time in 1:24 5:40 14:48 19:33 35:11 40:00 46:08 51:58 ''; do i=$((i+1)); t0=$t1 t1=$end_time; echo ffmpeg -i "$source" -acodec copy -ss $t0 ${t1:+-to} $t1 $(printf "track%02d.%s" $i ${source##*.}); done
Następująca linia podzieli plik audio na wiele plików, każdy o czasie trwania 30 sekund.
Zmień 30 (czyli liczbę sekund) na dowolną liczbę, którą chcesz.
źródło
odpowiedź SLM :
nie działałoby dla mnie bez
-map 0
dodanego:źródło
Podane rozwiązanie nie działało dla mnie. Uważam, że jest to spowodowane starszą wersją
ffmpeg
mojego systemu.W każdym razie chciałem zapewnić rozwiązanie, które zadziałało dla mnie. Możesz również dostosować timery, aby umożliwić nakładanie się na dźwięk, jeśli chcesz.
Output file #0 does not contain any stream
ffmpeg -i your_audio_file.mp3 -acodec copy -t 00:00:30 -ss 00:00:00 split_audio_file.mp3
podziel pliki audio na 30-sekundowe przyrosty
źródło