こんな感じの動画を見つけました。
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
それをオーディオファイルに使用してみましたが、最初のオーディオファイルだけが実際のオーディオを含み、他は無音でした。それ以外は、毎秒新しいオーディオファイルを作成しました。誰かがこれをオーディオファイルで機能させるために何を変更するべきか、または同じことを行うことができる別のコマンドを知っていますか?
これは、mp3ファイルで試したときにうまくいきました。
$ ffmpeg -i somefile.mp3 -f segment -segment_time 3 -c copy out%03d.mp3
どこ -segment_time
は、ファイルごとに必要な時間(秒単位)です。
大きなオーディオファイルをさまざまな長さのトラックのセットに分割するには、次のコマンドを使用できます。
# -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)
}
これはsplit.py
と呼ばれるプログラムのより詳細なpython
バージョンです。ここで、元のトラックファイルおよびサブトラックを指定するテキストファイルがコマンドラインから読み込まれます。 :
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()
コマンドテンプレートを変更したり、track_listファイルの各行にフィールドを追加したりすることで、より複雑なffmpeg
呼び出しを簡単に作成できます。
次の行は、オーディオファイルを複数のファイルに分割します。各ファイルの継続時間は30秒です。
ffmpeg -i file.wav -f segment -segment_time 30 -c copy parts/output%09d.wav
30(秒数)を任意の数値に変更します。
slmの答え :
ffmpeg -i somefile.mp3 -f segment -segment_time 3 -c copy out%03d.mp3
-map 0
を追加しないと機能しません。
ffmpeg -i somefile.mp3 -map 0 -f segment -segment_time 3 -c copy out%03d.mp3
与えられた解決策は私にはうまくいきませんでした。これは私のシステムのffmpeg
の古いバージョンが原因であると思います。
いずれにせよ、私は solution を提供したかったのですが、それは私にとってうまくいきました。必要に応じて、オーディオを重ねて表示できるようにタイマーをカスタマイズすることもできます。
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秒単位で分割する