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=0x55, bits=0, channels=2, bitrate=128 kbps,
[avilib]    345110 chunks, 132158240 bytes, VBR
[avilib] A: 32000 Hz, format=0x55, 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 640x272 [720x576] (*)
       frame rate: -f 25.000 [25.000] frc=3
      audio track: -a 0 [0] -e 48000,0,2 [48000,16,2] -n 0x55 [0x2000] (*)
                   bitrate=128 kbps
      audio track: -a 1 [0] -e 32000,0,2 [48000,16,2] -n 0x55 [0x2000] (*)
                   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(r): Video: mpeg4, yuv420p, 640x272
  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



blog comments powered by Disqus