Como você extrai uma parte de um arquivo avi codificado por xvid, com ffmpeg? (sem problemas com outros arquivos)

4

Estou usando o seguinte comando, que funciona para a maioria dos arquivos, exceto o que parece ser os codificados em xvid

/usr/bin/ffmpeg -sameq -i file.avi -ss 00:01:00 -t 00:00:30 -ac 2 -r 25 -copyts output.avi

Portanto, isso deve basicamente dividir 30 segundos de vídeo + áudio, a partir de 1 minuto.

Ele inicia a codificação na marca 00:01:00, mas vai até o final do arquivo por algum motivo, ignorando que eu quero apenas 30 segundos.

A saída é assim.

FFmpeg version git-ecc4bdd, Copyright (c) 2000-2010 the FFmpeg developers
  built on May 31 2010 04:52:24 with gcc 4.4.3 20100127 (Red Hat 4.4.3-4)
  configuration: --enable-libx264 --enable-libxvid --enable-libmp3lame --enable-libopenjpeg --enable-libfaac --enable-libvorbis --enable-gpl --enable-nonfree --enable-libxvid --enable-pthreads --enable-libfaad --extra-cflags=-fPIC --enable-postproc --enable-libtheora --enable-libvorbis --enable-shared
  libavutil     50.15. 2 / 50.15. 2
  libavcodec    52.67. 0 / 52.67. 0
  libavformat   52.62. 0 / 52.62. 0
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    1.20. 0 /  1.20. 0
  libswscale     0.10. 0 /  0.10. 0
  libpostproc   51. 2. 0 / 51. 2. 0
[mpeg4 @ 0x17cf770]Invalid and inefficient vfw-avi packed B frames detected
Input #0, avi, from 'file.avi':
  Metadata:
    ISFT            : VirtualDubMod 1.5.10.2 (build 2540/release)
  Duration: 00:02:00.00, start: 0.000000, bitrate: 1587 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 672x368 [PAR 1:1 DAR 42:23], 25 tbr, 25 tbn, 25 tbc
    Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
File 'lol6.avi' already exists. Overwrite ? [y/N] y
Output #0, avi, to 'lol6.avi':
  Metadata:
    ISFT            : Lavf52.62.0
    Stream #0.0: Video: mpeg4, yuv420p, 672x368 [PAR 1:1 DAR 42:23], q=2-31, 200 kb/s, 25 tbn, 25 tbc
    Stream #0.1: Audio: mp2, 48000 Hz, 2 channels, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
[mpeg4 @ 0x17cf770]Invalid and inefficient vfw-avi packed B frames detected
[buffer @ 0x184b610]Buffering several frames is not supported. Please consume all available frames before adding a new one.
frame= 1501 fps=104 q=0.0 Lsize=   15612kB time=30.02 bitrate=4259.7kbits/s    ts/s
video:15303kB audio:235kB global headers:0kB muxing overhead 0.482620%

se eu converter este arquivo para mp4 por exemplo, e então executar a mesma ação, ele funcionará perfeitamente.

    
por user11955 05.06.2010 / 04:57

2 respostas

2

Eu presumo que sua operação "converter para MP4" é apenas uma alteração de contêiner, não uma recodificação completa dos fluxos de dados de A / V. Então, talvez o FFmpeg esteja ficando preso em algo quebrado nesses contêineres AVI. Esta linha na sua saída pode suportar isso:

[mpeg4 @ 0x17cf770]Invalid and inefficient vfw-avi packed B frames detected

Você pode tentar criar um novo contêiner AVI - deixe o FFmpeg copiar o arquivo inteiro, por exemplo:

ffmpeg -i input.avi -vcodec copy -acodec copy output.avi

Isso deve criar um novo contêiner AVI e copiar os fluxos de dados. Em seguida, tente seu comando novamente. Se funcionar, você tem AVIs quebrados (ou possivelmente um bug FFmpeg) - de qualquer forma, você pode colocar todos os seus vídeos em novos contêineres AVI e fazê-lo dessa maneira.

Se isso não funcionar, você pode procurar mais nos XviDs quebrados e ver o que eles têm em comum.

    
por 05.06.2010 / 05:14
1

Gostaria de saber se o seu problema é o mesmo que neste artigo: Converta qualquer arquivo de vídeo para um iPod ou iPhone

You want to use your fancy new Apple iPod Video or Apple iPhone, but you don't know how to convert video so it will play.

Ubuntu 9.10 (Karmic Koala) ships with a version of ffmpeg without libfaac support because of licensing issues. This means you will need to compile ffmpeg yourself. This guide explains how.

O artigo explica, passo a passo, como compilar o ffmpeg manualmente ou criar um pacote ffmpeg modificado, que inclua o libfaac para suportar Advanced Audio Coding (AAC).

    
por 13.06.2010 / 21:28