it-swarm.it

Come rimuovere una traccia audio da un file video mp4?

Ho un file video mp4 con più tracce audio. Vorrei togliere il resto delle tracce e conservarne solo una. Come faccio a fare questo?

107
tshepang

Prima corsa ffmpeg -i file.mp4 per 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 esegui ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4 per copiare il flusso video e il secondo flusso audio su new_file.mp4.

122
gelraen

Problema correlato: rimozione tutti Le tracce audio da un file mp4 possono essere eseguite in questo modo:

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
106
Greg Marks

Identificare i numeri di flusso:

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

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

8
jgr

Potresti provare avidemux che 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.

4
wag

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

3
Maxim

-vn o -an rimuoverà tutte le tracce video o audio. Fornitura -vn -acodec copy rimuoverà il video; -an -vcodec copy rimuoverà tutto l'audio.

-vcodec copy specifica 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.

1
lots of crisps

Il programma ffmpeg è stato sostituito da avconv. avconv ha 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 avconv se sei su Ubuntu.

0
SmallChess

Utilizzo di avidemux nella riga di comando.

(Nella GUI di Avidemux, come descritto in https://unix.stackexchange.com/a/85834/4319 sopra, basta semplicemente selezionare/deselezionare le tracce audio e salvare il file. (Tutto viene copiato al 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 , sebbene non menzionino il = Python, solo quelli JS (che non ha funzionato per me).