Recadrer MP3 sur les 30 premières secondes

103

Question originale

Je veux être en mesure de générer un nouveau fichier MP3 (entièrement valide) à partir d'un fichier MP3 existant pour être utilisé comme aperçu - style essayer avant d'acheter. Le nouveau fichier ne doit contenir que les n premières secondes de la piste.

Maintenant, je sais que je pourrais simplement "couper le flux" à n secondes (calcul à partir du débit et de la taille de l'en-tête) lors de la livraison du fichier, mais c'est un peu sale et un vrai PITA sur une piste VBR. J'aimerais pouvoir générer un fichier MP3 approprié.

Quelqu'un a des idées?

Réponses

Les deux mp3splitet ffmpegsont à la fois de bonnes solutions. J'ai choisi ffmpeg car il est couramment installé sur les serveurs Linux et est également facilement disponible pour Windows . Voici d'autres bons paramètres de ligne de commande pour générer des aperçus avec ffmpeg

  • -t <seconds> hacher après un nombre de secondes spécifié
  • -y forcer l'écrasement du fichier
  • -ab <bitrate>définir le débit binaire, par exemple -ab 96k
  • -ar <rate Hz>régler la fréquence d'échantillonnage, par exemple -ar 22050 pour 22,05 kHz
  • -map_meta_data <outfile>:<infile> copier les métadonnées de piste d'un fichier à l'autre

au lieu de définir -ab et -ar, vous pouvez copier les paramètres de piste d'origine, comme le suggère Tim Farley, avec:

  • -acodec copy
Cheekysoft
la source
Je ne l'ai pas utilisé dans ce but précis, mais je parie que ffmpeg peut le faire.
grapefrukt le
Juste une pensée: vous voudrez peut-être sauter le début de la chanson originale. Dites, vous pouvez utiliser un morceau de 30 secondes à partir du troisième de la chanson. Dans certaines chansons, les 30 premières secondes ne vous dit pas grand - chose car il est juste une « mise en place de la scène » partie - par exemple Pink Floyd de Shine On You Crazy diamant .
Tomas Sedovic le
Juste comme note, j'ai eu un très mauvais moment avec ffmpeg, mptsplit et mp3cutter sur CentOS, tous rapportant "Header Missing". Donc, je devais aller avec MP3 Class et quelques maths pour couper par taille de fichier.
Gardner
Je ne savais pas que ffmpeg pouvait faire ça. Je vous remercie.
Sridhar Sarnobat

Réponses:

142

Je recommande également ffmpeg, mais la ligne de commande suggérée par John Boker a un effet secondaire involontaire: elle réencode le fichier au débit par défaut (qui est de 64 kb / s dans la version que j'ai ici au moins). Cela peut donner à vos clients une fausse impression de la qualité de vos fichiers audio, et cela prend également plus de temps.

Voici une ligne de commande qui coupera à 30 secondes sans transcodage:

ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3

Le commutateur -acodec indique à ffmpeg d'utiliser le codec spécial "copie" qui ne transcode pas. C'est rapide comme l'éclair.

REMARQUE: la commande a été mise à jour en fonction du commentaire d'Oben Sonne

Tim Farley
la source
21
Les ffmpegversions récentes (au moins depuis la 0.10.6) interprètent les options différemment en fonction de la position. Les options liées à l'entrée doivent apparaître avant -i ...et les options liées à la sortie doivent apparaître après -i .... Ce moyen ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3serait maintenant la bonne réponse.
Oben Sonne
Puis-je extraire 30 secondes audio à partir d'un fichier d'entrée de 15 secondes, cela signifie que si le fichier râpe puis 30 secondes, puis extraire 30 secondes, mais si le fichier 15 secondes, répéter et extraire 30 secondes complètes.
Girish Patidar
6
Si vous souhaitez définir l'heure de début (décalage), vous pouvez utiliser -ss hh:mm:ss[.xxx]. Exemple: ffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3coupera à 30 secondes à partir de 00h 00m 15s 500ms .
patryk.beza
1
pour une raison quelconque, la commande ci-dessus n'a pas fonctionné pour moi, mais si je l'ai changée en: ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3alors cela fonctionne parfaitement
Krishnendu
Pour moi, les options -t et -s doivent être utilisées séparément dans 2 commandes. Mais ça marche, merci!
Yan King Yin
57

Si vous souhaitez SUPPRIMER les 30 premières secondes (et conserver le reste), utilisez ceci:

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
le.jxc
la source
18

essayer:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
John Boker
la source
12

Cette commande fonctionne également parfaitement. J'ai rogné mes fichiers musicaux de 20 à 40 secondes.

-y: force l'écrasement du fichier de sortie.

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
Rahul Chauhan
la source
1
Parfait! Merci d'avoir partagé ça.
HerrimanCoder
11

vous pouvez utiliser mp3cut:

cutmp3 -i foo.mp3 -O 30s.mp3 -a 0:00.0 -b 0:30.0

Il est dans ubuntu repo, si juste: sudo apt-get install cutmp3.

Michał Šrajer
la source
6

Vous voudrez peut-être essayer Mp3Splt .

Je l'ai déjà utilisé dans un service C # qui enveloppait simplement le processus win32 mp3splt.exe. Je suppose que quelque chose de similaire pourrait être fait dans votre scénario Linux / PHP.

Ryan Duffield
la source
2
MP3Split utilisé avec succès pour la coupe mp3
Freshblood
0

J'ai une erreur en faisant de même

Invalid audio stream. Exactly one MP3 audio stream is required.
Could not write header for output file #0 (incorrect codec parameters     ?): Invalid argumentStream mapping:

Le correctif pour moi était:

ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3
Mithun Cheriyath
la source
0

medipack est une application de ligne de commande très simple en guise de wrapper ffmpeg.

vous pouvez découper votre vidéo à l'aide de ces commandes:

medipack trim input.mp3 -s 00:00 -e 00:30 -o output.mp3
medipack trim input.mp3 -s 00:00 -t 00:30 -o output.mp3

vous pouvez afficher les options de la sous-commande trim comme:

srb@srb-pc:$ medipack trim -h
usage: medipack trim [-h] [-s START] [-e END | -t TIME] [-o OUTPUT] [inp]

positional arguments:
  inp                   input video file ex: input.mp4

optional arguments:
  -h, --help            show this help message and exit
  -s START, --start START
                        start time for cuting in format hh:mm:ss or mm:ss
  -e END, --end END     end time for cuting in format hh:mm:ss or mm:ss
  -t TIME, --time TIME  clip duration in format hh:mm:ss or mm:ss
  -o OUTPUT, --output OUTPUT

vous pouvez également explorer d'autres options en utilisant medipack -h

srb@srb-pc:$ medipack --help
usage: medipack.py [-h] [-v] {trim,crop,resize,extract} ...

positional arguments:
  {trim,crop,resize,extract}

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         Display version number

vous pouvez visiter https://github.com/srbcheema1/medipack et consulter des exemples dans README.

srbcheema1
la source
1
Quel est l'avantage de ce wrapper? Parce que cela ne semble pas plus simple queffmpeg -i input -ss <start time> -to <end time> output
llogan
J'ai également ajouté une option -tqui peut être utilisée alternativement, -ece qui signifie que je suppose que je devais couper la prochaine vidéo de 4 minutes 36 secondes, je n'ai pas à m'inquiéter en ajoutant ces temps manuellement, j'ai également fourni une facilité similaire lors du recadrage des vidéos, voir les exemples dans README, vous comprendrez pourquoi sa CLI est plus facile que le simple ffmpeg. Je suis d'accord que ce n'est pas si puissant mais pour une personne normale, c'est un outil pratique.
srbcheema1
2
ffmpega l' -tooption qui est ce que vous faites -tprobablement.
llogan
Qu'en est-il de l'option du pourcentage d'âge de la culture mentionnée dans le README sous la sous-option de la culture, est-ce également disponible ?? Je viens de créer cet outil à la demande par quelqu'un qui m'a payé quelques dollars, car ils ne veulent pas s'inquiéter de la grande liste d'options cli, juste ils voulaient un outil qui pourrait effectuer certaines tâches avec facilité, même s'il y a toutes les options dans ffmpeg, mais il serait toujours difficile pour noob de les trouver tous dans sa section d'aide en ligne de commande. cet outil a une section d'aide simple facile à comprendre pour un noob
srbcheema1
Bien sûr,-vf "crop=iw*0.1:ih*0.1:0:0"
llogan