Eu tenho um arquivo de vídeo mp4 com várias faixas de áudio. Eu gostaria de tirar o resto das faixas e manter apenas uma. Como eu faço isso?
video-editing
tshepang
fonte
fonte
Respostas:
Primeiro, execute
ffmpeg -i file.mp4
para ver quais fluxos existem no seu arquivo. Você deve ver algo assim:Em seguida, corra
ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
para copiar o fluxo de vídeo e o segundo fluxo de áudio paranew_file.mp4
.fonte
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
-c copy
de 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
.Problema relacionado - a remoção de todas as faixas de áudio de um arquivo mp4 pode ser feita da seguinte maneira:
fonte
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 ...?Identifique os números dos fluxos:
Use
-map _file_:_stream_
para selecionar quais fluxos processar e enviarconsulte: https://ffmpeg.org/ffmpeg.html#Advanced-options
fonte
Você pode tentar
avidemux
lidar 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.fonte
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.)
fonte
-vn
ou-an
removerá todas as faixas de vídeo ou áudio. O fornecimento-vn -acodec copy
removerá o vídeo;-an -vcodec copy
irá remover todo o áudio.-vcodec copy
especifica 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.fonte
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
: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:
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).
fonte
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.
fonte
O
ffmpeg
programa foi substituído poravconv
.avconv
tem um uso muito semelhante aoffmpeg
, portanto, todos os comandos neste post podem ser algo como:Siga este link para instalar
avconv
se você estiver no Ubuntu.fonte
O FFMPEG pode ser uma solução útil para você.
fonte