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
ffmpeg
video-conversion
stpn
fuente
fuente
#0.0
. La tasa de bits es demasiado baja, como puede ver. Además, enffpresets
realidad no debería usarse de todos modos.Respuestas:
Hay algunas cosas que me gustaría señalar:
Actualice su versión de FFmpeg. Está terriblemente anticuado. Corre
brew update
y luegobrew upgrade
para 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 copy
y termine con él.Si desea cambiar el tamaño del marco, use algo como lo siguiente:
Qué significa eso?
El aspecto más importante aquí es
-crf 22
el 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 22
con-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:v
se usa en lugar de-vcodec
. Significa lo mismo, pero este es el formato predeterminado y preferiría seguir con esto. Además, queremos explícitamentelibx264
ya 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:
fuente
brew update
antes? Si eso no funciona, desinstálelobrew remove ffmpeg x264
e instálelo nuevamente.$ 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