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é d'utiliser cela pour un fichier audio, mais seul le premier fichier audio contenait de l'audio réel, les autres étaient silencieux. À part ça, c'était bon, cela créait un nouveau fichier audio à chaque seconde. Est-ce que quelqu'un sait quoi modifier pour que cela fonctionne avec des fichiers audio, ou une autre commande qui peut faire la même chose?
Réponses:
Cela a fonctionné pour moi lorsque je l'ai essayé sur un fichier mp3.
Où
-segment_time
est la quantité de temps que vous souhaitez pour chaque fichier (en secondes).Les références
la source
mp3
parm4a
Pour diviser un gros fichier audio en un ensemble de pistes de différentes longueurs, vous pouvez utiliser la commande suivante:
Par exemple, j'ai scindé un fichier .opus unique de Inception Original Soundtrack en sous-fichiers à l'aide de ce fichier texte contenant les noms de début, de fin et de nom:
J'ai écrit ce court
awk
programme pour lire le fichier texte et créer desffmpeg
commandes à partir de chaque ligne:Voici une
python
version plus détaillée du programme appeléesplit.py
, où le fichier de piste original et le fichier texte spécifiant des sous-pistes sont lus à partir de la ligne de commande:Vous pouvez facilement créer des
ffmpeg
appels de plus en plus complexes en modifiant le modèle de commande et / ou en ajoutant davantage de champs à chaque ligne du fichier track_list.la source
subprocess.call(command)
est l’ entréepython
analogiquesystem(command)
inawk
, qui vous permet d’envoyer desffmpeg
commandes au shell. J'ai édité mon message pour inclure unepython
implémentation flexible illustrant une façon de procéder.echo
pour exécuter les commandes.source="source audio file.m4a"; i=0; t1=0:00; for end_time in 1:24 5:40 14:48 19:33 35:11 40:00 46:08 51:58 ''; do i=$((i+1)); t0=$t1 t1=$end_time; echo ffmpeg -i "$source" -acodec copy -ss $t0 ${t1:+-to} $t1 $(printf "track%02d.%s" $i ${source##*.}); done
La ligne suivante divisera un fichier audio en plusieurs fichiers d'une durée de 30 secondes chacun.
Remplacez 30 (le nombre de secondes) par le nombre de votre choix.
la source
la réponse de slm :
ne fonctionnerait pas pour moi sans l'
-map 0
ajout:la source
La solution proposée n'a pas fonctionné pour moi. Je pense que cela est dû à une ancienne version de
ffmpeg
mon système.Dans tous les cas, je voulais proposer une solution qui me convienne. Vous pouvez également personnaliser les minuteries de manière à 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
la source