Como remover uma faixa de áudio de um arquivo de vídeo mp4?


Respostas:


111

Primeiro, execute ffmpeg -i file.mp4para ver quais fluxos existem no seu arquivo. Você deve ver algo assim:

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

Em seguida, corra ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4para copiar o fluxo de vídeo e o segundo fluxo de áudio para new_file.mp4.


3
No Windows, este comando deu o erro 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.: para corrigi-lo, basta alterar a ordem dos argumentos da seguinte maneira:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
MrLore

Mesmo erro que @MrLore no OS X.
Oskar Persson

1
É o mesmo no Ubuntu!
Tommaso

Funciona para o formato MKV também
user3405291

1
Você pode usar a opção mais genérico -c copyde ter fluxos idênticos para áudio, vídeo, mas também legendas: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4.
Futal 9/09/17

97

Problema relacionado - a remoção de todas as faixas de áudio de um arquivo mp4 pode ser feita da seguinte maneira:

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

1
Isso me dá o erro The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.Mas eu adicionei essas bandeiras e ainda é o mesmo ...?
poshaughnessy


Re-comentando o comentário: parece haver algumas informações aqui: stackoverflow.com/questions/32931685/… A discussão sugere que versões recentes do ffmpeg não enfrentam o problema "aac experimental". Como regra geral, ajuda a diagnosticar o seu problema se você indicar a versão do software que está usando e a sintaxe exata do comando (depois de adicionar os sinalizadores) que causou o erro (cf. resposta da freeseek loc. Cit. ) Nesse caso específico, as informações de vídeo do arquivo de entrada também podem ser úteis.
Greg Marks em

8

Identifique os números dos fluxos:

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

Use -map _file_:_stream_para selecionar quais fluxos processar e enviar

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

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


4

Você pode tentar avidemuxlidar com apenas um arquivo de áudio internamente (e, portanto, forçar você a selecionar uma faixa específica). Eu nunca tentei com .mp4, mas funciona com outros formatos.


Não funciona tão bem. Talvez seja um erro, mas o áudio volta distorcido, embora ele faça o trabalho (remova o restante das faixas de áudio).
tshepang

3

Eu usei o Avidemux (GUI) várias vezes e o ffmpeg (console).

No Avidemux, você escolhe "Áudio" -> "Selecionar faixas" no menu principal; salve o vídeo como um novo arquivo.

Curiosamente, em alguns casos, o Avidemux produziu uma saída "melhor" que o ffmpeg.

por precaução, o Avidemux e o ffmpeg estão no repositório padrão do Fedora Linux. (Tenho certeza de que eles também são padrão em outros tipos de Linux.)


1

-vnou -anremoverá todas as faixas de vídeo ou áudio. O fornecimento -vn -acodec copyremoverá o vídeo; -an -vcodec copyirá remover todo o áudio.

-vcodec copyespecifica que o ffmpeg deve copiar diretamente a faixa de vídeo existente (e não processar / codificar). Se você não especificá-lo, ele ainda funcionará, mas o ffmpeg poderá recodificar a faixa de vídeo existente e a operação usará mais CPU e poderá demorar consideravelmente mais.


0

Usando o avidemux na linha de comando.

(Na GUI do Avidemux, conforme descrito em https://unix.stackexchange.com/a/85834/4319 acima, basta selecionar / desmarcar as faixas de áudio e salvar o arquivo. (Tudo é copiado para o novo AVI.)

Examinei que tipo de projetos são salvos como projetos SpiderMonkey ou TinyPy para minhas ações, e o projeto SpiderMonkey (JavaScript) não possui as ações de seleção de faixa de áudio que eu precisava, mas o projeto TinyPy (Python) tinha eles.

Eu removi tudo não relacionado (uma dúzia de linhas desnecessárias), e é isso que eu tenho no meu some_series.py:

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

adm = Avidemux()

adm.audioClearTracks()
adm.audioAddTrack(1)

Ele sai da faixa 1, mas descarta a faixa 0.

Em seguida, executei uma conversão em lote de muitos arquivos com um comando como este:

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

Ele copia tudo, mas descarta tudo, exceto a faixa de áudio necessária.

A maneira de executar o avidemux a partir da linha de comando foi aprendida por mim em https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing , embora eles não mencionem os scripts Python, apenas os scripts JS ( o que não funcionou para mim).


-1

Se você não se importa que o programa seja GUI, com o editor de vídeo do Blender , você pode fazer isso e muito mais.


-2

O ffmpegprograma foi substituído por avconv. avconvtem um uso muito semelhante ao ffmpeg, portanto, todos os comandos neste post podem ser algo como:

avconv <old ffpmeg command line options>

Siga este link para instalar avconvse você estiver no Ubuntu.


-3

O FFMPEG pode ser uma solução útil para você.

$ man ffmpeg

Dei uma breve olhada e é bastante densa. Eu procurei por "audio" e "audio track" e nada parecia óbvio.
tshepang

@Tshepang, "track" é ambíguo, e é provavelmente por isso que o FFmpeg prefere terminologia mais precisa. O FFmpeg considera o áudio em "fluxos", cada um compreendendo um ou mais "canais". AFAICT, cada canal é mono, com o fluxo descrevendo para quais saídas ele deve ser enviado (em pan) por padrão. Por exemplo, um fluxo estéreo consiste em dois canais, um enviado à saída esquerda da placa de som por padrão e o outro enviado à saída direita da placa de som por padrão.
Sampablokuper 02/08/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.