Come rimuovere una traccia audio da un file video mp4?


Risposte:


111

Prima eseguire ffmpeg -i file.mp4per vedere quali flussi esistono nel tuo file. Dovresti vedere qualcosa del genere:

Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr, 23.98 tbn, 23.98 tbc
Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s

Quindi eseguire ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4per copiare il flusso video e il secondo flusso audio su new_file.mp4.


3
Su Windows questo comando ha dato l'errore Option map (set input stream mapping) cannot be applied to input file file.mp4 new_file.mp4 -- you are trying to apply an input option to an output file or vice versa. Move this option before the file it belongs to.: per risolverlo è sufficiente modificare l'ordine degli argomenti in questo modo:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
MrLore

Stesso errore di @MrLore su OS X.
Oskar Persson,

1
È lo stesso su Ubuntu!
Tommaso,

Funziona anche per il formato MKV
user3405291

1
È possibile utilizzare l'opzione più generico -c copydi avere flussi identici per audio, video, ma anche sottotitoli: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4.
Futal,

97

Problema correlato: la rimozione di tutte le tracce audio da un file mp4 può essere eseguita in questo modo:

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4

1
Questo mi dà l'errore The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.Ma ho aggiunto quelle bandiere ed è sempre lo stesso ...?
poshaughnessy


Il commento di Re poshaughnessy: sembrano esserci alcune informazioni qui: stackoverflow.com/questions/32931685/… La discussione suggerisce che le recenti versioni di ffmpeg non presentano il problema "aac sperimentale". Come regola generale, aiuta a diagnosticare il tuo problema se dichiari la versione del software che stai utilizzando e l'esatta sintassi del comando (dopo aver aggiunto i flag) che ha dato l'errore (vedi la risposta di Freeseek loc. Cit. ). In questo caso specifico, possono essere utili anche le informazioni video dal file di input.
Greg Marks,

8

Identificare i numeri di flusso:

$ ffmpeg -i in.mp4
   ...
   Stream #0:0: Video: ...
   Stream #0:1: Audio: ...
   Stream #0:2: Audio: ...

Utilizzare -map _file_:_stream_per selezionare quali flussi elaborare ed emettere

$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4

vedi: https://ffmpeg.org/ffmpeg.html#Advanced-options


4

Potresti provare avidemuxche gestisce internamente un solo file audio (e quindi ti costringe a selezionare una traccia specifica). Non l'ho mai provato con .mp4 ma funziona con altri formati.


Non funziona così bene. Forse è un bug, ma l'audio ritorna alterato, anche se fa il lavoro (rimuove il resto delle tracce audio).
Tshepang,

3

Ho usato più volte Avidemux (GUI) e ffmpeg (console).

In Avidemux, scegli "Audio" -> "Seleziona tracce" nel menu principale; quindi salva il tuo video come nuovo file.

È interessante notare che in alcuni casi Avidemux ha prodotto un output "migliore" di ffmpeg.

per ogni evenienza, Avidemux e ffmpeg sono nel repository standard di Fedora Linux. (Sono sicuro che sono standard anche in altre versioni di Linux.)


1

-vno -anrimuoverà tutte le tracce video o audio. La fornitura -vn -acodec copyrimuoverà il video; -an -vcodec copyrimuoverà tutto l'audio.

-vcodec copyspecifica che ffmpeg deve eseguire una copia diretta della traccia video esistente (e non eseguire alcuna elaborazione / codifica). Se non lo specifichi, funzionerà comunque ma ffmpeg potrebbe ricodificare la traccia video esistente e l'operazione utilizzerà più CPU e potrebbe richiedere molto più tempo.


0

Utilizzo di avidemux nella riga di comando.

(Nella GUI di Avidemux, come descritto in https://unix.stackexchange.com/a/85834/4319 sopra, è sufficiente selezionare / deselezionare le tracce audio e salvare il file. (Tutto viene copiato nel nuovo AVI.))

Ho esaminato il tipo di progetti salvati come progetti SpiderMonkey o TinyPy per le mie azioni, e ho scoperto che il progetto SpiderMonkey (JavaScript) non ha le azioni di selezione della traccia audio di cui avevo bisogno, ma il progetto TinyPy (Python) aveva loro.

Ho rimosso tutto ciò non correlato (una dozzina di righe non necessarie), e questo è ciò che ho ottenuto nel mio some_series.py:

#PY  <- Needed to identify #
#--automatically built--

adm = Avidemux()

adm.audioClearTracks()
adm.audioAddTrack(1)

Lascia la traccia 1, ma lascia la traccia 0.

Quindi ho eseguito una conversione batch di molti file con un comando come questo:

for f in *.avi; do avidemux3_cli --nogui --load "$f" --run ../some_series.py --save ../some_series/"${f%%.rus.eng.avi}".eng.avi --quit; done

Copia tutto, ma elimina tutto tranne la traccia audio necessaria.

Il modo di eseguire avidemux dalla riga di comando è stato appreso da me da https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing , anche se non menzionano gli script Python, solo quelli JS ( che non ha funzionato per me).


-1

Se non ti dispiace che il programma sia una GUI, con l' editor video di Blender puoi farlo e molto altro.


-2

Il ffmpegprogramma è stato sostituito da avconv. avconvha un utilizzo molto simile a ffmpeg, quindi tutti i comandi in questo post possono essere simili a:

avconv <old ffpmeg command line options>

Segui questo link per installare avconvse sei su Ubuntu.


-3

FFMPEG potrebbe essere una soluzione utile per te.

$ man ffmpeg

Ho dato una breve occhiata ed è piuttosto denso. Ho cercato "audio" e "traccia audio" e nulla sembrava ovvio.
Tshepang,

@Tshepang, "track" è ambiguo, motivo per cui FFmpeg preferisce una terminologia più precisa. FFmpeg considera l'audio in "flussi", ciascuno comprendente uno o più "canali". AFAICT, ogni canale è mono, con lo stream che descrive a quale uscita deve essere inviato (panned) di default. Ad esempio, un flusso stereo è costituito da due canali, uno inviato all'uscita sinistra della scheda audio per impostazione predefinita e l'altro inviato all'uscita destra della scheda audio per impostazione predefinita.
sampablokuper,
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.