Downsampling de um vídeo com avconv / ffmpeg

7

Eu sei muito pouco sobre codificação e uso do avconv / ffmpeg. Estou tentando reduzir a resolução de um vídeo da seguinte forma:

avconv -i blah_in.avi -s 640x360 -pass 1 blah.avi
avconv -i blah_in.avi -s 640x360 -pass 2 blah.avi

Estou ciente de que isso é muito simplista, mas eu não consigo descobrir qual é o problema. Aqui está a mensagem de erro do passo 1:

avconv version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
  built on Jun 12 2012 16:37:58 with gcc 4.6.3
[avi @ 0x9fdd240] non-interleaved AVI
Input #0, avi, from 'blah_in.avi':
  Metadata:
    encoder         : MEncoder svn r34540 (Ubuntu), built with gcc-4.6
  Duration: 01:21:59.24, start: 0.000000, bitrate: 8996 kb/s
    Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0.1: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
File 'blah.avi' already exists. Overwrite ? [y/N] y
[buffer @ 0x9fe1e00] w:1920 h:1080 pixfmt:yuv420p
[scale @ 0x9fdcfa0] w:1920 h:1080 fmt:yuv420p -> w:640 h:360 fmt:yuv420p flags:0x4
Incompatible sample format 's16' for codec 'ac3', auto-selecting format 'flt'
[ac3 @ 0x9fdc740] invalid bit rate
Output #0, avi, to 'blah.avi':
  Metadata:
    encoder         : MEncoder svn r34540 (Ubuntu), built with gcc-4.6
    Stream #0.0: Video: mpeg4, yuv420p, 640x360 [PAR 1:1 DAR 16:9], q=2-31, pass 1, 200 kb/s, 90k tbn, 23.98 tbc
    Stream #0.1: Audio: ac3, 44100 Hz, stereo, flt, 200 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg4 -> mpeg4)
  Stream #0:1 -> #0:1 (mp3 -> ac3)
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height

Eu tentei uma série de coisas, mas quer que eles acabam com uma mensagem de erro semelhante, ou a qualidade é extremamente pobre; não tanto devido à baixa resolução, mas cheio de artefatos de compressão.

Agora, o que eu gostaria de conseguir é a mesma resolução / codificação como o arquivo avi a seguir, que joga muito bem no meu dispositivo filhos vídeo:

Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 624x352 [PAR 1:1 DAR 39:22], 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s
    
por January 01.12.2012 / 17:57

2 respostas

2

A linha final no log de saída é muito genérica - você terá que procurar mais. O erro é este:

[ac3 @ 0x9fdc740] invalid bit rate

O problema é que, por algum motivo, a avconv quer codificar seu áudio MP3 para o AC3. Na verdade, quando você só redimensiona o vídeo, pode deixar o fluxo de bits de áudio sozinho.

Observe que redimensionar e recodificar reduzirá drasticamente sua qualidade. Então, a menos que você realmente precise, não faça isso. Seu vídeo sofrerá de perda de geração .

Se puder, evite usar codecs MPEG-4 Parte 2 (Xvid, ou o% cod_de% nativo da libavcodec) e, em vez disso, use codecs MPEG-4 Parte 10 / H.264 (por exemplo, x264). Como o H.264 não é suportado adequadamente em contêineres AVI, usaremos o MP4 em vez disso, que deve ser o seu contêiner de escolha em vez do AVI na maioria das vezes.

ffmpeg -i in.avi -c:a copy -c:v libx264 -crf 23 -s:v 640x360 output.mp4

Isso copiará o fluxo de áudio ( mpeg4 ), codificará o vídeo para x264 ( -c:a copy ) com um qualidade constante de 23 ( -c:v libx264 ). Use um valor mais baixo aqui para obter melhor qualidade (com valores sãos de 18 a 28). O tamanho será alterado com -crf .

Estou usando o FFmpeg como sinônimo do Libav aqui, já que a sintaxe deve ser a mesma. No entanto, eu recomendo que você abandone a versão Libav padrão que vem com o Ubuntu e compile o FFmpeg a partir da fonte ou use um recente Compilação estática do Linux .

    
por 03.02.2013 / 16:04
1

a taxa de bits de vídeo especificada é muito baixa, 200kpbs. tente este comando

ffmpeg -i input_video -b 800 -s 640x360 -vodec xvid -acodec cópia output_video

Como sugerido nos comentários, se o dispositivo suportar h.264, seria uma escolha melhor.

    
por 03.01.2013 / 15:10