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=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:00O por su tamaño:
$ avisplit -i original.avi -s 700MBConcatenar ficheros AVI
Utilizando avimerge del paquete transcode.
~$ avimerge -i parte1.avi parte2.avi -o completo.aviExtraer 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.mp3Eso 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 helpSi 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.mp3Con ffmpeg
$ ffmpeg -i original.avi -vn -acodec copy soloaudio.mp3Con mencoder
Se supone que se hace así, pero no funciona. Si sabes porqué, deja un comentario.
$ mencoder -oac copy -novideo original.avi -o soloaudio.aviExtraer el video
Con ffmpeg
$ ffmpeg -i original.avi -an -vcodec copy solovideo.aviCon mencoder
$ mencoder -ovc copy -nosound original.avi -o solovideo.aviExtraer 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.aviRecodificar 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.aviMultiplexar 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.aviConvertir a AVI
$ mencoder -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4 -o lovestory.avi lovestory.flvReferencias
- transcode command examples
- mplayer
man ffmpegman mplayer- “19 cosas útiles que puedes hacer con ffmpeg ":http://mundogeek.net/archivos/2008/10/10/19-cosas-utiles-que-puedes-hacer-con-ffmpeg/
- 19 ffmpeg commands for all needs
- http://www.cuadernoderuta.es/unir-y-convertir-formatos-de-video-mpg-avi-asf-en-ubuntu/
- Using ffmpeg to manipulate audio and video files