FFmpeg: su potente ayudante de video / audio en su aplicación

Contenidos

Este artículo fue publicado como parte del Blogatón de ciencia de datos

El nombre está inspirado en MPEG, que significa Moving Picture Expert Group. El FF significa Fast Forward. El grupo MPEG es la alianza de grupos de trabajo detrás del establecimiento de muchos de los estándares de video esenciales en la actualidad, incluido el formato MP4, con el que todos estamos familiarizados.

Resultados

  1. ¿Qué es FFmpeg?
  2. ¿Por qué la gente usa FFmpeg?
  3. Cómo configurar FFmpeg en Windows, Ubuntu y macOS.
  4. Las bibliotecas están disponibles en FFmpeg para manipulaciones de medios.
  5. Herramientas con las que viene FFmpeg para aplicaciones de línea de comandos.
  6. Uso y ejemplos para FFprobe y FFplay.

¿Por qué la gente usa FFmpeg?

A menudo se lo conoce como la navaja suiza de la transcodificación o transmisión de medios. Podemos usar FFmpeg para realizar muchas funciones. El código está escrito en lenguaje C y optimizado para un mejor rendimiento. Sus comandos son simples de ejecutar. Una vez que se familiarice con los conceptos, es muy flexible para todos los filtros y opciones que puede utilizar para satisfacer sus necesidades.

FFmpeg admite una amplia gama de códigos, formatos, dispositivos y protocolos, lo que lo convierte en una opción ideal como motor de transcodificación. A diferencia de muchos proyectos descontinuados, todavía está en desarrollo activo durante más de 20 años. Existe una gran comunidad de desarrolladores, usuarios y colaboradores que constantemente desarrollan nuevas funciones y correcciones.
FFmpeg se ha utilizado en el procesamiento central para plataformas de video como YouTube e iTunes. La mayoría de nosotros usamos un reproductor multimedia como VLC para reproducir archivos de video. VLC usa bibliotecas FFmpeg como su núcleo. Algunos editores de video y aplicaciones móviles también usan FFmpeg bajo el capó.

Configuración de FFmpeg en Windows, Ubuntu y macOS

Hay algunas cosas que debe saber antes de configurar FFmpeg. No hay una compilación oficial para ningún sistema operativo. Pero es un proyecto de código abierto, que puede obtener del código fuente de FFmpeg en Internet. Por lo tanto, puede optar por crearlo usted mismo a partir del código fuente. Puede descargar una instantánea del código fuente actual aquí o hacer un pago desde su repositorio de git y siga las instrucciones para compilarlo en su máquina. Esto puede ser un poco complejo y lento y puede requerir que comprenda y elija algunas opciones de configuración. También puede ser necesario instalar herramientas y compiladores adicionales al principio. Entonces, a menos que tenga una buena razón para construirlo usted mismo, es posible que no desee seguir esta ruta.

En su lugar, puede optar por descargar e instalar un paquete FFmpeg precompilado para su sistema operativo. Hay dos formas de configurar estos binarios precompilados. Si tiene un administrador de paquetes como APT en Ubuntu y Homebrew en macOS, es más fácil de usar ya que se encarga de descargar FFmpeg y sus dependencias.

Mantengamos las cosas lo más simples posible y elijamos la forma más sencilla de empezar. Los procedimientos a continuación muestran cómo puede realizar la configuración mediante paquetes precompilados.

Mac OS

En macOS, la forma más sencilla de instalar FFmpeg es mediante Homebrew. Asegúrese de haber instalado Homebrew en su macOS, o puede seguir este tutorial sobre cómo instalar Homebrew.
Estamos usando macOS 11.4 en este caso.

  • Abra Terminal y escriba brew — version . Debería ver la versión de preparación impresa en la Terminal si Homebrew se instaló correctamente.
1cucofunxeyjimaenwsuefq-6213099
Brew versión en macOS
  • Para macOS en arquitectura x86, use el comandobrew install ffmpeg mientras que para M1 por favor use el comando aarch arm64 brew install ffmpeg .
17yvx9lrfkwi9kbpydhkojg-6811127
Descarga e instalación de las dependencias necesarias
  • Una vez finalizada la instalación, puede escribir ffmpeg -version en Terminal. Si se imprime la versión de FFmpeg, significa que FFmpeg se instaló correctamente.
195-zjmk8ldxmvcmriaogma-5442168

Ventanas

A diferencia de APT en Ubuntu y Homebrew en macOS, no hay un administrador de paquetes conocido en Windows, que pueda usar para instalar rápidamente FFmpeg. Para Windows, debe desactivarlo y configurarlo manualmente.

Hay 4 variantes de compilación de Windows FFmpeg disponibles que se pueden encontrar aquí:

  1. git full – construido a partir de una rama maestra con un gran conjunto de bibliotecas.
  2. git essentials – construido a partir de una rama maestra con bibliotecas de uso común.
  3. release full – construido a partir de la última rama de la versión con un gran conjunto de bibliotecas.
  4. release essentials – construido a partir de la última rama de la versión con bibliotecas de uso común.

