[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Como separar mpg de 800 MB



José Luis Cruz <joseluis@jazzartistas.com> writes:

> Oooooh!
> 
> Has dicho las palabras mágicas!
> 
> jajaja

Oh.  Quién me manda a andar de hocicón... :-)

> a ver a ver a ver....
> 
> YO estoy queriendo pasar divx a svcd, y estoy probando con el
> transcode, pero tengo unas dudas (ahora sí que voy a ser el
> posteador original :)),

Haré lo posible.

> a ver si me puedes dar alguna pistilla. De todos modos el paquete
> dvb-mpegtools hace conflicto con el mjpegtools, que me parece mucho
> más completo, y es dependencia del transcode (conseguí los debs en
> marillat)

Ah, bien.  Yo también uso los paquetes de marillat (por eso decía que
no he probado ese split_mpg).

> que es el que estoy usando para mis primeras pruebas. Me gusta este
> programa porque, aparte de lo potente que parece, tiene soporte para
> trabajar con un cluster, cosa que va a ser mi próximo paso, montarme
> una granja, con un P90 y un par de 486 que tengo por aquí ;) Ya que
> mi athlon 850 tarda como 20 horas en transformar un video de 3 (más
> o menos) y no puedo compilar mis programas mientras jeje

Yo no uso transcode directamente, pero en esencia hago lo mismo que
hace transcode, excepto que manualmente...

Sí, bueno, ¿qué te puedo decir? ¿Porqué hacerlo fácil si se puede
hacer difícil? :-)

(realmente tengo algunas razones, pero no vienen al caso de momento)

El punto es que mi método es con toda probabilidad innecesariamente
complicado, y posiblemente hay mejores maneras de hacer las cosas, que
yo desconozco.

> ¿Cual es tu experiencia pasando a vcd, svcd y tal?  ¿Tienes
> controlado el asunto de la conversión de tamaños hacia svcd?, porque
> pasar de 16:9 a svcd tiene su miga, yo lo veo feo, cuando lo adapta.

Bueno, mira, varias cosas que cualquiera podría decirte:

VCD se ve feo, a menos que tu original tenga mucha calidad y comprimas
con mucho CPU.  Y ni siquiera es mucho más compacto que SVCD.  SVCD se
ve muy bien.  Sin embargo, la diferencia en tamaño y tiempo de
codificación es significativa.  Por ello, en ocasiones opto por hacer
dos VCDs en vez de tres SVCDs.

El asunto del 16:9 no es realmente un problema, aunque confieso no
haberlo usado mucho (realmente yo no suelo recodificar DVDs, sino
video digital creado por mi mismo).  Meter un 'yuvscaler -M WIDE2VCD'
ó 'yuvscaler -MWIDE2STD -O SVCD' en la pipa del video debería ser
suficiente.

Podría comentarte también del "3-2 pulldown", para convertir cine o
PAL (24/25 fps) a NTSC--pero me imagino que eso no es un problema por
allá por donde vives :-)

> ¿Y cuando no te cabe en un CD, como haces para cortar en el punto
> que tu quieras? no digo pasándole al programa la opción de que corte
> al llegar a 700 megas, sino al final de una escena..

Depende del origen.  Cuando el video procede de una cámara digital
(e.g., está en MJPEG, un formato en el que cada frame se codifica
independientemente, sin interpolación temporal), lo más fácil es
cortarlo con glav e introducirlo a las pipas de mjpegtools con
lav2yuv.  Este método es el mejor: tienes control absoluto de la
edición, y es simple.  Pero es muy raro que encuentres este formato en
la Internet, porque la compresión es muy mala.

Cuando el origen es MPEG (un caso raro, supongo, porque se perdería
muchísimo al recodificar), el mencionado mpgtx hace el truco.  En
cualquier otro caso, uso mplayer, con las opciones -frames y/o -ss
para controlar el inicio y fin de la reproducción.  Es fácil encontrar
de manera grosera los puntos donde hay que cortar (en tiempo y
frames), examinando la salida de consola de mplayer mientras
reproduce.

Usar mplayer para recodificar video quiere decir, esencialmente, usar
'-ao pcm -vo yuv4mpeg', previa creación de un par de FIFOs para
redirigir el audio y el video a las pipas de preprocesamiento y
codificación.  Esto último es completamente opcional, pero en general
procuro entubar todo lo que sea posible para no pasar por archivos en
disco (el espacio en disco es barato, pero no TAN barato).

Ahora, este último método introduce dos problemas.  El primero es que,
aún cuando mplayer es fantástico en cuanto a calidad de reproducción y
formatos soportados, esas opciones -ss / -frames no son nada precisas.
De manera que este método no sirve para edición seria.  Para videos
caseros, sin embargo, normalmente uso mplayer para cortar de manera
grosera, y luego hago un corte fino sobre la pipa de video con
"yuvcutter", un animalito escrito originalmente por un caballero
Philipp Zabel, modificado un poco por este servidor tuyo (y que por
supuesto te envío cuando gustes, si te interesa).  Es un programa muy
simple, de apenas un par de pantallas de código.

