Domanda

Domanda originale

Voglio essere in grado di generare un nuovo file MP3 (completamente valido) da un file MP3 esistente da utilizzare come anteprima: stile prova prima dell'acquisto.Il nuovo file dovrebbe contenere solo il primo N secondi della traccia.

Ora, so che potrei semplicemente "tagliare il flusso" a N secondi (calcolando dal bitrate e dalla dimensione dell'intestazione) durante la consegna del file, ma questo è un po' sporco e una vera PITA su una traccia VBR.Mi piacerebbe essere in grado di generare un file MP3 corretto.

Qualcuno ha qualche idea?

Risposte

Entrambi mp3split E ffmpeg sono entrambe buone soluzioni.Ho scelto ffmpeg poiché è comunemente installato sui server Linux e lo è anche facilmente disponibile per Windows.Ecco alcuni parametri della riga di comando più utili per generare anteprime con ffmpeg

  • -t <seconds> tritare dopo il numero di secondi specificato
  • -y forzare la sovrascrittura del file
  • -ab <bitrate> imposta il bitrate, ad es. -ab 96k
  • -ar <rate Hz> impostare la frequenza di campionamento, ad es. -ar 22050 per 22,05kHz
  • -map_meta_data <outfile>:<infile> copiare i metadati della traccia dal file di ingresso al file di uscita

invece di impostare -ab e -ar, puoi copiare le impostazioni della traccia originale, come suggerisce Tim Farley, con:

  • -acodec copy
È stato utile?

Soluzione

Raccomando anche ffmpeg, ma la riga di comando suggerita da John Boker ha un effetto collaterale non voluto:ricodifica il file al bitrate predefinito (che è 64 kb/s almeno nella versione che ho qui).Ciò potrebbe dare ai tuoi clienti una falsa impressione della qualità dei tuoi file audio e richiederà anche più tempo.

Ecco una riga di comando che verrà suddivisa in 30 secondi senza transcodifica:

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

L'opzione -acodec dice a ffmpeg di utilizzare lo speciale codec "copia" che non transcodifica.È velocissimo.

NOTA:il comando è stato aggiornato in base al commento di Oben Sonne

Altri suggerimenti

Se desideri RIMUOVERE i primi 30 secondi (e mantenere il resto), usa questo:

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

Tentativo:

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

puoi usare mp3cut:

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

È nel repository Ubuntu, quindi semplicemente: sudo apt-get install cutmp3.

Anche questo comando funziona perfettamente.Ho ritagliato i miei file musicali da 20 a 40 secondi.

-y:forzare la sovrascrittura del file di output.

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3

Potresti provare Mp3Splt.

L'ho già usato in un servizio C# che ha semplicemente avvolto il processo win32 mp3splt.exe.Presumo che qualcosa di simile possa essere fatto nel tuo scenario Linux/PHP.

Non l'ho usato per questo scopo specifico, ma scommetto ffmpeg può farlo.

Ho ricevuto un errore mentre facevo la stessa cosa

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

La soluzione per me era:

ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top