오디오 파일을 여러 개로 분할하는 방법은 무엇입니까?

오디오 파일을 여러 개로 분할하는 방법은 무엇입니까?

이와 비슷한 영상을 몇 개 발견했습니다.

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

오디오 파일과 함께 사용해 보았지만 첫 번째 오디오 파일에만 실제 오디오가 포함되어 있고 나머지는 무음입니다. 그 외에는 괜찮습니다. 매초마다 새 오디오 파일을 생성합니다. 오디오 파일이나 동일한 작업을 수행하는 다른 명령과 작동하도록 수정해야 할 사항을 아는 사람이 있습니까?

답변1

mp3 파일로 시도했을 때 이것은 나에게 효과적이었습니다.

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

-segment_time각 파일에 필요한 시간(초)은 어디에 있습니까?

인용하다

답변2

대용량 오디오 파일을 길이가 다른 트랙 세트로 분할하려면 다음 명령을 사용할 수 있습니다.

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

예를 들어, Inception Original Soundtrack의 단일 .opus 파일을 시작, 끝, 이름이 포함된 텍스트 파일을 사용하여 하위 파일로 나누었습니다.

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

나는 awk텍스트 파일을 읽고 ffmpeg각 줄에서 명령을 생성하기 위해 다음과 같은 짧은 프로그램을 작성했습니다.

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

pythonsplit.py여기에 원본 트랙 파일이 포함된 보다 자세한 버전의 프로그램이 있습니다 .그리고명령줄에서 지정된 하위 트랙에 대한 텍스트 파일을 읽습니다.

import sys
import subprocess


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

ffmpeg명령 템플릿을 수정하거나 track_list 파일의 각 줄에 더 많은 필드를 추가하여 점점 더 복잡한 호출을 쉽게 구축할 수 있습니다.

답변3

다음 줄은 오디오 파일을 각각 30초 길이의 여러 파일로 분할합니다.

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

30(초)을 원하는 숫자로 변경합니다.

답변4

주어진 솔루션이 나에게 적합하지 않습니다. ffmpeg내 시스템의 이전 버전 때문인 것 같습니다 .
어쨌든 나는 하나를 제공하고 싶다.해결책이것은 나에게 효과적입니다. 원하는 경우 타이머를 맞춤설정하여 오디오가 겹치도록 할 수도 있습니다.

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

오디오 파일을 30초 단위로 분할

관련 정보