lunes, 6 de mayo de 2013

FFmpeg: deja que tu NAS convierta los vídeos a otros formatos

Una herramienta que podemos conseguir para nuestra NAS si está basada en Linux es FFmpeg, un conversor de vídeo archiconocido que lógicamente debía tener su versión en este sistema operativo, en el caso de Synology lo podemos instalar vía iPGK y para su uso deberemos acudir a la consola o bien lanzar los comandos vía SSH.



El uso de un conversor de vídeo instalado en nuestra NAS nos permite no tener que dedicar un ordenador para realizar los procesos de conversión de los archivos y que sea la NAS quien realice esas tareas de forma independiente, llegando incluso a estar programadas si realizamos el pertinente script.


En mi caso he usado esta herramienta cuando se me planteó la gran duda de pasar todos mis archivos de vídeo y películas a un formato que iTunes aceptase sin problemas, como es el mp4, puesto que actualmente tengo como reproductor multimedia un Apple TV  2G con jailbreak y tenía en mente pasarme al Apple TV 3G, aunque afortunadamente tras darle unas cuantas vueltas a la idea desde hace ya un tiempo me baso en la plataforma Xbmc tanto para reproducción como librería.

Mi experiencia personal no es muy amplia, conversiones esporádicas de archivos, principalmente al gran número de formatos que soporta FFmpeg y para probar el tema de librerías de Apple, pero el resultado es satisfactorio y nunca he tenido problemas, de hecho si miras las diferentes opciones de parámetros con las que puedes jugar puedes personalizar cualquier aspecto de configuración y redimensionado como bitrate, frecuencia, etc... y podría decir que apenas tuve problemas salvo por un factor decisivo para seguir usando la herramienta en cuestión: la CPU



Mi NAS está basada en una CPU tipo ARM, son unidades de procesamiento muy baratas y que rinden estupendamente, pero son justamente las tareas dedicadas a la codificación de vídeo las que piden más recursos de procesamiento y hay que andar con ojo al usar estos procesos en una NAS con ARM, personalmente a la hora de convertir archivos los mejores resultados calidad/tiempo de procesamiento los he obtenido al convertir a mp4.

Ejemplos:

- conversión simple de un formato avi por ejemplo a otro mpg en este caso:
ffmpeg -i archivo_original.avi archivo_convertido.mpg
- conversión simple de un formato avi a otro mpg manteniendo las mismas opciones de calidad:
ffmpeg -i archivo_original.avi -sameq archivo_convertido.mpg
- conversión simple de un formato a otro pero especificando hasta cuanto tiempo queremos que dure el video de salida:
ffmpeg -i archivo_original.avi -t 30 archivo_convertido.mpg

FFmpeg no es sólo una herramienta para convertir videos, puede trabajar igualmente con archivos de audio y permite tareas de codificación, streaming, fusión de vídeos con subtítulos y mucho más, pero recuerda que serán las tareas de conversión de video las que pesarán más para la CPU de tu NAS. A continuación tienes los diferentes parámetro que admite el programa y que hará que compruebes el nivel de detalle con el que puedes jugar a la hora de trabajar con archivos multimedia.

Main options:
-L show license
-h show help
-version show version
-formats show available formats, codecs, protocols, ...
-f fmt force format
-img img_fmt force image format
-i filename input file name
-y overwrite output files
-t duration set the recording time
-fs limit_size set the limit file size
-ss time_off set the start time offset
-itsoffset time_off set the input ts offset
-title string set the title
-timestamp time set the timestamp
-author string set the author
-copyright string set the copyright
-comment string set the comment
-v verbose control amount of logging
-target type specify target file type ("vcd", "svcd", "dvd", "dv", "pal-vcd", "ntsc-svcd", ...)
-dframes number set the number of data frames to record
-hq activate high quality settings
-scodec codec force subtitle codec ('copy' to copy stream)
-newsubtitle add a new subtitle stream to the current output stream
-slang code set the ISO 639 language code (3 letters) of the current subtitle stream

