이와 비슷한 영상을 몇 개 발견했습니다.
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)
}
python
split.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초 단위로 분할