Ritaglia MP3 ai primi 30 secondi


103

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 i primi n secondi della traccia.

Ora, so che potrei semplicemente "tagliare lo stream" a n secondi (calcolando dal bitrate e dalla dimensione dell'intestazione) durante la consegna del 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.

Qualcuno ha idee?

risposte

Entrambi mp3splite ffmpegsono entrambe buone soluzioni. Ho scelto ffmpeg in quanto è comunemente installato sui server Linux ed è facilmente disponibile anche per Windows . Ecco alcuni altri buoni parametri della riga di comando per la generazione di anteprime con ffmpeg

  • -t <seconds> tagliare dopo il numero di secondi specificato
  • -y forza la sovrascrittura del file
  • -ab <bitrate>imposta il bitrate ad esempio -ab 96k
  • -ar <rate Hz>imposta la frequenza di campionamento, ad esempio -ar 22050 per 22,05 kHz
  • -map_meta_data <outfile>:<infile> 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

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

Solo un pensiero: potresti voler saltare l'inizio della canzone originale. Dì, puoi usare un pezzo di 30 secondi a partire dal terzo della canzone. In alcune canzoni, i primi 30 secondi non ti dice quanto è solo una "impostazione della scena" parte - per esempio Pink Floyd s' Shine On You Crazy diamante .
Tomas Sedovic

Come nota, mi sono divertito molto con ffmpeg, mptsplit e mp3cutter su CentOS, tutti riportando "Header Missing". Quindi, ho dovuto scegliere MP3 Class e alcuni calcoli matematici da tagliare in base alla dimensione del file.
Gardner

Non sapevo che ffmpeg potesse farlo. Grazie.
Sridhar Sarnobat

Risposte:


142

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

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 usare lo speciale codec "copy" che non esegue la transcodifica. È velocissimo.

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


21
Le ffmpegversioni recenti (almeno dalla 0.10.6) interpretano le opzioni in modo diverso in base alla posizione. Le opzioni relative -i ...all'input devono apparire prima e le opzioni relative all'output devono apparire dopo -i .... Ciò significa ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3che ora sarebbe la risposta corretta.
Oben Sonne

Posso estrarre 30 secondi di audio da un file di input di 15 secondi, significa che se il file è più grande di 30 secondi, quindi estrai 30 secondi, ma se il file è di 15 secondi, ripeti ed estrai 30 secondi.
Girish Patidar

6
Se si desidera impostare l'ora di inizio (offset) è possibile utilizzare -ss hh:mm:ss[.xxx]. Esempio: ffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3sezionerà a 30 secondi a partire da 00h 00m 15s 500ms .
patryk.beza

1
per qualche motivo il comando sopra non ha funzionato per me, ma se l'ho cambiato in: ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3allora funziona perfettamente
Krishnendu

Per me le opzioni -t e -s devono essere utilizzate separatamente in 2 comandi. Ma funziona, grazie!
Yan King Yin

57

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

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


12

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

-y: forza la sovrascrittura del file di output.

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

1
Perfetto! Grazie per aver condiviso questo.
HerrimanCoder

11

puoi usare mp3cut:

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

E 'in ubuntu pronti contro termine, quindi basta: sudo apt-get install cutmp3.


6

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 potrebbe essere fatto nel tuo scenario Linux / PHP.


2
MP3Split usato con successo per il taglio mp3
Freshblood

0

Ho ricevuto un errore mentre facevo 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 soluzione per me era:

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

0

medipack è un'app da riga di comando molto semplice come wrapper ffmpeg.

puoi ottenere il taglio del tuo video usando questi comandi:

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

puoi visualizzare le opzioni del sottocomando trim come:

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

potresti anche esplorare altre opzioni usando 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

puoi visitare https://github.com/srbcheema1/medipack ed esempi di checkout in README.


1
Qual è il vantaggio di questo wrapper? Perché non sembra più semplice diffmpeg -i input -ss <start time> -to <end time> output
Llogan

Ho anche aggiunto un'opzione -tche può essere utilizzata in alternativa al -eche significa supporre che dovessi tagliare il prossimo video di 4 minuti e 36 secondi, non devo preoccuparmi di aggiungere quei tempi manualmente, inoltre ho fornito una facilità simile durante il ritaglio dei video, vedere gli esempi in README capirai perché la sua CLI è più facile del semplice ffmpeg. Sono d'accordo che non è così potente, ma per una persona normale è uno strumento utile.
srbcheema1

2
ffmpegha l' -toopzione che è ciò che -tprobabilmente fa il tuo .
llogan

che dire dell'opzione crop% age menzionata in README nella sotto-opzione crop, è anche disponibile ?? Ho appena creato quello strumento su richiesta da qualcuno che mi ha pagato pochi dollari, poiché non vogliono preoccuparsi dell'ampio elenco di opzioni cli, volevano solo uno strumento che potesse svolgere determinate attività con facilità, anche se ci sono tutte le opzioni in ffmpeg, ma sarebbe comunque difficile per noob trovarli tutti nella sezione della guida della riga di comando. questo strumento ha una semplice sezione di aiuto facile da capire per un noob
srbcheema1

Certo,-vf "crop=iw*0.1:ih*0.1:0:0"
llogan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.