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.