Risposte:
Prima eseguire 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 eseguire 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
.
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
-c copy
di avere flussi identici per audio, video, ma anche sottotitoli: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4
.
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
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 ...?
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
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.
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.)
-vn
o -an
rimuoverà tutte le tracce video o audio. La 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.
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).
Il ffmpeg
programma è 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.
FFMPEG potrebbe essere una soluzione utile per te.
$ man ffmpeg