J'ai trouvé quelque chose pour les vidéos, qui ressemble à ceci.
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
J'ai essayé de l'utiliser pour un fichier audio, mais seul le premier fichier audio contenait de l'audio réel, les autres étaient silencieux, à part que c'était bon, il faisait un nouveau fichier audio pour chaque seconde. Quelqu'un sait-il quoi modifier pour que cela fonctionne avec des fichiers audio, ou une autre commande qui peut faire la même chose?
Cela a fonctionné pour moi quand je l'ai essayé sur un fichier mp3.
$ ffmpeg -i somefile.mp3 -f segment -segment_time 3 -c copy out%03d.mp3
Où -segment_time
est la durée souhaitée pour chaque fichier (en secondes).
Pour diviser un gros fichier audio en un ensemble de pistes de longueurs variables, vous pouvez utiliser la commande suivante:
# -to is the end time of the sub-file
ffmpeg -i BIG_FILE -acodec copy -ss START_TIME -to END_TIME LITTLE_FILE
Par exemple, j'ai divisé un seul fichier .opus de la bande originale Inception en sous-fichiers en utilisant ce fichier texte contenant début, fin, nom:
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
J'ai écrit ce court programme awk
pour lire le fichier texte et créer des commandes ffmpeg
à partir de chaque ligne:
{
# 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)
}
Voici une version python
plus détaillée du programme appelé split.py
, où maintenant le fichier de piste d'origine et le fichier texte spécifiant les sous-pistes est lu à partir de la ligne de commande:
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()
Vous pouvez facilement créer des appels ffmpeg
de plus en plus compliqués en modifiant le modèle de commande et/ou en ajoutant plus de champs à chaque ligne du fichier track_list.
La ligne suivante divisera un fichier audio en plusieurs fichiers d'une durée de 30 secondes chacun.
ffmpeg -i file.wav -f segment -segment_time 30 -c copy parts/output%09d.wav
Remplacez 30 (qui est le nombre de secondes) par le nombre de votre choix.
ffmpeg -i somefile.mp3 -f segment -segment_time 3 -c copy out%03d.mp3
ne fonctionnerait pas pour moi sans le -map 0
ajoutée:
ffmpeg -i somefile.mp3 -map 0 -f segment -segment_time 3 -c copy out%03d.mp3
La solution donnée n'a pas fonctionné pour moi. Je pense que cela est dû à une ancienne version de ffmpeg
sur mon système.
Dans tous les cas, je voulais fournir une solution qui fonctionnait pour moi. Vous pouvez également personnaliser les minuteries afin de permettre le chevauchement de l'audio si vous le souhaitez.
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
divisez vos fichiers audio en incréments de 30 secondes