Ir al contenido principal

Editando vídeos desde la consola de GNU/Linux

Supongamos que partimos de un vídeo en formato DV (formato sin compresión habitual en las cámaras de vídeo) con la grabación completa y deseamos un fragmento. Por lo tanto, lo primero será reproducirlo para ver en que instantes de tiempo vamos a realizar los cortes. Tendremos que anotar el tiempo en que se inicia y la duración del fragmento que deseamos, todo en segundos.

Para extraer el fragmento se puede utilizar la herramienta avconv  de audio y vídeo del proyecto Libav, es un proyecto de software libre para la manipulación de datos multimedia.

Su instalación en Ubuntu es muy sencilla:
sudo apt-get install libav-tools


Para trocear un vídeo utilizaremos:

avconv -i video.dv -vcodec copy --ss <inicio-en-segundos> -t <duración-en-segundos> -acodec copy trozo.dv


Probablemente el fragmento de vídeo en formato DV ocupe mucho espacio, puede ser interesante reducir su peso y perder la menor calidad posible, para ello una buena opción puede ser el codec de vídeo H.264/MPEG-4 AVC.

Convertir un vídeo a ffv1 y pcm_s16le para preservación:
avconv -vsync passthrough -i trozo.dv -vcodec ffv1 -g 1 -acodec pcm_s16le -map 0:v -map 0:a trozo.mkv


Convertir un vídeo a H.264/MPEG-4 AVC:

avconv -i trozo.dv -vcodec libx264 trozo.mp4

También nos puede interesar convertir el video a WebM, un formato de audio y vídeo diseñado libre de royaltis para su utilización en HTML5,  el proyecto está respaldado por Google.

Convertir un vídeo a WebM:

avconv -i trozo.dv trozo.webm

En algunas ocasiones nos podemos encontrar que el vídeo sólo tiene un canal de audio grabado, es decir, sólo escuchamos el sonido por uno de nuestros altavoces. Para poder solucionarlo podemos utilizar la herramienta Sound eXchange (SoX), un editor de audio desde la línea de comandos publicado con licencia GNU por Chris Bagwell.

Primero habrá que extraer el audio del fragmento de vídeo, para ello haremos uso nuevamente de la herramienta avconv y lo pasaremos al formato FLAC (Free Lossless Audio Codec), FLAC es un codec de audio de baja compresión sin perdida de información, a diferencia de MP3.
FLAC es un formato abierto y libre de royaltis, soporta metadatos, posicionamiento rápido y almacenar la imagen de portada.

Extraer el audio de un vídeo:
avconv -i trozo.mp4 -f flac audio.flac

Unir varios vídeos en uno:mencoder -oac copy -ovc copy -o final.VOB trozo1.VOB trozo2.VOB

Duplicar el audio de un canal en el otro y aumentar el volumen al doble:
sox -v 2.0  audio.flac audio-completo.flac channels 1

