Manipulación de ficheros AVI

Esta receta es (o será) un compendio de pequeños trucos y utilidades para manipular ficheros AVI usando los programas libres habituales en un sistema GNU.

En realidad pienso ir apuntando aquí las soluciones que vaya encuentrando a problemas que me surjan. Se admiten sugerencias para ir incorporando a la receta.

Obtener información

Información tal como el formato del flujo de video, el bitrate o los canales y formato de las pistas de audio. Se puede conseguir con tcprobe (del paquete transcode). El ejemplo siguiente tiene un flujo de video en formato XVID y dos pistas de audio.

$ tcprobe -i video.avi
[tcprobe] RIFF data, AVI video
[avilib] V: 25.000 fps, codec=XVID, frames=206466, width=640, height=272
[avilib] A: 48000 Hz, format=0×55, bits=0, channels=2, bitrate=128 kbps,
[avilib]    345110 chunks, 132158240 bytes, VBR
[avilib] A: 32000 Hz, format=0×55, bits=0, channels=2, bitrate=96 kbps,
[avilib]    220407 chunks, 99103424 bytes, VBR
[tcprobe] summary for video.avi, (*) = not default, 0 = not detected
import frame size: -g 640×272 [720×576] (*)
       frame rate: -f 25.000 [25.000] frc=3
      audio track: -a 0 [0] -e 48000,0,2 [48000,16,2] -n 0×55 [0×2000] (*)
                   bitrate=128 kbps
      audio track: -a 1 [0] -e 32000,0,2 [48000,16,2] -n 0×55 [0×2000] (*)
                   bitrate=96 kbps
           length: 206406 frames, frame_time=40 msec, duration=1:35:38.640

También se puede obtener esta información con ffmpeg, aunque no con tanto detalle:

$ ffmpeg -i video.avi
Input #0, avi, from ‘video.avi’:
  Duration: 02:17:38.6, start: 0.000000, bitrate: 1434 kb/s
  Stream #0.0, 25.00 fps®: Video: mpeg4, yuv420p, 640×272
  Stream #0.1: Audio: mp3, 48000 Hz, stereo, 128 kb/s
  Stream #0.2: Audio: mp3, 32000 Hz, stereo, 96 kb/s

Trocear un fichero AVI

Con avisplit del paquete transcode. Se pueden definir los trozos por su duración (1:30 en el ejemplo):

$ avisplit -i original.avi -t 1:30:00

O por su tamaño:

$ avisplit -i original.avi -s 700MB

Concatenar ficheros AVI

Utilizando avimerge del paquete transcode.

~$ avimerge -i parte1.avi parte2.avi -o completo.avi

Extraer el audio

Es decir, demultiplexar la pista de audio de un fichero AVI.

Lo haremos con mencoder (del paquete del mismo nombre).

$ mencoder -oac copy fichero.avi -o resultado.mp3

Eso lo extrae en el formato original. Se puede recodificar cambiando copy por alguno de los codecs soportados. La lista de codecs se obtiene con:

$ mencoder -aoc help

Si el avi original tiene varias pistas de audio puedes elegir una con la opción -aid n.

$ mencoder -aid 2 -oac copy fichero.avi -o resultado.mp3

Con ffmpeg

$ ffmpeg -i original.avi -vn -acodec copy soloaudio.mp3

Con mencoder

Se supone que se hace así, pero no funciona. Si sabes porqué, deja un comentario.

$ mencoder -oac copy -novideo original.avi -o soloaudio.avi

Extraer el video

Con ffmpeg

$ ffmpeg -i original.avi -an -vcodec copy solovideo.avi

Con mencoder

$ mencoder -ovc copy -nosound original.avi -o solovideo.avi

Extraer video y audio a la vez

Esto es útil si el fichero de partida tiene varias pistas de audio y en el resultado sólo quieres una:

$ mencoder -aid 2 -oac copy -ovc copy original.avi -o resultado.avi

Recodificar un video

