Soy un novato completo en la edición de videos, así que perdóname si pido algo ridículo.

Estoy obteniendo videoclips desde un decodificador. Los clips son archivos AVI:

Resolution: 1920 x 1080 Frames Per Second: 60 Video Format: ITU H.264 Audio Format: MPEG 1 Audio, Layer 3 (MP3) 

La resolución y el FPS están mucho más allá de lo que necesito, así que estoy intentando ejecutar un comando para reducir la escala:

ffmpeg -i highres.avi -r 30 -s 960x540 lowerres.avi 

Esto me dio la resolución deseada, la velocidad de fotogramas y el tamaño de archivo más bajo, pero también degradó la calidad mucho más de lo que esperaba.

Miré el nuevo archivo y descubrí que, por alguna razón, FFmpeg convirtió el formato utilizado:

Video Format: FFmpeg MPEG-4 Audio Format: MPEG 1 Audio, Layer 2 

No me queda claro por qué no usaría los mismos formatos de salida que los formatos de entrada. Traté de usar este comando para forzarlo a usar H.264:

ffmpeg -i highres.avi -r 30 -s 960x540 -f h264 lowerresforceh264.avi 

Desafortunadamente, falló con el siguiente resultado:

ffmpeg version 0.7.3-4:0.7.3-0ubuntu0.11.10.1, Copyright (c) 2000-2011 the Libav developers built on Jan 4 2012 16:21:50 with gcc 4.6.1 configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static WARNING: library configuration mismatch avutil configuration: --extra-version="4:0.7.3ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avcodec configuration: --extra-version="4:0.7.3ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avformat configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avdevice configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avfilter configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay swscale configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay postproc configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay libavutil 51. 7. 0 / 51. 7. 0 libavcodec 53. 6. 0 / 53. 6. 0 libavformat 53. 3. 0 / 53. 3. 0 libavdevice 53. 0. 0 / 53. 0. 0 libavfilter 2. 4. 0 / 2. 4. 0 libswscale 2. 0. 0 / 2. 0. 0 libpostproc 52. 0. 0 / 52. 0. 0 Input #0, avi, from "highres.avi": Metadata: comment : Quality_GOOD encoder : Lavf52.64.2 encoded_by : AverMedia_c281_1.7.2 Duration: 00:01:59.28, start: 0.000000, bitrate: 10263 kb/s Stream #0.0: Video: h264 (High), yuv420p, 1920x1080, 59.94 fps, 59.94 tbr, 59.94 tbn, 119.88 tbc Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s [buffer @ 0x8f438a0] w:1920 h:1080 pixfmt:yuv420p [scale @ 0x8f431e0] w:1920 h:1080 fmt:yuv420p -> w:960 h:540 fmt:yuv420p flags:0x4 [libx264 @ 0x8f0fb40] broken ffmpeg default settings detected [libx264 @ 0x8f0fb40] use an encoding preset (e.g. -vpre medium) [libx264 @ 0x8f0fb40] preset usage: -vpre <speed> -vpre <profile> [libx264 @ 0x8f0fb40] speed presets are listed in x264 --help [libx264 @ 0x8f0fb40] profile is optional; x264 defaults to high Output #0, h264, to "lowerresforceh264.avi": Stream #0.0: Video: libx264, yuv420p, 960x540, q=2-31, 200 kb/s, 90k tbn, 30 tbc Stream mapping: Stream #0.0 -> #0.0 Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height 

No estoy seguro de por qué no puedo hacer esto. Ejecutar «ffmpeg -formats» enumeró h264 como uno que podría usar tanto para la entrada como para la salida.

Si alguien pudiera indicarme la dirección correcta, se lo agradecería enormemente. Gracias.

PD: Estoy usando FFmpeg versión 0.7.3-4: 0.7.3-0 en Ubuntu 11.10.

EDIT

Ya Encontré una solución en el uso de ajustes preestablecidos. Después de buscar información sobre los ajustes preestablecidos, encontré el siguiente tutorial que los analiza:

http://juliensimon.blogspot.com/2009/01/howto-ffmpeg-x264-presets.html

Solo necesitaba especificar el códec y la configuración preestablecida adecuada así:

ffmpeg -i highres.avi -r 30 -s 960x540 -vcodec libx264 -vpre medium lowerresforceh264vpremedium.avi 

Todavía tengo algunos ajustes por hacer, pero esto es básicamente lo que quería. Gracias.

Comentarios

  • Seguro que algunas personas simplemente quieren saber cómo convertir archivos .avi de Avermedia .mp4 para jugar en Mountain Lion / Mavericks < pre > ffmpeg -i 140203-1229.avi -vcodec copy -acodec copy fromavermedia_cog.mp4 < / pre >

Responder

I » Estoy tratando de ayudar. Primero, no entiendo por qué estás diciendo que FFMPEG H.264 no es el formato de entrada.

No conozco la línea de comandos FFMPEG lo suficientemente bien (¿hay alguien que ¿hace? 😉 ). Tiene que haber un interruptor para la codificación de múltiples pasadas. Sé que hay algunos ajustes preestablecidos incorporados que probablemente podría usar y casi con certeza hacer lo que está buscando. Normalmente se denominan presets x264 o tune x264. ¿Puedes encontrar algo así?

Comentarios

  • Gracias. Su charla sobre los ajustes preestablecidos me ha ayudado a encontrar una solución probable. ‘ editaré la publicación para mostrar lo que hice.
  • Buena solución. Agregado a mi colección de fragmentos. Gracias.
  • @BigBeagle: Cuando encuentre una respuesta a su pregunta, puede publicarla como respuesta. La edición de su pregunta se realiza para proporcionar más claridad a la pregunta. Según tengo entendido, las respuestas van en la sección de respuestas.

