Como convertir un fichero .ts en un .AVI conservando todos los streams

De Kafre.org

Hoy me he pasado un buen rato como coger un fichero .ts (el fichero de salida que me genera el projectX usando una grabación de la tele de mi M750T a la que le he quitado los anuncios) en un DivX .avi pero conservando todos (los dos) streams de audio que me graba el m750T.

El caso es que me ha costado bastante dar con la forma de meter los 2 streams de audio en el avi, es más aún no tengo del todo clara la sintaxis del ffmpeg, pero esta funciona:

  1. Primero me he tenido que compilar la libmp3lame a mano en la version 3.97 porque la 3.98.2-20.el5 de mi Centos parece ser que se lleva mal con ffmpeg (o igual es al reves, vete tu a saber).
  2. Tras esto despues de mucho prueba y error me quedo con este script que me he hecho:


  1. #!/bin/bash
  2.  
  3. export LD_LIBRARY_PATH=/usr/local/lib
  4.  
  5. /usr/bin/ffmpeg -i "$1"  -y -vcodec mpeg4 -r 25 -b 766k  -aspect 16:9 -s 720x576  -acodec libmp3lame -ab 128k -alang es "$1.avi" -acodec libmp3lame -ab 128k -alang en -newaudio -map 0:0 -map 0:1 -map 0:2

Intento explicar esto:

export LD_LIBRARY_PATH=/usr/local/lib

Esto es para que use el libmp3lame que he compilado

/usr/bin/ffmpeg -i "$1" -y

El fichero de entrada (El ts en cuestion)

 -vcodec mpeg4 -r 25 -b 766k  -aspect 16:9 -s 720x576  -acodec libmp3lame -ab 128k -alang es "$1.avi" 

Formato del video y del primer stream de audio y el fichero de salida

  -acodec libmp3lame -ab 128k -alang en -newaudio

El formato del segundo stream de audio que y el 'fichero' de salida 'ficticio'

   -map 0:0 -map 0:1 -map 0:2

Mapeos de los stream de entrada con las salidas


Bueno, pues esto si lo corremos sobre un fichero como puede ser la peli Space Cowboys que echaron e otro día muestra algo como

[root@asterisk 2009-10-26_22.15.00_0001E3FB3D23_1256481774.fmpg.000]# /etc/scripts/TDT2DivX.sh Space\ Cowboys.new.ts
FFmpeg version 0.5-30.el5, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --enable-shared --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-avfilter-lavf --enable-pthreads --enable-x11grab --enable-vdpau --disable-avisynth --disable-libamr-nb --disable-libamr-wb --enable-libdc1394 --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables --disable-stripping --extra-cflags=-I/usr/include/nvidia-graphics --extra-ldflags=-L/usr/lib/nvidia-graphics
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 0 / 52.20. 0
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Mar 15 2009 14:25:10, gcc: 4.1.2 20080704 (Red Hat 4.1.2-44)
 
Seems stream 0 codec frame rate differs from container frame rate: 50.00 (50/1) -> 25.00 (25/1)
Input #0, mpegts, from 'Space Cowboys.new.ts':
  Duration: 02:20:17.10, start: 23420.096633, bitrate: 3389 kb/s
  Program 258 
    Stream #0.0[0xe0]: Video: mpeg2video, yuv420p, 720x576 [PAR 16:15 DAR 4:3], 15000 kb/s, 25 tbr, 90k tbn, 50 tbc
    Stream #0.1[0xc0](deu): Audio: mp2, 48000 Hz, stereo, s16, 128 kb/s
    Stream #0.2[0xc1](deu): Audio: mp2, 48000 Hz, stereo, s16, 128 kb/s
Output #0, avi, to 'Space Cowboys.new.ts.avi':
    Stream #0.0: Video: mpeg4, yuv420p, 720x576 [PAR 64:45 DAR 16:9], q=2-31, 766 kb/s, 90k tbn, 25 tbc
    Stream #0.1(es): Audio: libmp3lame, 48000 Hz, stereo, s16, 128 kb/s
    Stream #0.2(en): Audio: libmp3lame, 48000 Hz, stereo, s16, 128 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
  Stream #0.2 -> #0.2
Press [q] to stop encoding