Ir al contenido principal

Algunos trucos de ffmpeg

Extraer parte de un video

Para copiar de un video desde X hasta Y segundos (en formato 00:00:00) haremos lo siguiente:
ffmpeg \
  i archivooriginal.mp4\
   -ss X \
  -to Y\
  -c:v copy \
  -c:a copy \
  nuevoarchivorecorte.mp4
Para copiar de un video Y segundos a partir del segundo X haremos lo siguiente:
ffmpeg i archivooriginal.mp4 -ss X -t Y -c:v copy -c:a copy nuevoarchivorecorte.mp4
Una explicación es la siguiente:
ffmpeg -i input.mp4 -ss 00:00:00 -to 00:10:00 -c copy output1.mp4
ffmpeg -i input.mp4 -ss 00:10:00 -to 00:20:00 -c copy output2.mp4

/**
* -i nombre -> Archivo de ingreso
* -ss X -> En qué segundos comenzar, formato número de segundos o hh:mm:ss
* -to Y -> tiempo de finalización, formato número de segundos o in hh:mm:ss
* -c copy -> copiar códec
*/

Extirpar una parte del video

Lo siguiente evita eso de re codificar el video, pero podés sólo cortar según los keyframes; así que talvés no puedas elegir la duración que quisieras:
  1. Crear segmentos:
ffmpeg  -t 00:11:00 -i input.mp4 -map 0 -c copy segment1.mp4
ffmpeg -ss 00:11:10 -i input.mp4 -map 0 -c copy segment2.mp4
  1. Crear input.txt:
file 'segment1.mp4'
file 'segment2.mp4'
  1. Concatenar con el concat demuxer:
ffmpeg -f concat -i input.txt -map 0 -c copy output.mp4
En la misma solución (https://askubuntu.com/questions/977162/how-to-remove-a-few-seconds-from-mp4-file-using-ffmpeg) ofrecen la guía para realizar lo mismo pero con re-codificación del video nuevo:
ffmpeg -i input.mp4 -filter_complex \
  "[0:v]trim=end=660,setpts=N/FRAME_RATE/TB[v0]; \
   [0:a]atrim=end=660,asetpts=N/SR/TB[a0]; \
   [0:v]trim=start=670,setpts=N/FRAME_RATE/TB[v1]; \
   [0:a]atrim=start=670,asetpts=N/SR/TB[a1]; \
   [v0][a0][v1][a1]concat=n=2:v=1:a=1[v][a]" \
  -map "[v]" -map "[a]" output.mp4
  • (a)trim will allow you to choose your clips.
  • (a)setpts resets timestamps.
  • concat concatenates the clips.
Para extraer una imagen de un video en el segundo X podemos realizar lo siguiente:
ffmpeg -ss X -i videooriginal.mp4 -frames:v 1 imagen.jpg

Averiguar dimensiones

ffprobe -v error -select_streams v:0 -show_entries stream=width,height archivooriginal.mp4 

Mostrar cámara web en una ventanita de X dimensiones:

 ffplay /dev/video0 -s 340x200

Written with StackEdit.

Comentarios

Entradas populares de este blog

Probando ChatGPT - Mapa conceptual con Mermaid

 Había conversado con ChatGPT acerca de cuidado de las plantas e hidroponía. Luego de unos días me di cuenta que quizás también podría saber acerca de crear Mapas conceptuales. Salió lo siguiente; le falta un concepto para crear correctamente mapas conceptuales (la relación entre los conceptos), pero podría ser algo para ayudarnos a corregir mejor. El texto original era el que cito a continuación, pero le agregué explícitamente que me armara un "mapa conceptual" utilizando el lenguaje Mermaid, un lenguaje descriptivo que permite construir gráficos diversos, entre ellos Mapas conceptuales, generando un archivo SVG. ``` Hacé un mapa conceptual en lenguaje Mermaid con el siguiente texto, redactado anteriormente: "La hidroponía es un método de cultivo que se utiliza para cultivar plantas sin suelo utilizando una solución nutriente y agua. Algunas plantas pueden cultivarse con éxito mediante hidroponía, mientras que otras necesitan el suelo para crecer y prosperar. De las pl...

Conectar a Servidor Node.JS desde VB6 o VBA

El presente código sirve tanto para Visual Basic 6.0 (sí, todavía sirve, todavía sirve!) como para Visual Basic para Aplicaciones (Excel o VBA). ' Si estamos en Visual Basic para Aplicaciones agregar la referencia ' WinHTTP, en el menú Herramientas, Referencias, Microsoft WinHTTP Services Function Solicitar( _ ByVal URLBase As String _ , Optional ByVal Puerto As Integer = 80 _ , Optional ByVal Seccion As String = "" _ , Optional ByVal Metodo As String = "GET" _ ) As String On Error GoTo solucion #If VBA6 Then Dim objXML As New WinHttpRequest #ElseIf Win32 Then Dim objXML As Object Set objXML = CreateObject("MSXML2.ServerXMLHTTP") #End If objXML.Open Metodo, URLBase & ":" & Puerto & "/" & Seccion, False objXML.send If (objXML.Status = 404) Then Solicitar = "404 Error" Else Solicitar = objXML.responseText End If Se...