FFMPEG converte flv para mp4 sem perder qualidade [duplicado]

47

Atualmente, estou convertendo arquivos flash .flv em arquivos .webm e .mp4 para serem usados com um player de vídeo HTML5.

_

Eu uso este comando ffmpeg para WEBM: ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis filename.webm que funciona muito bem e o tamanho do arquivo permanece relativamente o mesmo (imporatant).

_

Para MP4, estou usando o seguinte: ffmpeg -i filename.flv -sameq -ar 22050 filename.mp4

Converte para .mp4 bem e previne qualquer perda de qualidade, mas o tamanho do arquivo quase triplica em tamanho.

Qual fórmula do ffmpeg poderia ser usada para converter para MP4 sem perder muita qualidade e prevenir um tamanho de arquivo muito maior?

    
por Chad Whitaker 28.10.2011 / 22:22

6 respostas

45

ffmpeg -i filename.flv -c:v libx264 -crf 19 -strict experimental filename.mp4

Você deve especificar o codec de vídeo usado. Em seu comando, você não especifica -vcodec ou -c:v , então o ffmpeg usa o codec padrão para MP4 ( mpeg4 ) que não tem uma eficiência de compactação muito boa. Tente usar libx264 e configure o CRF, que é o nível de qualidade (menor é melhor, o padrão é 23 e os valores sãos estão entre 18 e 28).

A codificação com libx264 é um pouco complexa, então você deve procurar o guia de codificação H.264 .

Você também precisa especificar -strict experimental caso contrário você pode obter: "O codificador 'aac' é experimental, mas os codecs experimentais não estão ativados, adicione '-strict -2' se você quiser usá-lo."

    
por 30.10.2011 / 09:03
37

Este comando só altera o contêiner sem reencodificar

ffmpeg -i input.flv -codec copy output.mp4
    
por 10.03.2014 / 14:44
3

avconv e ffmpeg são essencialmente a mesma coisa. [a partir de MUITO recentemente há ALGUMAS divergências, mas não há muito o que escrever se você compilar seu próprio ffmpeg [o fornecido em repositórios do Ubuntu, por exemplo, é OLD e sofre com o tamanho do vídeo não é um negócio blá-blá-blá [basicamente tenta dizer a você que o vídeo tem proporções erradas], mas se você se incomodar em ler o guia de compilação ffmpeg e compilá-lo do git, ele não tem nenhum dos problemas das versões mais antigas que aparecem na maioria dos sistemas operacionais. o aviso de depreciação referindo-se a avconv está dizendo que eles criaram um novo utilitário para tentar substituir ffmpeg , MAS é SO usado extensivamente, mesmo que eles tentassem cortá-lo. todos criarão softlinks de avconv a ffmpeg de qualquer maneira, para que não parem de funcionar e descartem.]]

Não é uma coisa ruim usar avconv , eu acabei de ver a única resposta mencionando o aviso de depreciação que é essencialmente uma mensagem vazia deve ser mais uma alternativa para o ffpmeg você poderia tentar avconv que é mais fiel ao caso aqui.

avconv -i inputfile.flv -map 0 -c:v libx264 -c:a copy outputfile.mp4

é realmente o MESMO que

ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis

essencialmente no primeiro você está usando as opções mais curtas e no segundo é a variedade mais escrita.

ALSO -map 0 está se referindo a faixas de áudio, por isso, se estiver usando algo como mp4a , que pode manipular várias faixas de áudio, você pode deixar isso para copiar todos os fluxos de áudio para o arquivo resultante. Isso só é necessário se você estiver usando um codec que não suporta várias faixas de áudio no mesmo arquivo, então você deseja mapear o áudio necessário e não todos. É claro que, se você tentar minimizar o espaço usado, poderá especificar apenas um para tentar extrair um pouco do tamanho do arquivo [o áudio é como 1/3 do tamanho da trilha de vídeo [e isso é generoso]].

-c:v = codec(video) so: -c:v libx264 é o mesmo que usar: -vcodec libx264 FYI; mesmo com este exemplo: -c:v copy = -vcodec copy

e, além disso, para FLVs, tenha cuidado com o arquivo flv é o mesmo que um avi em que é um recipiente que pode conter qualquer número de codecs para vídeo ou áudio. Você deve primeiro usar o utilitário de inspeção de mídia escolhido para ver o que é usado no próprio arquivo antes de escolher apenas copiar o fluxo de vídeo e / ou de áudio ou se quiser transmuxá-lo de qualquer coisa para algo novo. Portanto, o comando que funciona melhor para um FLV pode não ser o mesmo para outro FLV [naturalmente se estiver recebendo vários FLVs da mesma fonte, eles serão codificados da mesma forma, mas nunca é uma garantia].

Não tentar escolher nit apenas encontrou isso na pesquisa na web e queria tentar ajudar a esclarecer as coisas para as pessoas um pouco.

Mais uma vez, como esta resposta indica a resposta abaixo, YES executando o ffmpeg sempre irá postar que a mensagem é essencialmente oca, já que estes 2 utilitários são realmente apenas o mesmo utilitário com pouca diferença. Você deve, em quase todos os casos, obter exatamente os mesmos resultados usando qualquer comando. Isso não necessariamente irá resultar em uma re-transcodificação completa, por quê? A, se não for necessário, economiza uma tonelada de tempo, e B, se você transcodificar um arquivo que já foi compactado em um codec de vídeo, está essencialmente executando uma rotina de compactação contra algo que já está compactado e sempre resultará em menos qualidade do que a fonte. A maioria dos codecs mais recentes são um pouco compatíveis [não todos] como, por exemplo, um flv poderia ser tecnicamente um MP4 em um wrapper FLV, já que FLVs como AVIs são apenas contêineres de outros codecs. Portanto, isso depende do que a fonte flv tem para o codec de vídeo e ausio em comparação com o que você está convertendo para saber se ele precisa ser transcodificado. Se dentro do FLV eles usassem o vídeo H264 MP4 e MP4a para áudio, você não precisaria re-transcodificar a coisa que você precisaria apenas copiá-lo e ajustar os cabeçalhos de arquivo para que ele seja lido como um verdadeiro MP4 em vez de um vídeo MP4 dentro de um arquivo FLV.

    
por 10.03.2014 / 14:34
3

De acordo com este guia , o comando apropriado para converter FLV para MP4 sem qualquer recodificação AV é este:

ffmpeg -i input.flv -c copy -copyts output.mp4

Funcionou perfeitamente para mim em todos os casos com vídeo AVC e áudio AAC ou MP3.

    
por 03.01.2015 / 20:07
-1

Ao usar o ffmpeg, recebi um aviso de descontinuação para usar o avconv. Usando o avconv, consegui bons resultados:

avconv -i inputfile.flv -map 0 -c:v libx264 -c:a copy outputfile.mp4

Leia man avconv para mais informações.

    
por 03.01.2014 / 17:38
-2

Sugiro que você crie um script de shell chamado video_flv_to_mp4 com o seguinte conteúdo:

ffmpeg -i $1 -sameq -ar 22050 -vcodec libx264 $1.mp4 

Em seguida, execute-o assim:

$ video_flv_to_mp4 video.flv

Ele te dará um arquivo video.flv.mp4.

    
por 15.05.2014 / 11:05

Tags