Converter Mp4 para Mp3 com miniatura


8

Sou capaz de converter um mp4 para um mp3 no ffmpeg, mas não sei como adicionaria uma miniatura do vídeo.

Atualmente, temos isso para converter de mp4 para mp3

ffmpeg -i video.mp4 -acodec libmp3lame -metadata title=video -b:a 256 -f input.mp3

Eu precisaria executar isso através do ffmpeg novamente com este comando?

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

ou existe alguma maneira de usar filtros complexos para obter esta é uma corrida?

Eu sei que isso funciona para FLV, mas não parece funcionar para mp4

ffmpeg -i video.flv -i cover.jpg -map 0:a -map 1 -c:v copy -metadata title=video -b:a 256k out.mp3

Deseja realmente que o convertido defina automaticamente a miniatura? Porque, caso contrário, você pode alterá-lo manualmente, mas não tenho certeza se você está depois disso. Se você pode fazer isso com FLV, mas não com MP4, eu faria apenas um script que execute os dois comandos.
RamonRobben

@RamonRobben Eu estou tentando evitar ter que executar ffmpeg duas vezes
nadermx

você pode tentar algo parecido com este ffmpeg -i in.mp4 -i test.png -map 0: 0 -map 1: 0 -c copy -id3v2_version 3 -metadata: s: v title = "Capa do álbum" -metadata: s: v comment = "Cover (Front)" out.mp3 Estou baixando o ffmpeg para começar a testar com ele.
RamonRobben

Respostas:


3

Melhor resposta , com explicação, incorporando sugestões inteligentes de slhck e Mulvya, sem parâmetros essenciais.

ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -b:a 256k -c:v copy -map 0:a:0 -map 1:v:0 output.mp3

ffmpeg ferramenta de manipulação de áudio / vídeo: já selecionada pelo OP, é particularmente adequada para este trabalho.

-i video.mp4 primeiro arquivo de entrada: um vídeo com algum áudio que queremos extrair.

-i cover.jpg segundo arquivo de entrada, uma imagem que queremos exibir quando reproduzimos o arquivo de áudio resultante.

-acodec libmp3lame queremos criar um arquivo .mp3, usando o codificador LAME.

-b:a 256kisso define a taxa de bits da faixa de áudio para 256Kb / s constante. Uma opção mais inteligente seria codificar com uma taxa de bits variável, especificando o parâmetro de qualidade : -q:a 0solicita a qualidade máxima, enquanto -q:a 4muitas vezes representa um bom compromisso entre a qualidade de áudio percebida e a taxa de bits (e, portanto, o tamanho do arquivo).

-c:v copyisso indica que o fluxo de vídeo (a imagem .jpg) não deve ser recodificado, mas deve ser copiado como está. Isso é útil para evitar processamento desnecessário e perda potencial de qualidade ao recodificar em um formato com perda. No nosso caso, sem esse parâmetro, a imagem seria decodificada de .jpg e codificada para .png, que aparentemente é o formato nativo escolhido por padrão. Isso não representaria uma perda de qualidade, já que .png é lossles, mas, com mais freqüência, aumentará o tamanho do arquivo, devido ao fato de que .jpg (com perda) geralmente oferece uma melhor taxa de compactação.

-map 0:a:0 isso seleciona o fluxo a ser usado desde o primeiro (0: arquivo de entrada ): ele deve ser o primeiro :0( a) fluxo de áudio ( ) que ele contém.

-map 1:v:0 isso seleciona o primeiro (:0 ) vídeo ( v) do segundo ( 1:) arquivo de entrada.

output.mp3 o nome desse parâmetro foi astuciosamente escolhido para sugerir que esse deve ser o nome a ser dado ao arquivo de áudio de saída (.mp3) com a imagem incorporada que queremos criar.

Resposta original

Isso cria um arquivo de áudio (.mp3) com uma imagem estática, reunindo um vídeo (.mp4) e uma imagem (.jpg) do meu casamento:

ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -metadata title=video -b:a 256k -map_metadata 0 -map 0:1 -map 1 output.mp3

Consulte a documentação do ffmpeg sobre a seleção de fluxos de entrada com-map , que é a opção relevante aqui.

Primeiro executei o comando com simplicidade -map 0 -map 1e obtive esta informação:

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> png (native))
  Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
  Stream #1:0 -> #0:2 (mjpeg (native) -> png (native))

Assim, eu sabia que queria transmitir 1(áudio aac) a partir do arquivo que possui um número de índice 0, ou seja, o arquivo de vídeo; portanto, teve que ser explicitamente selecionado com -map 0:1 -map 1.


Eu tentei isso, mas ele me dá Stream map '0:1' matches no streams. To ignore this, add a trailing '?' to the map.
nadermx

Execute-o com ´-map 0 -map 1´ e veja quais são os fluxos disponíveis.
simlev

Stream mapping: Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame)) Stream #1:0 -> #0:1 (mjpeg (native) -> png (native))
Nadermx 02/03

11
@nadermx Você pode fazer -map 0:a:0 -map 1:v:0para selecionar os primeiros fluxos de áudio e vídeo do primeiro e do segundo arquivo, respectivamente.
Slhck 03/03

11
Evite codificar a entrada da imagem, especialmente em JPG. -c:v copy.
Gyan

2

você pode usar o vlc media player -

Etapa 1: Abra o VLC e selecione "Mídia". Clique no botão converter / salvar.

Etapa 2: na próxima janela exibida, selecione "adicionar" e escolha o arquivo de vídeo (MP4) a ser convertido.

Passo 3: Em seguida, clique na seta para baixo em "Converter / Salvar" e clique em "Converter".

Etapa 4: na próxima janela exibida, verifique se o botão "Converter" está selecionado. Prossiga para escolher o tipo de arquivo de áudio que você deseja criar. No nosso caso, estamos convertendo o arquivo MP3.

Etapa 5: escolha um destino de saída e pressione “Iniciar”. O VLC começará então a converter.

para adicionar miniaturas, você pode consultar este link (explicado muito bem).

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.