Sox nos avisará en el caso que el aumento del volumen produzca saturación del canal, indicando el número de ondas que se han recortado en la operación. Un ejemplo de esta situación: sox WARN sox: `audio.flac' balancing clipped 638 samples; decrease volume?

Ahora toca incorporar el nuevo audio al trozo del vídeo del cual lo obtuvimos. Para ello utilizaremos avconv, donde le facilitaremos como flujo de vídeo (-i trozo.mp4) el trozo de vídeo del que partíamos y como flujo de audio (-i audio-completo.flac) el audio con el canal duplicado. También hay que indicarle a avconv que el codec de vídeo sea H.264/MPEG-4 AVC (-vcodec libx264):

avconv -i trozo.mp4 -i audio-completo.flac -map 0:0 -map 1:0 -vcodec libx264  trozo-final.mp4

En algunas ocasiones nos puede solicitar avconv un bit rate, en ese caso se lo podemos indicar de la siguiente forma para uno de 640kb/s:


avconv -i trozo.mp4 -i audio-completo.flac -map 0:0 -map 1:0 -vcodec libx264 -ab 640k trozo-final.mp4



Para duplicar el audio de varios vídeos se puede utilizar el siguiente script en python:


#!/usr/bin/python
import sys, os
 
for i in range(1,len(sys.argv)):
    fichero= str(sys.argv[i])
    fichero_salida="%s-st.%s" % (fichero.rsplit(".",1)[0],fichero.rsplit(".",1)[1])
    os.system("avconv -i %s -f flac kk.flac" % fichero)
    os.system("sox -v 2.0  kk.flac kk2.flac channels 1")
    os.system("avconv -i %s -i kk2.flac -map 0:0 -map 1:0 -vcodec libx264  %s" % (fichero,fichero_salida))
    if os.path.exists("kk.flac"):
      os.remove("kk.flac")
    if os.path.exists("kk2.flac"):
      os.remove("kk2.flac"
 
 
El script espera que le facilitemos los vídeos a procesar como argumentos, y los convertirá a vídeos con el codec H.264/MPEG-4 AVC, el sonido en los dos canales y con el volumen duplicado.

Rotar un vídeo 

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
  

Capturar la pantalla en vídeo (screencast)
Tenemos que indicarle a avconv que tome la fuente del servidor Xorg (-f x11grab): avconv -f x11grab -s 1366x768 -r 25 -i :0.0 -same_quant video.mp4

Comentarios

Entradas populares de este blog

Instalación Django en NAS Synology con FastCGI

Los NAS Synology no traen el módulo de apache mod-wsgi por lo que he utilizado el módulo mod-fastcgi en su lugar para hacer funcionar Django en los NAS Synology. Necesitamos del módulo mysql-python , para su instalación podemos seguir la entrada que ya se publicó en este mismo blog:  http://ilizaran.blogspot.com.es/2014/09/instalacion-del-modulo-mysql-python-en.html De la instalación de mysql-python ya tendremos instalado pip en el NAS por lo que podremos instalar Django con algunos módulos necesarios: pip install Django pip install setuptools pip install flup Para saber que la instalación de Django ha sido correcta y verificar la versión podemos realizar: python import django  django.VERSION Ahora modifcamos la configuración de apache editando el fichero /etc/httpd/conf/httpd.conf-user  para hacer accesible los ficheros css, imágenes y javascript de la parte administrativa de Django, por lo que añadimos: Alias /static/admin /usr/local/packages/@appstore/Python/usr/l

Calcular en Mysql el primer y último día del mes

SELECT DATE_FORMAT(now(),'%Y-%m-01') AS first_day; SELECT date_add(date_add(LAST_DAY(now()),interval 1 DAY),interval -1 MONTH) AS first_day; SELECT LAST_DAY(now()) AS last_day; Calcular en Mysql el primer y último día del mes anterior: SELECT date_add(date_add(LAST_DAY(now()),interval 1 DAY),interval -2 MONTH) AS first_day; SELECT LAST_DAY(date_add(last_day(now()),interval -1 MONTH)) AS last_day;

Instalación del módulo mysql-python en NAS Synology

Instalar gcc en Synology Para la instalación de mysql-python es necesario el compilador gcc, por lo que lo obtendremos de Synology Open Source Project (http://sourceforge.net/projects/dsgpl). El paquete a descargar dependerá de la versión de NAS Synology que tengamos, por lo que tendremos que utilizara el comando: uname -a para conocer la versión de nuestro kernel y arquitectura instalada y descargar el paquete correspondiente. En mi caso he descargado: gcc463_glibc213_i686_cedarview-GPL.tgz pues mi equipo muestra cedarview y i686. Ahora lo descargamos y lo extraemos: cd /usr/local http://kent.dl.sourceforge.net/project/dsgpl/DSM%205.2%20Tool%20Chains/Intel%20x86%20Linux%203.2.40%20%28Cedarview%29/cedarview-gcc463_glibc213_i686_patched-GPL.txz tar -xvJf cedarview-gcc463_glibc213_i686_patched-GPL.txz rm cedarview-gcc463_glibc213_i686_patched-GPL.txz Instalación de las fuentes de Mysql Synology utiliza MariaDB, pero para la compilación del módulo de python podemos utiliz