Ritaglia MP3 nei primi 30 secondi

Domanda originale

Voglio essere in grado di generare un nuovo file MP3 (completamente valido) da un file MP3 esistente da utilizzare come anteprima – stile try-before-you-buy. Il nuovo file dovrebbe contenere solo i primi n secondi della traccia.

Ora, so che potrei “tagliare il stream” a n secondi (calcolando dal bitrate e dalla dimensione dell’intestazione) quando consegna il file, ma questo è un po ‘sporco e un vero PITA su una traccia VBR. Mi piacerebbe essere in grado di generare un file MP3 corretto.

Qualche idea?

risposte

Sia mp3split che ffmpeg sono entrambe buone soluzioni. Ho scelto ffmpeg perché è comunemente installato sui server linux ed è anche facilmente disponibile per Windows . Ecco alcuni parametri più utili per generare anteprime con ffmpeg

  • -t tagliare dopo un numero specificato di secondi
  • -y sovrascrittura file forzata
  • -ab imposta il bitrate ad es. -ab 96k
  • -ar imposta la frequenza di campionamento, ad esempio -ar 22050 per 22.05kHz
  • -map_meta_data : copia i metadati della traccia da infile a outfile

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

  • -acodec copy

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 nella versione che ho qui almeno). Ciò potrebbe dare ai tuoi clienti una falsa impressione della qualità dei tuoi file audio, e richiede anche più tempo.

Ecco una riga di comando che taglierà a 30 secondi senza transcodifica:

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

L’opzione -acodec dice a ffmpeg di usare lo speciale codec “copia” che non trascrive. È veloce come un fulmine.

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

Se si desidera RIMUOVERE i primi 30 secondi (e conservare il resto), utilizzare questo:

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

provare:

 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 

È in ubuntu repo, quindi basta: sudo apt-get install cutmp3 .

Potresti voler provare Mp3Splt .

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

Solo un pensiero: potresti voler saltare l’inizio della canzone originale. Di ‘, puoi usare un pezzo di 30 secondi a partire dal terzo del brano.
In alcune canzoni, i primi 30 secondi non ti dicono molto in quanto è solo una parte di “messa in scena”, ad esempio il film di Pink Floyd Shine On You Crazy Diamond .

Anche questo comando funziona perfettamente. Ho ritagliato la mia musica da 20 secondi a 40 secondi.

-y: forza il file di output da sovrascrivere.

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

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

Come nota, ho avuto un brutto momento con ffmpeg, mptsplit e mp3cutter su CentOS, tutti con la segnalazione di “Header Missing”. Quindi, ho dovuto andare con la class MP3 e alcune matematiche da tagliare con filesize.

Ho un errore mentre faccio lo stesso

 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 correzione per me era:

 ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3