Video options:
-b bitrate set video bitrate (in kbit/s)
-vframes number set the number of video frames to record
-r rate set frame rate (Hz value, fraction or abbreviation)
-s size set frame size (WxH or abbreviation)
-aspect aspect set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-fixaspect fix aspect ratio
-croptop size set top crop band size (in pixels)
-cropbottom size set bottom crop band size (in pixels)
-cropleft size set left crop band size (in pixels)
-cropright size set right crop band size (in pixels)
-padtop size set top pad band size (in pixels)
-padbottom size set bottom pad band size (in pixels)
-padleft size set left pad band size (in pixels)
-padright size set right pad band size (in pixels)
-padcolor color set color of pad bands (Hex 000000 thru FFFFFF)
-vn disable video
-bt tolerance set video bitrate tolerance (in kbit/s)
-maxrate bitrate set max video bitrate tolerance (in kbit/s)
-minrate bitrate set min video bitrate tolerance (in kbit/s)
-bufsize size set ratecontrol buffer size (in kByte)
-vcodec codec force video codec ('copy' to copy stream)
-sameq use same video quality as source (implies VBR)
-pass n select the pass number (1 or 2)
-passlogfile file select two pass log file name
-newvideo add a new video stream to the current output stream

Advanced Video options:
-pix_fmt format set pixel format
-g gop_size set the group of picture size
-intra use only intra frames
-vdt n discard threshold
-qscale q use fixed video quantiser scale (VBR)
-qmin q min video quantiser scale (VBR)
-qmax q max video quantiser scale (VBR)
-lmin lambda min video lagrange factor (VBR)
-lmax lambda max video lagrange factor (VBR)
-mblmin q min macroblock quantiser scale (VBR)
-mblmax q max macroblock quantiser scale (VBR)
-qdiff q max difference between the quantiser scale (VBR)
-qblur blur video quantiser scale blur (VBR)
-qsquish squish how to keep quantiser between qmin and qmax (0 = clip, 1 = use differentiable function)
-qcomp compression video quantiser scale compression (VBR)
-rc_init_cplx complexity initial complexity for 1-pass encoding
-b_qfactor factor qp factor between p and b frames
-i_qfactor factor qp factor between p and i frames
-b_qoffset offset qp offset between p and b frames
-i_qoffset offset qp offset between p and i frames
-ibias bias intra quant bias
-pbias bias inter quant bias
-rc_eq equation set rate control equation
-rc_override override rate control override for specific intervals
-me method set motion estimation method
-dct_algo algo set dct algo
-idct_algo algo set idct algo
-me_threshold motion estimaton threshold
-mb_threshold macroblock threshold
-er n set error resilience
-ec bit_mask set error concealment
-bf frames use 'frames' B frames
-mbd mode macroblock decision
-mbcmp cmp function macroblock compare function
-ildctcmp cmp function ildct compare function
-subcmp cmp function subpel compare function
-cmp cmp function fullpel compare function
-precmp cmp function pre motion estimation compare function
-preme pre motion estimation
-lelim elim single coefficient elimination threshold for luminance (negative values also consider DC coefficient)
-celim elim single coefficient elimination threshold for chrominance (negative values also consider DC coefficient)
-lumi_mask luminance masking
-dark_mask darkness masking
-scplx_mask spatial complexity masking
-tcplx_mask temporal complexity masking
-p_mask inter masking
-4mv use four motion vector by macroblock (MPEG4)
-obmc use overlapped block motion compensation (h263+)
-lf use loop filter (h263+)
-part use data partitioning (MPEG4)
-bug param workaround not auto detected encoder bugs
-strict strictness how strictly to follow the standards
-deinterlace deinterlace pictures
-ildct force interlaced dct support in encoder (MPEG2/MPEG4)
-ilme force interlaced me support in encoder (MPEG2/MPEG4)
-psnr calculate PSNR of compressed frames
-vstats dump video coding statistics to file
-vhook module insert video processing module
-aic enable Advanced intra coding (h263+)
-aiv enable Alternative inter vlc (h263+)
-umv enable Unlimited Motion Vector (h263+)
-ssm enable Slice Structured mode (h263+)
-alt enable alternate scantable (MPEG2/MPEG4)
-qprd 
-cbp 
-trell enable trellis quantization
-mv0 try to encode each MB with MV=<0,0> and choose the better one (has no effect if mbd=0)
-naq normalize adaptive quantization
-cgop closed gop
-sgop strict gop
-noout skip bitstream encoding
-scan_offset enable SVCD Scan Offset placeholder
-qpel enable 1/4-pel
-intra_matrix matrix specify intra matrix coeffs
-inter_matrix matrix specify inter matrix coeffs
-top top=1/bottom=0/auto=-1 field first
-nr noise reduction
-qns quantization noise shaping
-sc_threshold threshold scene change threshold
-me_range range limit motion vectors range (1023 for DivX player)
-dc precision intra_dc_precision
-coder coder type
-context context model
-pred prediction method
-vprofile profile
-vlevel level
-nssew weight
-subq 
-mepc factor (1.0 = 256) motion estimation bitrate penalty compensation
-lowres 
-vtag fourcc/tag force video tag/fourcc
-skip_threshold threshold frame skip threshold
-skip_factor factor frame skip factor
-skip_exp exponent frame skip exponent
-skip_cmp compare function frame skip compare function
-gray encode/decode grayscale