Usaremos FFmpeg release essentials en nuestro caso.

  • Descargar los fundamentos de la versión de FFmpeg aquí.
  • Extraiga los archivos a un lugar desde donde los usará en el futuro. En mi caso, los puse en mi E Drive.
1zkspmfaxhfzot8bpkx078g-8508900
  • Dentro de compartimiento La carpeta contiene los ejecutables que queremos.
17wmyn89jpbnnzdkmac-sgq-9018667
  • Agregar compartimiento carpeta a Variable de ruta de entorno de Windows para que podamos ejecutar esta herramienta sin tener que especificar la ruta completa cada vez. Buscar Variables de entorno en la barra de búsqueda y haga clic en Variables de entorno…
1m-rbx_dnbqtqymmmvfm15a-1528972
  • Haga clic en Sendero en Variable de usuario, hacer clic Nuevo, y pegue la ruta completa del compartimiento carpeta.
1r8dgzk3ok08cqva5bnre9w-7645832
  • Abierto Símbolo del sistema y tipo ffmpeg -version . Si ve que la versión de FFmpeg está impresa, significa que FFmpeg se instaló correctamente. También podemos comprobar ffprob -version y ffplay -version .
1ft5c0qnpv-xp6nkvuifx2w-1381098

Bibliotecas FFmpeg

FFmpeg tiene varias bibliotecas valiosas que puede usar directamente desde el código de su aplicación. Cada biblioteca contiene diferentes funciones relacionadas con un área en particular.

Algunas de las bibliotecas famosas son:

  1. libavcodec: contiene todos los codificadores y decodificadores que admite FFmpeg.
  2. libavformat: tiene todos los muxers y demuxers para trabajar con varios formatos de contenedores.
  3. libavfilter: consta de muchos filtros que puede usar para modificar el audio o el video de acuerdo con los requisitos.
  4. libavdevice: admite varios dispositivos de entrada y salida diferentes.
  5. libavutil: ayuda a la programación multimedia portátil.
  6. libswscale: realiza operaciones de conversión de formato de píxel y espacio de color y escala de imagen altamente optimizadas.
  7. libswresample: realiza operaciones de remuestreo, remezcla y conversión de formato de muestra de audio altamente optimizadas.

Herramientas FFmpeg

Además de las bibliotecas que las bibliotecas pueden usar desde otras aplicaciones, el paquete FFmpeg contiene algunas herramientas por sí solo.

Algunas de las herramientas son:

  1. FFmpeg: motor de transcodificación principal. A menudo se invoca desde una línea de comandos u otro proceso.
  2. ffplay: una herramienta mínima para reproducir audio o video.
  3. ffprobe: inspección rápida de medios para extraer información valiosa, como cuántas transmisiones hay en los medios, la velocidad de fotogramas de un video, etc.

Ejemplos y uso de FFprobe

Uso

ffprobe [OPTIONS] [INPUT_FILE]

  • man ffprobe– Consulte el manual.
  • ffprobe -h– Muestra ayuda incluida.
  • -v error– Ocultar registros a menos que haya un error.
  • -show_format– Muestre metadatos de video formateados usando Tag.
  • show_streams– Muestra todas las transmisiones en el archivo (tanto de video como de audio).
  • -print_format —Imprimir metadatos en un formato específico (CSV / XML / JSON).
  • -select_streams
  • -show_entries stream=- Muestra solo la entidad específica y sus dependencias anidadas.
  • -show_entries stream= default-noprint_wrappers=1- Mostrar solo la entidad específica.
  • Puede obtener más información sobre el uso de FFprob aquí.

    Ejemplos básicos

    $ ffprobe -v error -show_format -show_streams input.mp4
    Output:
    [STREAM]
    index=0
    codec_name=h264
    codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
    profile=High
    codec_type=video
    codec_time_base=1/50
    codec_tag_string=avc1
    codec_tag=0x31637661
    width=320
    height=240
    has_b_frames=2
    sample_aspect_ratio=1:1
    display_aspect_ratio=4:3
    pix_fmt=yuv420p
    level=13
    color_range=N/A
    color_space=unknown
    color_transfer=unknown
    color_primaries=unknown
    chroma_location=left
    timecode=N/A
    refs=4
    is_avc=1
    nal_length_size=4
    id=N/A
    r_frame_rate=25/1
    avg_frame_rate=25/1
    time_base=1/12800
    start_pts=0
    start_time=0.000000
    duration_ts=384000
    duration=30.000000
    bit_rate=34761
    max_bit_rate=N/A
    bits_per_raw_sample=8
    nb_frames=750
    nb_read_frames=N/A
    nb_read_packets=N/A
    DISPOSITION:default=1
    DISPOSITION:dub=0
    DISPOSITION:original=0
    DISPOSITION:comment=0
    DISPOSITION:lyrics=0
    DISPOSITION:karaoke=0
    DISPOSITION:forced=0
    DISPOSITION:hearing_impaired=0
    DISPOSITION:visual_impaired=0
    DISPOSITION:clean_effects=0
    DISPOSITION:attached_pic=0
    TAG:language=und
    TAG:handler_name=VideoHandler
    [/STREAM]
    [STREAM]
    index=1
    codec_name=aac
    codec_long_name=AAC (Advanced Audio Coding)
    profile=LC
    codec_type=audio
    codec_time_base=1/44100
    codec_tag_string=mp4a
    codec_tag=0x6134706d
    sample_fmt=fltp
    sample_rate=44100
    channels=1
    channel_layout=mono
    bits_per_sample=0
    id=N/A
    r_frame_rate=0/0
    avg_frame_rate=0/0
    time_base=1/44100
    start_pts=-1024
    start_time=-0.023220
    duration_ts=1324024
    duration=30.023220
    bit_rate=56517
    max_bit_rate=N/A
    bits_per_raw_sample=N/A
    nb_frames=1293
    nb_read_frames=N/A
    nb_read_packets=N/A
    DISPOSITION:default=1
    DISPOSITION:dub=0
    DISPOSITION:original=0
    DISPOSITION:comment=0
    DISPOSITION:lyrics=0
    DISPOSITION:karaoke=0
    DISPOSITION:forced=0
    DISPOSITION:hearing_impaired=0
    DISPOSITION:visual_impaired=0
    DISPOSITION:clean_effects=0
    DISPOSITION:attached_pic=0
    TAG:language=und
    TAG:handler_name=SoundHandler
    [/STREAM]
    [FORMAT]
    filename=input.mp4
    nb_streams=2
    nb_programs=0
    format_name=mov,mp4,m4a,3gp,3g2,mj2
    format_long_name=QuickTime / MOV
    start_time=-0.023220
    duration=30.024000
    size=368644
    bit_rate=98226
    probe_score=100
    TAG:major_brand=isom
    TAG:minor_version=512
    TAG:compatible_brands=isomiso2avc1mp41
    TAG:title=FFprobe Tips
    TAG:encoder=Lavf56.15.101
    [/FORMAT]
    • Del ejemplo anterior, si solo desea duration=30.024000 .
    $ ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1 input.mp4
    Output: size=368644
    • Si solo desea el valor sin clave.
    $ ffprobe -v error -show_entries format=size -of default=noprint_wrappers=1:nokey=1 input.mp4
    Output: 368644
    • Obteniendo ancho y alto (resolución) de video.
    $ ffprobe -v error -select_streams v:0 -show_entries stream=height,width -of csv=s=x:p=0 input.mp4
    Output: 1280x720

    Uso y ejemplos de FFplay

    Uso

    ffplay [OPTIONS] [INPUT_FILE]

    • man ffplay- Consulte el manual.
    • ffplay -h- Muestra ayuda incluida.
    • ffplay - Reproducir el video en pantalla completa.
    • -x -y - Reproduzca el video con un tamaño específico de ventanas emergentes de altura y ancho en el centro. Automáticamente llenará el espacio adicional entre el área de video y el área de la ventana si la relación de aspecto de la ventana emergente y el video son diferentes.
    • -noborder- Ocultar la barra de título mientras reproduce videos en ventanas emergentes.
    • -[top/left/bottom/right] - Hacer ventana emergente en coordenadas específicas. De forma predeterminada, aparecerá en el centro de la pantalla.

    Puede obtener más información sobre el uso de FFplay aquí.

    Ejemplos básicos

    • Reproduce un archivo de video llamado video.mp4 en pantalla completa.
    $ ffplay video.mp4
    • Reproduzca un archivo de video en una ventana emergente con tamaños de 600 anchos, 600 de alto y sin barra de título.
    $ ffplay video.mp4 -x 600 -y 600 -noborder
    1xn2_esngyfgnieo0zaf8fg-2510588
    • Reproduzca un archivo de video en una ventana emergente en la esquina superior izquierda.
    $ ffplay video.mp4 -x 600 -y 600 -noborder -top 0 -left 0
    1vo6spqx-apam4u8fpvhylq-5692967

    Conclusión

    Habíamos cubierto todos los aspectos básicos de FFmpeg. No dude en leer su documentación oficial aquí si quieres tener una comprensión más profunda!

    Referencias

    Sobre el autor:

    Este artículo está escrito por Han Sheng, un desarrollador de aplicaciones AI Full Stack de Cameron Highlands, Malasia. Le apasiona el aprendizaje profundo, la visión por computadora y también los dispositivos Edge. Hizo varias aplicaciones web / móviles basadas en inteligencia artificial para ayudar a los clientes a resolver problemas del mundo real. Siéntete libre de leer sobre él a través de su portafolio.

Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.