it-swarm.com.de

Wie teile ich eine Audiodatei in mehrere auf?

Ich habe etwas für Videos gefunden, das so aussieht.

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

Ich habe versucht, das für eine Audiodatei zu verwenden, aber nur die erste Audiodatei enthielt tatsächliches Audio, die anderen waren stumm, ansonsten war es gut, es wurde für jede Sekunde eine neue Audiodatei erstellt. Weiß jemand, was geändert werden muss, damit dies mit Audiodateien oder einem anderen Befehl funktioniert, der dasselbe tun kann?

37
DisplayName

Dies funktionierte für mich, als ich es mit einer MP3-Datei versuchte.

$ ffmpeg -i somefile.mp3 -f segment -segment_time 3 -c copy out%03d.mp3

Wo -segment_time ist die gewünschte Zeit pro Datei (in Sekunden).

Verweise

54
slm

Mit dem folgenden Befehl können Sie eine große Audiodatei in mehrere Spuren unterschiedlicher Länge aufteilen:

# -to is the end time of the sub-file
ffmpeg -i BIG_FILE -acodec copy -ss START_TIME -to END_TIME LITTLE_FILE

Zum Beispiel habe ich eine einzelne .opus-Datei des Inception Original Soundtracks mithilfe dieser Textdatei mit Start, Ende und Name in Unterdateien aufgeteilt:

00:00:00 00:01:11 01_half_remembered_dream
00:01:11 00:03:07 02_we_built_our_own_world
00:03:07 00:05:31 03_dream_is_collapsing
00:05:31 00:09:14 04_radical_notion
00:09:14 00:16:58 05_old_souls
00:16:58 00:19:22 06
00:19:22 00:24:16 07_mombasa
00:24:16 00:26:44 08_one_simple_idea
00:26:44 00:31:49 09_dream_within_a_dream
00:31:49 00:41:19 10_waiting_for_a_train
00:41:19 00:44:44 11_paradox
00:44:44 00:49:20 12_time

Ich habe dieses kurze awk Programm geschrieben, um die Textdatei zu lesen und ffmpeg Befehle aus jeder Zeile zu erstellen:

{
    # make ffmpeg command string using sprintf
    cmd = sprintf("ffmpeg -i inception_ost.opus -acodec copy -ss %s -to %s %s.opus", $1, $2, $3)

    # execute ffmpeg command with awk's system function
    system(cmd)
}

Hier ist eine detailliertere python Version des Programms namens split.py, wobei jetzt sowohl die ursprüngliche Track-Datei nd die Textdatei, die die Sub-Tracks angibt, über die Befehlszeile gelesen werden:

import subprocess
import sys


def main():
    """split a music track into specified sub-tracks by calling ffmpeg from the Shell"""

    # check command line for original file and track list file
    if len(sys.argv) != 3:
        print 'usage: split <original_track> <track_list>'
        exit(1)

    # record command line args
    original_track = sys.argv[1]
    track_list = sys.argv[2]

    # create a template of the ffmpeg call in advance
    cmd_string = 'ffmpeg -i {tr} -acodec copy -ss {st} -to {en} {nm}.opus'

    # read each line of the track list and split into start, end, name
    with open(track_list, 'r') as f:
        for line in f:
            # skip comment and empty lines
            if line.startswith('#') or len(line) <= 1:
                continue

            # create command string for a given track
            start, end, name = line.strip().split()
            command = cmd_string.format(tr=original_track, st=start, en=end, nm=name)

            # use subprocess to execute the command in the Shell
            subprocess.call(command, Shell=True)

    return None


if __name__ == '__main__':
    main()

Sie können problemlos immer kompliziertere ffmpeg -Aufrufe erstellen, indem Sie die Befehlsvorlage ändern und/oder jeder Zeile der Datei track_list weitere Felder hinzufügen.

25
isosceleswheel

In der folgenden Zeile wird eine Audiodatei in mehrere Dateien mit einer Dauer von jeweils 30 Sekunden aufgeteilt.

ffmpeg -i file.wav -f segment -segment_time 30 -c copy parts/output%09d.wav

Ändern Sie 30 (dies ist die Anzahl der Sekunden) in eine beliebige Zahl.

3
Stryker

Antwort von slm :

ffmpeg -i somefile.mp3  -f segment -segment_time 3 -c copy out%03d.mp3

würde für mich ohne den -map 0 nicht funktionieren:

ffmpeg -i somefile.mp3 -map 0 -f segment -segment_time 3 -c copy out%03d.mp3
1
Rootless

Die gegebene Lösung hat bei mir nicht funktioniert. Ich glaube, das liegt an einer älteren Version von ffmpeg auf meinem System.
Auf jeden Fall wollte ich eine Lösung bereitstellen, die für mich funktioniert hat. Sie können die Timer auch so anpassen, dass bei Bedarf eine Überlappung der Audiodaten möglich ist.

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

teilen Sie Ihre Audiodateien in Schritten von 30 Sekunden auf

1
tisaconundrum