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
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