Audio options:
-aframes number set the number of audio frames to record
-ab bitrate set audio bitrate (in kbit/s)
-ar rate set audio sampling rate (in Hz)
-ac channels set number of audio channels
-an disable audio
-acodec codec force audio codec ('copy' to copy stream)
-vol volume change audio volume (256=normal)
-newaudio add a new audio stream to the current output stream
-alang code set the ISO 639 language code (3 letters) of the current audio stream

Advanced Audio options:
-atag fourcc/tag force audio tag/fourcc

Subtitle options:
-scodec codec force subtitle codec ('copy' to copy stream)
-newsubtitle add a new subtitle stream to the current output stream
-slang code set the ISO 639 language code (3 letters) of the current subtitle stream

Audio/Video grab options:
-vd device set video grab device
-vc channel set video grab channel (DV1394 only)
-tvstd standard set television standard (NTSC, PAL (SECAM))
-ad device set audio device
-grab format request grabbing using
-gd device set grab device

Advanced options:
-map file:stream[:syncfile:syncstream] set input stream mapping
-map_****_data outfile:infile set **** data information of outfile from infile
-debug print specific debug info
-vismv visualize motion vectors
-benchmark add timings for benchmarking
-dump dump each input packet
-hex when dumping packets, also dump the payload
-bitexact only use bit exact algorithms (for codec testing)
-re read input at native frame rate
-loop loop (current only works with images)
-loop_output number of times to loop output in formats that support looping (0 loops forever)
-threads count thread count
-vsync video: sync method
-async audio: sync method
-vglobal video: global header storage type
-copyts: copy timestamps
-shortest finish: encoding within shortest input
-b_strategy: strategy  dynamic b frame selection strategy
-ps size: set packet size in bits
-error rate: error rate
-muxrate rate: set mux rate
-packetsize size: set packet size
-muxdelay seconds: set the maximum demux-decode delay
-muxpreload seconds: set the initial demux-decode delay
-muxab bitrate: set the audio bitrate in mux tag (in kbit/s)
-muxvb bitrate: set the video bitrate in mux tag (in kbit/s)

En la Wikipedia tienes más información sobre esta herramienta y los diferentes links oficiales y no oficiales que podrán ayudarte a desarrollar la herramienta, trabajar con scripts, etc.




2 comentarios:

Hola, muchas gracias por el artículo.
Llevo tiempo queriendo poder descargar vídeos en el iPad para poder verlos cuando no tenga conexión y poder realizarlo todo de forma sencilla... He instalado la beta del DSM5 para poder descargar desde la misma aplicación... pero oh sorpresa, sólo permite descargar los videos en H264, MPEG4 y el codec de audio AAC-LC... así que parece que solo me queda convertirlo a dicho formato y me gustaría poder hacerlo desde el mismo DS213...
¿Me podrías facilitar los parámetros que usas para hacer la conversión?

Muchas gracias :)

hola! siguiendo los manuales de tu web tengo instalado IPKGui, pero al entrar en ese programa no me sale ningun paquete para instalar, donde puedo añadir los repositorios?
Un saludo.

Publicar un comentario

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More