FFmpeg produce un archivo vacío

2

Tengo problemas con ffmpeg en OSX Lion. Estoy tratando de convertir el archivo mpeg y la salida siempre es un archivo de tamaño 400kb más o menos.

El comando es:

 ffmpeg -i out_poem_big.mpg -s 1280x720 -vpre medium outvideo.mp4

Aquí está el registro:

FFmpeg version 0.6.3, Copyright (c) 2000-2010 the FFmpeg developers
  built on Feb 21 2012 21:57:04 with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)
  configuration: --disable-debug --prefix=/usr/local/Cellar/ffmpeg/0.6.3 --enable-shared --enable-pthreads --enable-nonfree --enable-gpl --disable-indev=jack --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libfaad
  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0.11. 0 /  0.11. 0

Seems stream 0 codec frame rate differs from container frame rate: 59.94 (60000/1001) -> 29.97 (60000/2002)
Input #0, mpeg, from 'out_poem_big.mpg':
  Duration: 00:08:35.61, start: 1.000000, bitrate: 14823 kb/s
    Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 104857 kb/s, 28.90 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x1c0]: Audio: mp2, 44100 Hz, 2 channels, s16, 128 kb/s
File 'outvideo.mp4' already exists. Overwrite ? [y/N] y
[libx264 @ 0x7fb7ca033600]using SAR=1/1
[libx264 @ 0x7fb7ca033600]using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x7fb7ca033600]profile High, level 3.1
[libx264 @ 0x7fb7ca033600]264 - core 120 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=200 ratetol=20.0 qcomp=0.60 qpmin=10 qpmax=51 qpstep=4 ip_ratio=1.41 aq=1:1.00
Output #0, mp4, to 'outvideo.mp4':
  Metadata:
    encoder         : Lavf52.64.2
    Stream #0.0: Video: libx264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], q=10-51, 200 kb/s, 60k tbn, 29.97 tbc
    Stream #0.1: Audio: libfaac, 44100 Hz, 2 channels, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
Input Stream #0.0 frame size changed to 1920x1080, yuv420p

Intenté todo tipo de vcodec y la salida es la misma en el mejor de los casos, también probé -sameq pero no tuve suerte.

ffmpeg se instaló a través de homebrew

stpn
fuente
¿Es solo este archivo o ffmpeg en general? ¿Le importaría publicar un archivo similar con el que tenga dificultades en algún lugar público para que lo podamos probar?
fideli
¿podemos ver el archivo /usr.local/share/ffmpeg/libx264-medium.ffpreset, la plantilla de parámetros que está utilizando? ¿Tal vez establece su propio tamaño de video o necesita dimensiones divisibles por 64 píxeles más o menos?
ZaB
@ZaB El tamaño del video está bien, mira la secuencia de salida #0.0. La tasa de bits es demasiado baja, como puede ver. Además, en ffpresetsrealidad no debería usarse de todos modos.
slhck

Respuestas:

4

Hay algunas cosas que me gustaría señalar:

  • Actualice su versión de FFmpeg. Está terriblemente anticuado. Corre brew updatey luego brew upgradepara hacerlo. FFmpeg 0.9 introdujo una nueva forma de especificar preajustes de codificación, y la que está usando actualmente es simplemente heredada.

  • No lo uses nunca sameq. No significa la misma calidad . Básicamente significa, usar las mismas opciones matemáticas que se usaron en el video de entrada, lo que de hecho reduce drásticamente la calidad.


Donde está tu problema ...

Vayamos al tema en cuestión. El video de salida tiene una velocidad de bits de ~ 200 kBit / s, pero su entrada tiene 14823 kBit / s. Por eso se ve tan mal. Ahora depende de lo que quieras hacer. Si solo desea cambiar el contenedor a MP4, utilícelo -vcodec copyy termine con él.

Si desea cambiar el tamaño del marco, use algo como lo siguiente:

ffmpeg -i out_poem_big.mpg -c:v libx264 -preset slow -crf 22 -s 1280x720 -c:a libfaac -b:a 128K outvideo.mp4

Qué significa eso?

  • El aspecto más importante aquí es -crf 22el factor de tasa constante. Hazlo más bajo para una mejor calidad, hazlo más grande para una peor calidad. Consulte esta respuesta para obtener una explicación más detallada de lo que significa.

    Si necesita una velocidad de bits de salida constante, reemplácela -crf 22con -b:v 1M, por ejemplo. Sin embargo, tenga en cuenta que la velocidad de bits constante da como resultado una peor calidad debido a la forma en que x264 lo maneja.

  • -c:vse usa en lugar de -vcodec. Significa lo mismo, pero este es el formato predeterminado y preferiría seguir con esto. Además, queremos explícitamente libx264ya que todos los demás codificadores probablemente reducirán la calidad que obtiene para el tamaño del archivo (como MPEG-4 Parte II, -c:v mpeg4).

  • -preset slow utilizará una variante lenta de codificación con una optimización más eficiente en bits.

  • Especifiqué el códec de audio y la tasa de bits de audio. Cámbielo en consecuencia, según lo que quiera usar.

  • Consulte estas respuestas para obtener más explicaciones sobre la codificación FFmpeg:

slhck
fuente
El problema es que cuando preparo la actualización de ffmpeg obtengo ffmpeg ya actualizado ... ¿Significa que estoy atascado con 0.6.3 siempre que use brew?
stpn
¿Lo hiciste brew updateantes? Si eso no funciona, desinstálelo brew remove ffmpeg x264e instálelo nuevamente.
slhck
solo lo hice y sigue instalando 0.6.3 ...?
stpn
Eso no debería suceder. Ahora es 0.10. Lo investigaré mañana.
slhck
1
ok, entonces puede que no sea la mejor solución, pero hice esto: también $ cd (tilda)brew --prefix(tilda) $ git checkout fb01c6e /usr/local/Library/Formula/ffmpeg.rb $ brew uninstall ffmpeg $ brew install ffmpeg tenía que hacerlo $ brew install x264. Hubo algunos problemas de enlace, pero se resolvió por$ sudo brew link ffmpeg
STPN