Manual básico del comando ffmpeg
-
Upload
tecnologialibre -
Category
Documents
-
view
2.246 -
download
13
Transcript of Manual básico del comando ffmpeg
MANUAL BÁSICO
DEL COMANDO
FFMPEG
(v 1.1)
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
Autor:Joaquín V. Álvarez Martín
Licencia:
Esta obra está bajo una licencia Attribution-NonCommercial-ShareAlike 3.0 Unported de Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-nc-sa/3.0/ o envie una carta a Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, US
2
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
Índice de contenido1.Introducción.......................................................................................................................................42.Instalación del comando ffmpeg........................................................................................................43.Ejemplos de manipulación de vídeo y audio.....................................................................................44.Ejemplo completo: riperar un DVD casero.....................................................................................155.Bibliografía......................................................................................................................................17
3
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
1. Introducción
FFmpeg es un maravilloso ejemplo de software libre para la manipulación de vídeo y audio
(también permite realizar alguna opción sobre imágenes). Aunque nació para GNU/Linux, puede
compilarse en la mayoría de sistemas operativos. Entre otras cosas permite:
a) Cambiar de formato.
b) Comprimir, extraer imágenes y vídeo.
c) Hacer un vídeo a partir de imágenes.
d) Insertar marcas de agua (texto o fotografías) en un vídeo.
e) Etc.
2. Instalación del comando ffmpeg
a) En Ubuntu: sudo apt-get install ffmpeg
b) En Debian: apt-get install ffmpeg
3. Ejemplos de manipulación de vídeo y audio
1. De wmv → flv:
ffmpeg -i entrada.wmv salida.flv
2. De wmv → mpeg:
ffmpeg -i entrada.wmv salida.mpeg
3. De avi → gif:
ffmpeg -i entrada.avi salida.gif
4. De wmv → flv especificando parámetros:
ffmpeg -i entrada.wmv -ab 56 -ar 22050 -r 15 -s 320×240 salida.flv
Notas:
a) -ab es el bitrate del audio, es decir, es el número de bits por segundo para el audio (a
mayor número mayor calidad).
b) -ar es la frecuencia del sonido en Hz.
4
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
c) -s indica la resolución (ancho x alto) del vídeo que queremos obtener. Como es una
resolución no panorámica, dará problemas si el vídeo original no está en formato
panorámico.
d) -r es el número de imágenes por segundo (1 Hz = 1 / seg). Es opcional.
5. Cuando el nombre del vídeo está formado por varias palabras (por ejemplo de wmw →
DVD tipo PAL).
ffmpeg -i "video de entrada".wmv -target pal-dvd salida.mpeg
Nota:
a) El uso de las “” es necesario para poder usar nombres de archivos formados por más de
una palabra.
6. De flv → mp4 especificando varios parámetros:
ffmpeg -i entrada.flv -vcodec mpeg4 -s 640×360 -ac 2 salida.mp4
Notas:
a) -vcodec es la codificación que queremos emplear en el vídeo. Es opcional. Si no
sabemos cual usar hay dos opciones: no poner nada o poner -vcodec copy.
b) -ac son los canales de audio establecidos (1=mono, 2=estéreo, 6=envolvente). Si no los
establecemos, por defecto se determina un canal.
c) -acodec especifica el codec de audio que queremos emplear. Si no sabemos cual usar
hay dos opciones: no poner nada o poner -acodec copy.
7. De avi → videocd (PAL):
ffmpeg -i entrada.avi -target pal-vcd salida.mpeg
Nota:
a) -target especifica el tipo de formato. Algunas opciones a "vcd" son: "svcd", "dvd", "dv",
"dv50", "pal-vcd", "ntsc-svcd"...
5
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
8. De avi → divx:
ffmpeg -i entrada.avi -s 320×240 -vcodec msmpeg4v2 salida.avi
9. De dv → DVD:
ffmpeg -i entrada.dv -target pal-dvd salida.mpeg
10. De mpeg → xvid:
ffmpeg -i entrada.mpeg -acodec libmp3lame -vcodec xvid -b 1200kb salida.avi
Nota:
a) -b es el bitrate del vídeo.
11. De avi → dv (Digital video):
ffmpeg -i entrada.avi -target pal-dv salida.dv
12. De dv → flv:
ffmpeg -i entrada.dv -ar 22050 -qscale 4 -s 380x284 -f flv saluda.flv
Notas:
a) -qscale = quantum scale esto afecta a como se comprime el vídeo. A menor numero
mejor calidad, aunque afecta al tamaño del vídeo final. El valor 4 resulta aceptable.
b) -f = formato al que se quiere forzar.
13. Extraer 120 segundos de un vídeo a partir del segundo 60:
ffmpeg -i entrada.mpeg -t 120 -ss 60 -sameq vídeo_salida.mpeg
Notas:
a) -t es la duración en segundos del vídeo que se desea extraer (en este caso 120 segundos).
b) -ss es el tiempo en segundos desde donde se desea cortar el vídeo (en este caso desde el
minuto).
c) -sameq para que el vídeo de salida mantenga la misma calidad que el vídeo de entrada.
6
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
d) El tiempo también se puede indicar mediante el formato "hh:mm:ss[.xxx]".
14. De mpeg (por ejemplo) → 3gp (típico de teléfonos móviles):
ffmpeg -i entrada.mpeg -s qcif -r 15 -ac 1 -ar 8000 -b 256000 -ab 15 salida.3gp
15. De 3gp → mp4:
ffmpeg -i entrada.3gp -vcodec mpeg4 -acodec libmp3lame salida.mp4
16. Para poder ver un vídeo en el iPod/iPhone:
ffmpeg -i entrada.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell
-aic 2 -cmp 2 -subcmp 2 -s 320×180 -title elquequeramos salida.mp4
17. Para poder ver un vídeo en la PSP:
ffmpeg -i entrada.avi -b 300 -s 320×240 -vcodec xvid -ab 32 -ar 24000 -acodec aac salida.mp4
18. Hacer una codificación con varias pasadas:
ffmpeg -i entrada -pass 2 -passlogfile ffmpeg2pass salida
19. Pasar un vídeo a Full HD (formato 16:9):
ffmpeg -i entrada.flv -sameq -pix_fmt rgb48le -s 1920x1080 -aspect 16:9 salida.mp4
Nota:
a) -pix_fmt rgb48le ayuda a minimizar la pérdida de calidad, pues permite cambiar el
formato del pixel de 16 bits de información a 48.
20. Convertir un vídeo para que ocupe menos y podamos subirlo a internet sin tener que
esperar demasiado tiempo y sin que se note de forma significativa la pérdida de
calidad:
ffmpeg -i entrada.mpeg -sameq salida.webm
7
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
Nota:
a) La idea es utilizar el contenedor webm con vídeo codificado en VP8 y audio codificado
con theora ogg vorbis. Esto es otro ejemplo de lo que se puede hacer gracias al código
abierto.
21. Convertir un vídeo en imágenes jpg (hay que poner el %):
ffmpeg -i video.mpeg imagen%d.jpg
22. Extraer una imagen concreta de un vídeo (por ejemplo del segundo 10):
ffmpeg -itsoffset 0 -i video.mpeg -ss 10 -vcodec png -vframes 1 imagen.png
Nota:
a) -itsoffset 0 establece el retraso en segundos sobre la captura. El formato
"[-]hh:mm:ss[.xxx]" también está soportado.
b) -vframes 1 indica que sólo se desea un frame.
23. Hacer un vídeo (de 5 segundos por ejemplo) con una imagen:
ffmpeg -loop_input -i aun.png -t 5 mas_tiempo.mpeg
Nota:
a) -loop input permite establecer un bucle temporal sobre la imagen.
24. Hacer que un vídeo pase a cámara lenta (slow motion). Son tres pasos:
Primero:
sudo aptitude install ffmpeg mjpegtools
Segundo:
ffmpeg -vcodec copy -acodec copy -i entrada.flv -ss 00:00:05 -t 0:0:10 salida.flv
Tercero:
8
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
ffmpeg -i salida.flv -f yuv4mpegpipe - | yuvfps -s 12:1 -r 12:1 | ffmpeg -f yuv4mpegpipe -i - -b 28800k
camara_lenta.flv
Notas:
a) Con el paso segundo se recorta el vídeo empezando en el segundo 5 y con una duración
de 10 segundos.
b) Con el tercer paso se reduce el framerate de 30 a 12 fps, dando lugar al efecto de cámara
lenta.
c) Si en lugar de poner el framerate a 12 fps se le da un valor superior a 30 fps , se obtiene
un vídeo a cámara rápida.
25. Extraer los 11 segundos (por ejemplo) primeros de un vídeo:
ffmpeg -i entrada.mpeg -t 11 salida.mpeg
26. Convertir un vídeo desde el segundo 10 hasta el segundo 12 en imágenes (hay que
poner el %):
ffmpeg -i entrada.avi -ss 00:00:10 -t 2 captura%d.jpg
Nota:
a) Las imágenes pueden llamarse como se desee siempre que al final del nombre se inclya
la terminación %d.
27. Convertir una secuencia de imágenes en un vídeo (hay que poner el %):
ffmpeg -i imagen%d.jpg video.mpeg
Notas:
a) El vídeo obtenido no tiene audio.
b) Para que el código anterior tenga éxito es necesario que las imágenes estén nombradas
como imagen1.jpg, imagen2.jpg,... Si las imágenes se llamaran 1.jpg, 2.jpg,... la línea de
código sería: ffmpeg -i %d.jpg video.mpeg
9
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
28. Hacer un vídeo avi (la calidad aceptable depende de cada uno) de un vídeo dv (u otro
de mayor calidad):
ffmpeg -i entrada.dv -vcodec mpeg4 -vtag xvid -acodec libmp3lame -ar 22050 -ab 128k -qscale 4 -s
460x360 -f avi salida.avi
Nota:
a) -vtag es el video tag o etiqueta. No afecta a la calidad del vídeo, sólo lo etiqueta como
xvid sin más.
29. Grabar el escritorio (por ejemplo a 800x600):
ffmpeg -f x11grab -s 800x600 -r 25 -i :0.0 -sameq grabacion.avi
30. Crear un vídeo avi a partir de varios VOB de un dvd (son dos pasos):
Primer paso:
cat VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB VTS_01_4.VOB VTS_01_5.VOB >
salida.mpeg
Segundo paso:
ffmpeg -i salida.mpeg -vcodec libx264 -s 560x420 ar 24000 -ab 128k -f avi la-peli.avi
31. Recortar un vídeo sin cambiarlo de tamaño:
ffmpeg -i entrada.flv -sameq -padtop 100 -padbottom 100 salida.flv
Notas:
a) -padtop 100 encoge de arriba 100px.
b) -padbottom 100 encoge de abajo 100px.
c) Otras opciones son: -padleft para encoger a la izquierda y -padright para encoger a la
derecha.
32. Recortar un vídeo cambiándolo de tamaño:
ffmpeg -i entrada.flv -sameq -croptop 100 -cropbottom 100 salida.flv
10
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
Notas
a) -croptop 100 borra de arriba 100px.
b) -cropbottom 100 borra de abajo 100px.
c) Otras opciones son: -cropleft para borrar a la izquierda y -cropright para borrar a la
derecha.
33. Unir varios vídeos en un único vídeo en formato mpeg (son dos pasos):
Primero se pasan a mpeg para que estén en un formato común:
ffmpeg -i video1.avi -sameq video1.mpeg
ffmpeg -i video2.avi -sameq video2.mpeg
En segundo y último lugar se unen los vídeos resultantes usando cat:
cat video1.mpeg video2.mpeg > nuevo_video.mpeg
34. Desentrelazar un vídeo:
ffmpeg -i entrada.dv -deinterlace -acodec copy salida.dv
35. Conocer los codecs asociados a un vídeo (muy útil):
ffmpeg -i video.avi
36. Poner vídeo en alta calidad con dos pases:
Primer comando a ejecutar (crea una serie de archivos necesarios para el segundo
paso):
ffmpeg -y -i entrada.flv -r 30000/1001 -b 2M -bt 4M -vcodec libx264 -pass 1 -vpre fastfirstpass -an
salida.mp4
Segundo comando a ejecutar (a su terminación pueden borrarse los archivos
temporales usados):
11
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
ffmpeg -y -i entrada.flv -r 30000/1001 -b 2M -bt 4M -vcodec libx264 -pass 2 -vpre hq -acodec aac -ac
2 -ar 48000 -ab 192k salida.mp4
Notas:
a) Si aac no lo admite por estar en estado experimental, puede reemplazarse por otro, por
ejemplo libmp3lame.
b) hq indica calidad alta.
c) -y indica que los archivos de salida se van a sobreescribir.
37. Quitar el sonido a un vídeo:
ffmpeg -i entrada.avi -sameq -an salida.avi
38. Conocer los codecs asociados a un audio (muy útil):
ffmpeg -i cancion.wma
39. De mp3 → wma:
ffmpeg -i entrada.mp3 salida.wma
40. Extraer audio de un vídeo:
ffmpeg -i video.mpeg -vn audio.mp3
Nota:
a) -vn: video no.
41. Unir audio y un vídeo:
ffmpeg -i video.avi -i audio.mp3 todojunto.avi
42. Unir audio y un vídeo especificando un codec de audio concreto:
ffmpeg -i video.avi -i audio.mp3 -acodec libmp3lame todojunto.avi
12
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
43. Unir audio y vídeo especificando un codec de vídeo concreto:
ffmpeg -i video.avi -vcodec mpeg4 -vtag xvid todojunto.avi
44. Extraer un fragmento de un audio (es igual que para extraer un fragmento de un
vídeo):
ffmpeg -i entrada.mp3 -t 120 -ss 60 -sameq salida.mp3
45. Extraer los 11 segundos primeros de un audio (igual que para un vídeo):
ffmpeg -i entrada.mp3 -t 11 salida.mp3
46. Añadir un nuevo canal de audio a un vídeo:
ffmpeg -i entrada.avi -i audio-español.mp3 -sameq -acodec libmp3lame -acodec libmp3lame salida.avi
-newaudio
Notas:
a) -acodec libmp3lame (codec de audio mp3) se indica dos veces, una para cada pista.
b) -newaudio indica que se añade una pista nueva de audio al archivo de salida salida.avi.
47. Extraer dos canales de audio (60 segundos por ejemplo) de un vídeo (por ejemplo si
está en varios idiomas):
ffmpeg -i entrada.avi -t 60 -map 0:1 -f mp3 -ab 128 -ac 2 cancion1.mp3
ffmpeg -i entrada.avi -t 60 -map 0:2 -f mp3 -ab 128 -ac 2 cancion2.mp3
48. Unir varios audios:
cat musica1.mp3 musica2. mp3 > juntos.mp3
49. Conocer los codecs y formatos que maneja la versión instalada del comando ffmpeg:
ffmpeg -formats
13
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
50. Extraer una pista de audio concreta (en este caso la número 4) de un vídeo (por
ejemplo, la correspondiente al idioma castellano de un película que está en varios
idiomas):
ffmpeg -i VTS_01_1.VOB -map 0:4 -vn -acodec libmp3lame -ar 22050 -ab 96k -ac 2 sonido.mp3
51. Usar varios hilos del procesador en la codificación (por ejemplo 2):
ffmpeg -threads 2 -i entrada.flv salida.avi
52. Codificar vídeo con en dos pasadas en vez de una (así se consigue mayor calidad,
aunque también requiere más tiempo). Son dos pasos:
Primer paso:
ffmpeg -y -i "How fast".ogg -pass 1 -target pal-dvd "How fast".mpeg
Segundo paso:
ffmpeg -y -i "How fast".ogg -pass 2 -target pal-dvd "How fast".mpeg
También es posible indicar estos dos pasos en una única línea de código (con &&):
ffmpeg -y -i "How fast".ogg -pass 1 -target pal-dvd "How fast".mpeg && ffmpeg -y -i "How fast".ogg
-pass 2 -target pal-dvd "How fast".mpeg
14
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
4. Ejemplo completo: riperar un DVD casero
Ripear un DVD es comprimirlo para que quepa en un CD o DVD. Como es lógico, esto supone
pérdida de calidad, por lo que no siempre es recomendable, sobre todo teniendo en cuenta el precio
de un DVD grabable a día de hoy.
Este proceso se puede hacer de varias maneras. Una de ellas es la siguiente:
a) En primer lugar se extraen y unen los archivos qu e intere sa n correspondientes del DVD,
dejando todos los demás archivos (anuncios, avisos legales, menús interactivos para el
DVD, etc.). Para ello, los archivos VOB cuyo contenido se desea grabar se copian en una
carpeta del disco duro. Esto que permitirá luego trabajar más rápidamente con ellos.
Después, se abre una terminal en esa carpeta y se ejecuta el comando que los une en uno
solo (en este ejemplo son 6 archivos a unir, siendo TJ.VOB el archivo unión de todos ellos):
cat VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB VTS_01_4.VOB VTS_01_5.VOB
VTS_01_6.VOB > TJ.VOB
b) Después se calcula el tamaño del archivo de audio al comprimirlo a mp3:
• Si la compresión se hace a un bitrate de 64kb:
64 kb/s = 64x1000 b/s = 64000b/s = 64000/(8x1024x1024) MB/s = 0,007629395 MB/s
• Entonces, si la duración de la película es de 2 horas 18 minutos 26 segundos, que son
8306 s, el tamaño del archivo del audio será:
0,007629395 MB/s x 8306 s = 63,4 MB
c) En tercer lugar se calcula el bitrate del vídeo , teniendo en cuenta la capacidad de un CD
(700MB), el tamaño del archivo de audio y el posible margen de error (0,71% de 700MB =
5 MB):
700 - 63,4 - 5 = 631,6 ≈ 631MB para el vídeo disponibles.
Entonces, el bitrate del vídeo será:
b = (631x1024x1024x8/1000) kb / 8306 s = 637,2 kb/s ≈ 637 kb/s
d) En cuarto y último lugar se ejecuta el “comando” ffmpeg (para 2 hilos en este ejemplo, ya
que esto depende de cada procesador) y con dos pasadas (para ganar en calidad):
15
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
ffmpeg -threads 2 -y -i TJ.VOB -pass 1 -map 0.0 -map 0.4 -acodec libmp3lame -ar 22050 -ab 64k -ac 2
-vcodec libxvid -b 637k -r 25 -s 460x360 pelicomprimida.avi && ffmpeg -threads 2 -y -i TJ.VOB -pass
2 -map 0.0 -map 0.4 -acodec libmp3lame -ar 22050 -ab 64k -ac 2 -vcodec libxvid -b 637k -r 25 -s
460x360 pelicomprimida.avi
Notas:
a) Al terminar el proceso de ripeado suele aparecer un error en respecto a la duración
calculada del orden del 0,5-0,7%. Esta es la razón por la cual al principio del ejemplo se
consideró el mismo.
b) Existen otros programas similares a ffmpeg para manipular audio y vídeo: mencoder,
transcode,...
c) Existen GUI's especializadas en el ripeo de DVDs, como por ejemplo “DVD rip” o
“DVD Encoder OGMRip”. Otras están más pensadas para la conversión general de
vídeos y audios.
d) Cuanto mayor sea la resolución (460x360 en este ejemplo) más se notará la pérdida de
calidad.
e) El tiempo necesario para ripear un DVD puede ser de varias horas.
16
Joaquín V. Álvarez Martín. Manual básico del comando ffmpeg
5. Bibliografía
• http://www.ffmpeg.org/
• man ffmpeg
• http://foro.noticias3d.com/vbulletin/showthread.php?t=345633
• http://www.guardarcomofilms.net
• http://mundogeek.net
• http://gnometips.com
• http://casidiablo.net
• http://www.usuadio.com
• http://www.rodrigopolo.com/ffmpeg/guia.html
• http://www.vagos.es/showthread.php?p=1055859910
• http://es.wikipedia.org/wiki/FFmpeg
17