Conversão de WebM para MP4 no Ubuntu é lenta e de má qualidade

1

Eu usei o comando

ffmpeg -i input.webm -q:v 10 -c:a copy out.mp4

Eu também tentei usar avconv em vez de ffmpeg.

A conversão é bem-sucedida, mas a qualidade é ruim. Também leva muito tempo. Também não joga com o Windows Media Player. (A razão para isso é o mpegv1 para o qual o arquivo é convertido.) Como eu adiciono uma opção para convertê-lo em mpegv2?

A seguir, a saída da linha de comando:

avconv version 0.8.16-4:0.8.16-0ubuntu0.12.04.1, Copyright (c) 2000-2014 the Libav developers
  built on Sep 16 2014 18:33:49 with gcc 4.6.3 
[matroska,webm @ 0xe737a0] Estimating duration from bitrate, this may be inaccurate
Input #0, matroska,webm, from 'test.webm':
  Duration: 00:00:08.57, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: vp8, yuv420p, 1536x768, PAR 1:1 DAR 2:1, 1k fps, 1k tbr, 1k tbn, 1k tbc (default) 
    Stream #0.1: Audio: vorbis, 44100 Hz, stereo, s16 (default)
[buffer @ 0xee38e0] w:1536 h:768 pixfmt:yuv420p
Output #0, mp4, to 'c2.mp4':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #0.0: Video: mpeg4, yuv420p, 1536x768 [PAR 1:1 DAR 2:1], q=2-31, 200 kb/s, 1k tbn, 1k tbc (default)
    Stream #0.1: Audio: libvorbis, 44100 Hz, stereo (default)
Stream mapping:
  Stream #0:0 -> #0:0 (vp8 -> mpeg4)
  Stream #0:1 -> #0:1 (copy)
Press ctrl-c to stop encoding
frame= 8572 fps=342 q=10.0 Lsize=   90902kB time=8.56 bitrate=86984.0kbits/s dup=8438 drop=0    
video:90823kB audio:0kB global headers:0kB muxing overhead 0.086778%
    
por dfordevy 05.02.2015 / 10:18

3 respostas

4

ffmpeg versão 1.2.6-7: 1.2.6-1 ~ trusty1

ffmpeg -i one.webm -r 10 -cpu-usado 5 -c: v libx264 -crf 20 -c: um erro de aoc -strict experimental -logict /tmp/one.mp4

Isso funciona muito bem. Converteu 1 hora de vídeo em 10 minutos.

    
por 11.03.2015 / 09:18
7

Vários problemas aqui:

  • Você está usando uma versão antiga do avconv dos repositórios do Ubuntu 12.04.
  • Esta versão não possui um codificador H.264 ( libx264 ) compilado nele.
  • É por isso que escolhe o vídeo MPEG-4 Part II, usando o codificador mpeg4 . Embora ainda use o mesmo contêiner .MP4, o MPEG-4 Part II não é tão eficiente quanto o H.264.
  • Seu comando usa -q:v 10 , que é de baixa qualidade. O intervalo é de 1 a 31, sendo 1 o melhor e, idealmente, você quer algo em torno de 2 a 5.
  • Você não pode copiar o áudio do Vorbis para os contêineres MP4, portanto -c:a copy não funcionará.

Então, para corrigir isso, eu recomendaria uma das duas opções:

  1. Continue usando avconv . Instale apt-get install libavcodec-extra-53 no Ubuntu 12.04 e libavcodec-extra-54 no Ubuntu 14.04 para obter suporte x264 para o avconv.
  2. Use um ffmpeg recente. Faça o download de uma uma recente compilação do ffmpeg (clique no link Construções estáticas do Linux ). Extraia o binário ffmpeg em algum lugar e use isso.

Em seguida, execute o seguinte comando (e substitua ffmpeg por avconv , dependendo da sua escolha):

ffmpeg -i input.webm -c:v libx264 -crf 20 -c:a aac -strict experimental out.mp4

O CRF controla a qualidade, onde 18–28 são escolhas sensatas. Lower é melhor e 23 é o padrão. Você pode definir a taxa de bits de áudio com -b:a 128k ou semelhante ao seu gosto.

Se você quiser acelerar a conversão, use -preset e defina-a como ultrafast, superfast, veryfast, faster, fast , por exemplo, %código%. Note que definir isso aumentará o tamanho do arquivo.

O Guia de codificação H.264 para o ffmpeg é muito útil e também deve ser aplicado ao avconv (mas não há garantias sobre isso).

Quanto ao MPEG-2, dê uma olhada nesta questão: - e não se esqueça de escolher -preset fast como áudio.

    
por 06.02.2015 / 10:46