Respuesta

ffmpeg ha eliminado sus ajustes preestablecidos x264, por lo que -La configuración de vpre ya no funciona.

Ahora, tengo un script para convertir archivos de video a un formato que mi teléfono celular puede manejar.

ffmpeg -i input.avi -sws_flags lanczos+accurate_rnd -vf "scale=320:240" -c:v libx264 -crf 20 -preset veryslow -profile:v main -tune fastdecode -c:a copy output.mkv 

Explicaré cada opción

-sws_flags lanczos+accurate_rnd esta opción es el algoritmo de reducción de escala, se recomienda lanczos ya que produce la menor cantidad de artefactos sin difuminar, pero es lento.

-vf "scale=..." se explica por sí mismo especifica la resolución de salida

-crf 20 este es el calidad, 20 es una buena configuración de salida final (no la use antes de editar), esta es una calidad constante y es la mejor opción cuando el tamaño del archivo no es ajustado y producirá una mejor calidad con el tamaño de archivo más bajo que cualquier otra cosa; de lo contrario, use dos pasadas para obtener la máxima calidad en un tamaño de archivo específico (como tener que colocarlo en un CD o DVD), tasa de bits fija (por ejemplo, ) solo debe usarse cuando se transmite, un caso especial es» 0 «que no tiene pérdidas y el rango de esta opción es de 1 (calidad más alta) a 50 (calidad más baja).

Una buena prueba para esto es ejecutar la codificación con -crf 20, tomar nota de la tasa de bits y luego usarla como la configuración -b para una segunda versión del archivo, ambas deben tener el mismo tamaño de archivo, compare las dos para diferencias de calidad.

-preset veryslow esto elige la cantidad de CPU que desea usar, más lento cuanto más pequeño sea el tamaño del archivo y mejor calidad.

-profile:v main este es el perfil H.264 para usar. alto es el tamaño de archivo más eficiente, pero usa mucha CPU para decodificar en comparación con los otros formatos, dicho esto es el más popular ya que la mayoría de los teléfonos celulares tienen un decodificador de hardware integrado y el reproductor flash lo admite, el mío no, así que tengo que utilizar main.

-tune fastdecode a mi teléfono celular no le gusta reproducir los archivos sin esta opción, pero generalmente esto se puede dejar en blanco o configurar en «película» para videojuegos, el La razón principal por la que usa esto es para obtener un poco de calidad adicional.

Y lo último que recomendaría encarecidamente es usar un formato de contenedor moderno .avi no está diseñado para contener H.264 y por lo que entiendo allí » No es un estándar para almacenar H.264 o hacer que el archivo sea más grande que 2GB, la mayoría de las implementaciones son hackeadas y propensas a tener problemas, use mkv o mp4.

Comentarios

  • Los ajustes preestablecidos para libx264 ahora están especificados por -preset como en -preset slow
  • -tune fastdecode deshabilita el desbloqueo y las tramas B y P ponderadas, así como CABAC. ¿Hay decodificadores que pueden manejar tramas B, pero no CABAC? Sugeriría -profile:v baseline , si necesita apuntar a decodificadores de hardware antiguos. (fastdecode podría ser útil si apunta a un software re decodificador en una CPU lenta, pero no un decodificador de hardware). Main con cuadros B pero sin desbloqueo o CABAC puede o no verse mejor que la línea de base con desbloqueo. +1 por recomendar no AVI para almacenar h.264. IIRC, el principal son los marcos B, pero sí, h.264 en avi no está bien estandarizado, y es ‘ s hacky.
  • I ‘ d llamar a -crf 20 una final alta. Puede cambiar eso a 22 o incluso a 24 y probablemente estará bien, a menos que ‘ sea de gran movimiento, como un evento deportivo.

Responder

Hay algunas cosas que aclarar:

  • Un formato es no un códec; desea obtener un archivo en formato avi con video codificado con h264 códec. Simplemente use -vcodec libx264 y un nombre de archivo con .avi . Ffmpeg debería reconocer un formato mirando una extensión de archivo, pero también puede ser específico agregando -f avi . Definitivamente no quiere usar mpeg1, porque da peor calidad que mpeg2 o incluso peor en comparación con mpeg4, que recomiendo.
  • Su problema fue que ffmpeg solo usó la calidad más baja posible porque no especificó ninguna. La opción -sameq rara vez parece funcionar para mí. De hecho, es muy complicado establecer la tasa de bits manualmente. Agregue, por ejemplo, -vb 3000k para obtener un archivo con una tasa de bits de video promedio de 3 Mb / s, lo que da una calidad bastante buena. Supongo que sería suficiente para usted tener 2 Mb / s para la resolución mencionada.
  • La clave para reducir no es la resolución, sino la tasa de bits mencionada anteriormente. Prefiero ceñirme a la resolución original y simplemente manipular la tasa de bits.
  • Supongo que también quieres mantener el audio sin conversión (es decir, sin pérdida de calidad), así que usa -acodec copy .

Prueba esto: ffmpeg -i highres.avi -acodec copy -vcodec libx264 -vb 2000k inferior res.avi

Comentarios

  • La tasa de bits constante es la peor (en términos de calidad frente a tamaño) de todos los modos de control de tasa en x264 y debe evitarse. Utilice -crf para establecer un modo de calidad constante en su lugar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *