User Tools

Site Tools


comandos_ffmpeg_utiles

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
comandos_ffmpeg_utiles [2021/09/23 20:47] busindrecomandos_ffmpeg_utiles [2022/07/16 22:45] (current) busindre
Line 88: Line 88:
 <code bash>ffmpeg -i video.flv animated.gif.mp4</code> <code bash>ffmpeg -i video.flv animated.gif.mp4</code>
  
-**Transformar vídeo en fichero de audio / Extraer audio**.+**Transformar vídeo en fichero de audio / Extraer stream de audio / Eliminar streams de audio**.
 <code bash># Extraer el audio sin codificar, por lo tanto el fichero tendrá el formato original (mp3, ogg, etc) y la extensión no juega ningún papel relevante. <code bash># Extraer el audio sin codificar, por lo tanto el fichero tendrá el formato original (mp3, ogg, etc) y la extensión no juega ningún papel relevante.
 ffmpeg -i input-video.avi -vn -acodec copy solo_audio.ogg ffmpeg -i input-video.avi -vn -acodec copy solo_audio.ogg
 # Extraer audio codificando para cambiarlo de formato, por ejemplo en mp3 sin perdidas de calidad con respecto al original. # Extraer audio codificando para cambiarlo de formato, por ejemplo en mp3 sin perdidas de calidad con respecto al original.
-ffmpeg -i sample.avi -q:a 0 -map a sample.mp3</code>+ffmpeg -i sample.avi -q:a 0 -map a sample.mp3 
 + 
 +# Eliminar todos los streams de audio. 
 +ffmpeg -i input.avi -map 0 -map -0:a -c copy output_si_sonido.avi 
 + 
 +# Eliminar todos los streams de audio excepto algunos (el número 3 y 6 para el ejemplo). 
 +ffmpeg -i input.avi -map 0 -map -0:a:3 -map -0:a:6 -c copy output_con_dos_streams.avi 
 + 
 +# Dejar solo el stream número 10. (-map 0 -map -0:a:9 Selecciona todos y luego habilita el stream de audio número 9). 
 +ffmpeg -i input.avi -map 0 -map -0:a:9 -c copy output_sonido_concreto.avi 
 +</code>
  
 **Cambiar entre formatos de vídeo sin perder calidad**. **Cambiar entre formatos de vídeo sin perder calidad**.
Line 213: Line 223:
  
 <code bash># Se monta una imagen de DVD en el directorio /mnt/test/ y se identifican qué ficheros contienen la película, que normalmente son los que más tamaño tienen. <code bash># Se monta una imagen de DVD en el directorio /mnt/test/ y se identifican qué ficheros contienen la película, que normalmente son los que más tamaño tienen.
- 
 mount -o loop Evangelion.iso  /mnt/test/ mount -o loop Evangelion.iso  /mnt/test/
  
Line 234: Line 243:
 cat /mnt/test/VIDEO_TS/VTS_01_1.VOB /mnt/test/VIDEO_TS/VTS_01_2.VOB  /mnt/test/VIDEO_TS/VTS_01_3.VOB /mnt/test/VIDEO_TS/VTS_01_4.VOB /mnt/test/VIDEO_TS/VTS_01_5.VOB > $HOME/evangelion.vob cat /mnt/test/VIDEO_TS/VTS_01_1.VOB /mnt/test/VIDEO_TS/VTS_01_2.VOB  /mnt/test/VIDEO_TS/VTS_01_3.VOB /mnt/test/VIDEO_TS/VTS_01_4.VOB /mnt/test/VIDEO_TS/VTS_01_5.VOB > $HOME/evangelion.vob
  
-Mostramos la información sobre los Streams que componen el fichero. En este caso nos interesa el  Stream 0:1 (Vídeo de la película) y el 0:2 (idioma castellano). + 
-Usamos -probesize 4G -analyzeduration 4G con el tamaño de la imagen para que ffmpeg busque bien todos los streams.+Mostrar la información sobre los Streams que componen el fichero. En este caso interesa el  Stream 0:1 (Vídeo de la película) y el 0:2 (idioma castellano). 
 +Se usa "-probesize 4G -analyzeduration 4Gpara que ffmpeg busque bien todos los streams.
 ffmpeg -probesize 4G -analyzeduration 4G  -i $HOME/evangelion.vob ffmpeg -probesize 4G -analyzeduration 4G  -i $HOME/evangelion.vob
 ... ...
Line 249: Line 259:
   Stream #0:7[0x23]: Subtitle: dvd_subtitle   Stream #0:7[0x23]: Subtitle: dvd_subtitle
  
-# Generamos el fichero mkv dependiendo del idioma que queramos. 
  
 +# Se genera el fichero mkv dependiendo del idioma que queramos.
 ffmpeg -i $HOME/evangelion.vob  -q:a 0 -q:v 0  -map 0:1 -map 0:2  Evangelion_es.mkv # Castellano ffmpeg -i $HOME/evangelion.vob  -q:a 0 -q:v 0  -map 0:1 -map 0:2  Evangelion_es.mkv # Castellano
-ffmpeg -i $HOME/evangelion.vob  -q:a 0 -q:v 0  -map 0:1 -map 0: Evangelion_jp.mkv # Japones.</code>+ffmpeg -i $HOME/evangelion.vob  -q:a 0 -q:v 0  -map 0:1 -map 0: Evangelion_jp.mkv # Japones.</code>
  
 Se podrían incluir subtitulos si se quisiera también usando las opciones de mapeo. En este caso no se conoce qué idioma tienen los subtitulos o los streams de audio, por lo que lo mejor es hacer un par de pruebas hasta que sean identificados y podamos crear el fichero como se crea conveniente, por ejemplo idioma japones pero subtítulos en español. Se podrían incluir subtitulos si se quisiera también usando las opciones de mapeo. En este caso no se conoce qué idioma tienen los subtitulos o los streams de audio, por lo que lo mejor es hacer un par de pruebas hasta que sean identificados y podamos crear el fichero como se crea conveniente, por ejemplo idioma japones pero subtítulos en español.
Line 283: Line 293:
 ffmpeg -i video.mpg -ab 26k -f flv video1.flv</code> ffmpeg -i video.mpg -ab 26k -f flv video1.flv</code>
  
-**Transformar avi en mpeg y limitar el fichero resultante a un tamaño determinado** (2 Gbytes).+**Transformar ficheros avi en mpeg y limitar el fichero resultante a un tamaño determinado** (2 Gbytes).
 <code bash>ffmpeg -i video.avi -target pal-dvd -ps 2000000000 -aspect 16:9 video.mpeg</code> <code bash>ffmpeg -i video.avi -target pal-dvd -ps 2000000000 -aspect 16:9 video.mpeg</code>
  
-**Unir fichero de video con fichero de audio**.+**Unir / Fusionar fichero de video con fichero de audio**.
 <code bash>ffmpeg -i audio.mp3 -i video.avi video_audio_mix.mpg</code> <code bash>ffmpeg -i audio.mp3 -i video.avi video_audio_mix.mpg</code>
  
Line 315: Line 325:
 **Agregar subtítulos mediante un fichero srt a un vídeo**. **Agregar subtítulos mediante un fichero srt a un vídeo**.
 <code bash>ffmpeg -i video.mp4 -i subtitles.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast video-output.mkv</code> <code bash>ffmpeg -i video.mp4 -i subtitles.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast video-output.mkv</code>
 +
 +Eliminar subtitulos y cualquier otra cosa que no sea audio y vídeo.
 +<code bash>ffmpeg -i input -map 0:v -map 0:a -c copy output</code>
  
 **Estabilizar videos grabados con temblores (dos pasos). Adaptar valor de "shakiness" según necesidad.** **Estabilizar videos grabados con temblores (dos pasos). Adaptar valor de "shakiness" según necesidad.**
Line 463: Line 476:
 Cuando un vídeo se reproduce bien en el sistema operativo con aplicaciones tipo mplayer, VLC, etc pero este tiene problemas al reproducirse en un dispositivo supuestamente compatible con el formato, como una smart TV. Una posible solución es que ffmpeg genere un nuevo fichero a partir del original (en el ejemplo se respeta la calidad de audio y vídeo). Cuando un vídeo se reproduce bien en el sistema operativo con aplicaciones tipo mplayer, VLC, etc pero este tiene problemas al reproducirse en un dispositivo supuestamente compatible con el formato, como una smart TV. Una posible solución es que ffmpeg genere un nuevo fichero a partir del original (en el ejemplo se respeta la calidad de audio y vídeo).
 <code bash>ffmpeg -i fichero_problemático.avi -c:v copy -c:a copy fichero.avi</code> <code bash>ffmpeg -i fichero_problemático.avi -c:v copy -c:a copy fichero.avi</code>
 +
 +** Girar / Rotar un vídeo** 
 +
 +Depende del dispositivo de grabación y su uso los vídeos pueden ser grabados en vertical (90° o 270°) u horizontal (0° o 270°). Los 0° se considera cuando se filma en horizontal, teniendo la parte del micrófono a la derecha y la parte del altavoz en la izquierda. Los valores de rotación son incluidos como metadatos en los vídeos.
 +
 +Si simplemente se ha grabado un vídeo con un dispositivo móvil y el giroscopio ha provocado que la filmacion incluya información sobre rotación que dificulta su visualización. La solución es borrar el metadato concreto para que pueda reproducirse en el dispositivo. En casos donde hay un vídeo horizontal grabado desde un celular y debe verse en horizontal en otro dispositivo, por ejemplo un laptop, se debe tener en cuenta otros factores.
 +
 +Para transformar un vídeo de horizontal a vertical (o al contrario) se deben modificar los valores de rotación y luego cambiar el alto y ancho del vídeo. Lo primero que debe hacerse es obteber información sobre la rotación del vídeo y su resolución.
 +<code bash># Rotación de 90.00 y resolución 1280x720.
 +ffmpeg -i fichero.MOV 2>&1 | grep "displaymatrix\|Video:"
 +
 +  Stream #0:0[0x1](und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1280x720, 10548 kb/s, 23.99 fps, 23.98 tbr, 600 tbn (default)
 +      displaymatrix: rotation of -90.00 degrees</code>
 +
 +Eliminar rotación.
 +<code bash>ffmpeg -i fichero.mov -c copy -metadata:s:v:0 rotate=0 fichero_sin_rotacion.mov</code>
 +
 +Rotar el vídeo usando la opción transpose. Se pueden usar números o bien los nombres cclock_flip, clock_flip, clock y cclock. Esto obliga a una recodificación del vídeo por lo que puede jugarse con valores que definan la calidad del fichero resultante.
 +<code># Parámetro -vf "transpose=0"
 +
 +0 cclock_flip En sentido contrario a las agujas del reloj y en sentido vertical (por defecto).
 +3 clock_flip  En el sentido de las agujas del reloj y en sentido vertical.
 +1 clock       En el sentido de las agujas del reloj.
 +2 cclock      En sentido contrario a las agujas del reloj.</code>
 +
 +<code bash> # Rotación de 90° a la derecha.
 +ffmpeg -i fichero_sin_rotacion.mov -vf "transpose=clock" -c:a copy fichero_rotacion_ok.mov
 +# Rotación de 180° a la izquierda.
 +ffmpeg -i fichero_sin_rotacion.mov -vf "transpose=2,transpose=2" -c:a copy fichero_rotacion_ok.mov
 +# Rotación de 180° a la derecha.
 +ffmpeg -i fichero_sin_rotacion.mov -vf "transpose=1,transpose=1" -c:a copy fichero_rotacion_ok.mov
 +</code>
 +
 +Si ahora se usa "ffmpeg -i" para obtener información sobre el vídeo no debería existir rotación y la resolución debería haber sido invertida.
 +
  
 **Streaming básico con ffmpeg / mplayer**: https://trac.ffmpeg.org/wiki/StreamingGuide **Streaming básico con ffmpeg / mplayer**: https://trac.ffmpeg.org/wiki/StreamingGuide
comandos_ffmpeg_utiles.1632422831.txt.gz · Last modified: 2021/09/23 20:47 by busindre