La razón más habitual para recodificar un fichero es disminuir el bitrate, es decir, conseguir que ocupe menos espacio, en detrimento de la calidad, claro.

$ ffmpeg -i original.avi -b 700 -ab 96 -ar 32000 -acodec mp3 resultado.avi

  • -b: bitrate para el video (kb/s)
  • -ab: bitrate para el audio (kb/s)
  • -ar: frecuencia de muestreo del audio (Hz)
  • -acodec: codec de audio

Arreglar un índice roto

$ mencoder -idx original.avi -ovc copy -oac copy -o resultado.avi

Multiplexar varias pistas de audio en un mismo fichero AVI

Vamos a suponer que tenemos tres ficheros: un .avi que sólo tiene la imagen y dos .mp3 con el audio en español y en inglés.

lovestory-v.avi
lovestory-es.mp3
lovestory-en.mp3

Vamos a montarlo de modo que le primer canal de audio sea el español y el segundo el inglés:

$ avimerge -i lovestory-v.avi -p lovestory-es.mp3 -o lovestory-es.avi
$ avimerge -i lovestory-es.avi -p lovestory-en.mp3 -o lovestory.avi

Esto se puede repetir para cualquier número de pista de auido. Los ficheros de audio que se indican con -p pueden ser tanto .mp3 como .avi. En caso de ser .avi obviamente el flujo de imagen se ignora.

La mayoría de los reproductores libres soportan esto, incluidos mplayer, totem, xine, etc. En el caso de mplayer puedes elegir el canal de audio con -aid y el número de pista empezando en 1. Por ejemplo, el siguiente comando elige la pista de audio en inglés para el caso anterior.

$ mplayer -aid 2 lovestory.avi

Convertir a AVI

$ mencoder -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4 -o lovestory.avi lovestory.flv

Referencias

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

De ogg a mpeg...

Hola. Encontré ésto por ahí y me ha sido útil:

$ mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video -oac copy tu_video.ogg -o newvideo.mpeg

pasa un archivo en formato ogg a mpeg

Un saludo

The cause of the problem is:
The vendor put the bug there.
-- Meta amigo informático --

Imagen de nacho

Convertir a otro formato

Tenemos un vídeo encapsulado en un .avi (por ejemplo, una fantástica animación hecha en Blender), y queremos grabarla en un DVD para que la vea toda la familia en el lector del salón. Pero hete aquí, oh sorpresa, que no tenemos un león, sino uno viejuno que no entiende de divx, ni xvid. Pues nada, a convertir.

Mencoder

Para mí, mencoder es el más facilito, aunque no siempre consigo mis propósitos (como el del caso anterior).

$ mencoder [origen] -o [destino] -oac help -ovc help

-oac: Output Audio Codec
-ovc: Output Video Codec

Poniendo "help", como en el ejemplo, os saldrá una lista de los códecs disponibles. Tiene millones de opciones más, pero con esto suele bastarme. Algunas de las más útiles quizá sean:

  • -noskip - No se salta frames
  • -ofps [número]- Fotogramas por segundo del video de salida
  • -of [avi | mpeg | rawvideo] - Pues eso, convierte a esos formatos de salida. Esto está en fase beta todavía.
  • -audio-delay - Por si no está sincronizado el audio con el video

Transcode

Ahora estoy probando también transcode:

$ transcode -i [origen] -o [destino] -y ffmpeg -F mpeg2video

La opción -y indica el módulo que se usará para la conversión y -F indica el códec de ese módulo. Con -F list muestra una lista de los disponibles. Lo malo de esto es que un video de unos 700 MB pasa a ocuparte un DVD entero.

Para más info, pues ya se sabe:

  • man mencoder
  • man transcode

-------------
Nacho

Nacho

Imagen de nacho

en plan gráfico

hay un par de programillas que están bastante bien. El primero es avidemux. Permite arreglar índices, concatenar, trocear, aplicar filtros, separar audio y vídeo, recodificar...

El segundo es LiVES, y la explicación de su acrónimo recursivo se explica sola: Lives is a Video Editing System
-------------
Nacho

Nacho