Sí, yo sé, no deja de ser un procedimiento artesanal, de prueba y
error, aunque a mi me resulta suficiente.  Quizá habría que probar con
gstreamer, en vez de mplayer... la última vez que probé, sin embargo,
mplayer era indiscutiblemente la única opción práctica.

El segundo problema es de sincronización del audio.  Usualmente la
opción -O de mplex es todo lo que hace falta.  En casos serios, he
llegado a cortar el audio manualmente son sox, pero realmente no creo
que sea necesario.

> He probado el avidemux, pero no me funcionaba para un video
> codificado con divx 5.01, no lo leía bien, y probé con el transcode,
> del cual encontré unos scripts y aprendí como se usaba, lo que me
> falta es la experiencia de perder algunos días/semanas (pq con lo
> que tarda) probando.

La regla es: si lo puedes ver con mplayer, lo puedes recodificar.  Lo
cual aplica incluso para "streams" de web.

> ¿Me puedes dar algún consejillo con respecto a eso? (todo
> relacionado Debian GNU/Linux por supuesto, no nos vayamos a salir de
> la lista ;-))

Naturalmente :-)

> 
> lo que uso ahora es :
> 
> $transcode -i "path/fichero.avi" -V -x mplayer -y mpeg -F
> s,3,./template -Z 480x628 -Y --26,0,--26,0 --export_asr 2 -E 44100 -b
> 128 -o /path/nombre_destino
> 
> me hace un mpa y un m2v, luego:
> 
> $ mplex -f 4 -o fichero.mpg -S 795 nombre_destino.m2v
> nombre_destino.mpa

Lo que yo suelo hacer es similar (ejemplos para VCD NTSC; haz los
ajustes para PAL, del otro lado del charco):

 # creo los FIFOs
 mkfifo stream.yuv
 mkfifo audiodump.wav

 # prepara la pipa de codificacion de audio
 cat audiodump.wav | sox -t wav - -t wav -r 44100 - resample -ql |\
  nice toolame -s 44.1 -b 224 -m s -p 2 /dev/stdin out.mp2&
 # prepara la pipa de codificación de video
 cat stream.yuv | nice yuvdenoise |\
  nice yuvscaler -I ACTIVE_432x328+8+4 -M BICUBIC -O VCD -n n |\
  nice mpeg2enc -a 2 -n n -F 4 -4 2 -2 1 -B 250 -s -f 1 -o out.m1v&

 # inicia la decodificación
 mplayer -nocache -ni -frames 123456 -ao pcm -vo yuv4mpeg input.avi

Y, al terminar la codificación del audio y el video,

 mplex -f 1 -O 250 -o out.mpg out.m1v out.mp2

(es un fastidio no poder pipear mplex, pero hasta donde sé no es fácil
sin alterar sustancialmente el programa)

> Que valores usas para el bitrate de video y de sonido? y el quantum?
> cuál es a tu juicio la mejor relación calidad / compensación?

Ejemplos arriba.  Nota la ausencia de -S en mplex (esto casi seguro de
que realmente no quieres esa opción), y el uso de -B en mpeg2enc.

Sobre ese "quantum", si te refieres al "quantization" de mpeg2enc, yo
no lo uso (genera streams de bitrate variable, con los que algunos
fierros reproductores hacen feo).  En vez de ello, la calidad la
controlo alterando el criterio con el que el codificador descarta
malos candidatos durante la estimación de movimiento (opciones -4 y
-2).  Las opciones de arriba son, en mi opinión, las adecuadas para un
VCD de buena calidad (-4 1 sería mejor, pero realmente yo no soy capaz
de ver el efecto, y sí requiere sustancialmente más tiempo de CPU).
Un "preview" rápido lo consigues con -4 4 -2 4.  Estas opciones no
comprometen la compatibilidad de tu stream con reproductores
chapuceros.

> uf! son muchas preguntas, ya lo sé, responde sólo a lo que quieras.

Listo, ahí tienes.  Un último tip: no es que este método se pueda
"distribuir" en una granja de CPUs... pero lo que casi siempre hago es
separar la codificación del audio y el video en CPUs distintos.  Ésto
es trivial insertando netcat en las pipas, e.g.:

Host A (encoder):

 nc -p 9999 -l -w 3 | nice yuvdenoise |\
  nice yuvscaler -I ACTIVE_432x328+8+4 -M BICUBIC -O VCD -n n |\
  nice mpeg2enc -a 2 -n n -F 4 -4 2 -2 1 -B 250 -s -f 1 -o out.m1v

Host B (decoder):

 mkfifo stream.yuv
 mplayer -nocache -ni -frames 123456 -ao pcm -vo yuv4mpeg input.avi&
 cat stream.yuv | nc -w 3 192.168.1.2 9999

(la pipa de audio no se muestra por simplicidad)

Espero que algo de ésto te sirva.  Aparte de la codificación, quizá te
interese poner menúes en tus VCDs, generar secuencias de créditos,
etc.  Para algunasde esas cosas tengo un par de truquitos, igual de
rococó que éstos, pero efectivos.  Aunque probablemente lo mejor sea
no discutirlos en listas de Debian.

En cualquier caso, si me disculpas, ahora mismo *realmente* tengo que
ponerme a trabajar :-)

 -CR



Reply to: