Como dividir um arquivo de áudio em vários?

28

Eu encontrei algo para vídeos, que se parece com isso.

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

Eu tentei usar isso para um arquivo de áudio, mas apenas o primeiro arquivo de áudio continha o áudio real, os outros eram silenciosos, além de que era bom, ele criava um novo arquivo de áudio a cada segundo. Alguém sabe o que modificar para fazer este trabalho com arquivos de áudio, ou outro comando que pode fazer o mesmo?

    
por DisplayName 03.05.2016 / 12:03

5 respostas

41

Isso funcionou para mim quando tentei em um arquivo mp3.

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

Onde -segment_time é a quantidade de tempo que você deseja por cada arquivo (em segundos).

Referências

por 17.05.2016 / 02:56
17

Para dividir um grande arquivo de áudio em um conjunto de faixas com vários comprimentos, você pode usar o seguinte comando:

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

Por exemplo, eu separei um único arquivo .opus da trilha sonora original do Inception em sub-arquivos usando este arquivo de texto contendo start, end, name:

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

Eu escrevi este programa curto awk para ler o arquivo de texto e criar os comandos ffmpeg de cada linha:

{
    # 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)
}

Aqui está uma versão python mais detalhada do programa chamado split.py , onde agora o arquivo de trilha original e o arquivo de texto especificando sub-trilhas são lidos na linha de comando:

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()

Você pode criar facilmente mais e mais complicadas ffmpeg chamadas, modificando o modelo de comando e / ou adicionando mais campos a cada linha do arquivo track_list.

    
por 24.10.2017 / 00:01
2

A linha a seguir dividirá um arquivo de áudio em vários arquivos, cada um com 30 segundos de duração.

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

Altere 30 (que é o número de segundos) para qualquer número desejado.

    
por 21.01.2018 / 01:31
1

resposta do slm :

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

não funcionaria para mim sem o -map 0 adicionado:

ffmpeg -i somefile.mp3 -map 0 -f segment -segment_time 3 -c copy out%03d.mp3
    
por 09.01.2018 / 20:43
0

A solução dada não funcionou para mim. Eu acredito que isso seja devido a uma versão mais antiga do ffmpeg no meu sistema. Em qualquer caso, eu queria fornecer uma solução isso funcionou para mim. Você também pode personalizar os timers para permitir a sobreposição de áudio, se desejar.

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

divida seus arquivos de áudio em incrementos de 30 segundos

    
por 14.01.2018 / 07:27

Tags