Ir al contenido principal

Post-Processing videos

This guide explains how to use FFmpeg and OBS Studio to automate the post-processing of recorded videos. It covers trimming, editing, adding titles, improving audio quality, and exporting videos for platforms like YouTube. Basic familiarity with FFmpeg and OBS Studio is assumed.

Step 1: Setting Up Your Environment

Before diving into the process, ensure you have the necessary tools installed:

  1. FFmpeg:

    • Download and install FFmpeg from https://ffmpeg.org.

    • Make sure it’s added to your system’s PATH so you can run it from the command line.

  2. OBS Studio:

  3. Kdenlive:

    • Download and install Kdenlive from https://kdenlive.org.

      • Windows: Use the installer from the official website.

      • Linux: Install via your distribution’s package manager (e.g., sudo apt install kdenlive on Ubuntu/Debian).

      • macOS: Use Homebrew (brew install kdenlive) or download the DMG file from the website.

Step 2: Recording Your Video with OBS

  1. Configure OBS for Recording:

    • Open OBS Studio and set up your scenes and sources (e.g., webcam, screen capture, etc.).

    • Go to Settings > Output and configure the recording format. Use .mp4 or .mkv for compatibility with FFmpeg.

    • Under Audio, ensure your microphone and desktop audio are properly configured.

  2. Start Recording:

    • Once everything is set up, click the Start Recording button in OBS. Record your content as needed.

  3. Stop Recording:

    • When done, click Stop Recording. The video file will be saved in the directory specified under Settings > Output > Recording Path.

Step 3: Cutting Recorded Videos with FFmpeg

Before editing in Kdenlive, trim your raw footage into manageable clips using FFmpeg. This ensures minimal quality loss by avoiding re-encoding.

Step 3.1: Identify Start and End Times

  • Open your raw video file in a media player (e.g., VLC).

  • Note the start time (start_time) and end time (end_time) of the segment you want to keep. Example: If you want to keep a clip from 00:01:15 to 00:03:45:

    • start_time = 00:01:15 (1 minute 15 seconds)

    • end_time = 00:03:45 (3 minutes 45 seconds)

Step 3.2: Use FFmpeg to Cut the Video

Run the following command to cut the video:

ffmpeg -i input.mp4 -ss 00:01:15 -to 00:03:45 -c copy cut_output.mkv
  • -i input.mp4: Specifies the input video file.

  • -ss 00:01:15: Skips to the start time (75 seconds).

  • -to 00:03:45: Stops at the end time (225 seconds).

  • -c copy: Copies the video and audio streams without re-encoding, preserving the original quality.

  • cut_output.mkv: The output file name.

Step 3.3: Verify the Cut

  • Play the trimmed video (cut_output.mkv) in a media player to ensure it starts and ends where intended.

Step 4: Creating a Kdenlive Project for Mini-Videos

Use Kdenlive to assemble and enhance the trimmed video clips into short, visually appealing segments. These mini-videos can later be combined into a full presentation or used individually.

Step 4.1: Organize Your Assets

Before starting Kdenlive, ensure all your assets are ready: - Trimmed Video Clips: Outputs from Step 3 (e.g., cut_output.mkv). - Audio Files: Background music, sound effects, or voiceovers. - Graphics and Titles: Logos, overlays, or text elements for branding. - Transitions: Pre-made transitions (if needed) or use Kdenlive’s built-in effects.

Place all these files in a dedicated folder (e.g., kdenlive_assets) for easy access.

Step 4.2: Set Up the Kdenlive Project

  1. Create a New Project:

    • Open Kdenlive and go to File > New Project.

    • Choose a profile that matches your video resolution and frame rate (e.g., 1080p 30fps).

  2. Import Media:

    • Drag and drop your trimmed video clips, audio files, and graphics into the Project Bin (left panel in Kdenlive).

  3. Set the Timeline Layout:

    • Use multiple tracks for better organization:

      • Track 1: Main video clips.

      • Track 2: Titles, overlays, or graphics.

      • Track 3: Background music or sound effects.

      • Track 4: Transitions or additional effects.

Step 4.3: Assemble the Mini-Videos

  1. Add Video Clips to the Timeline:

    • Drag your trimmed video clips onto Track 1 and arrange them in the desired order.

  2. Add Titles and Text:

    • Go to the Titles and Text section in the toolbar.

    • Create eye-catching titles for each mini-video. Use bold fonts, animations, and colors that match your branding. Place the titles on Track 2 above the video clips.

  3. Incorporate Graphics and Overlays:

    • Add logos, lower-thirds, or decorative overlays to enhance the visuals. Use keyframes to animate these elements for a dynamic effect.

  4. Add Background Music:

    • Drag a background music file onto Track 3. Adjust the volume using Volume Keyframes to ensure it doesn’t overpower the main audio (e.g., voiceover or dialogue).

  5. Apply Transitions:

    • Use Kdenlive’s built-in transitions (e.g., fade, slide, or dissolve) between clips for smooth visual flow. Alternatively, import custom transitions if you have them.

  6. Enhance Audio:

    • Use the Audio Effects tab to improve clarity:

      • Add compression for consistent volume levels.

      • Apply equalization (EQ) to enhance specific frequencies.

      • If needed, record a voiceover using Kdenlive’s Record Monitor feature.

Step 5: Analyze the Cut Output with ffprobe

Before creating a custom render profile in Kdenlive, analyze the properties of the trimmed video (cut_output.mkv) using ffprobe.

Step 5.1: Run ffprobe on cut_output.mkv

Open your terminal or command prompt and run:

ffprobe -i cut_output.mkv

This will display detailed information about the video file, including: - Video codec: Check if it’s already H.264 (libx264). - Resolution: Note the width and height (e.g., 1920x1080). - Frame rate: Verify the frame rate (e.g., 30 fps). - Audio codec: Check if it’s AAC or another codec.

For more granular details, use:

ffprobe -i cut_output.mkv -show_streams

Step 6: Adding a Custom Render Profile in Kdenlive

Option 1: Add the Profile in Kdenlive

  1. Open Kdenlive and go to Settings > Configure Kdenlive > Environment > FFmpeg Export Settings [[1]].

  2. Add a new custom profile with the following details:

    • Profile Name: OBS Export

    • Parameters:

    • Extension: .mkv

  3. Save the profile.

Explanation of Parameters

Uses MLT 7.4:

Container Format

  • f=matroska: Specifies the Matroska container format.

Video Encoding

  • vcodec=libx264: Uses the H.264 codec.

  • preset=medium: Sets the encoding speed/quality tradeoff.

  • profile=high: Specifies the High Profile for H.264.

  • crf=23: Sets the Constant Rate Factor (CRF).

  • pix_fmt=yuv420p: Specifies the pixel format.

  • r=30: Sets the frame rate to 30 fps.

  • vf="scale=trunc(iw/2)*2:trunc(ih/2)*2,setdar=16/9": Resizes the video and sets the aspect ratio.

Audio Encoding

  • acodec=aac: Uses the AAC codec.

  • ab=128k: Sets the audio bitrate to 128 kbps.

  • ar=48000: Sets the audio sample rate to 48 kHz.

  • ac=2: Configures the audio to be stereo (2 channels).

Option 2: Create an MLT XML Profile

Locate Kdenlive’s Profiles Directory

Kdenlive stores its rendering profiles in a specific directory:

  • Linux: ~/.local/share/kdenlive/renderprofiles/

  • Windows: C:\Users\<YourUsername>\AppData\Local\kdenlive\renderprofiles\

  • macOS: ~/Library/Application Support/kdenlive/renderprofiles/

Navigate to this directory.

Create the Custom Render Profile

  1. Open a text editor (e.g., Notepad, VS Code).

  2. Paste the following XML code into the editor:

<?xml version="1.0"?>
<profile>
    <name>OBS Export</name>
    <description>Custom profile for OBS-compatible video export</description>
    <extension>mkv</extension>
    <parameters>
        f=matroska
        vcodec=libx264
        preset=medium
        profile:v=high
        crf=23
        pix_fmt=yuv420p
        r=30
        vf=scale=trunc(iw/2)*2:trunc(ih/2)*2,setdar=16/9
        acodec=aac
        ab=128k
        ar=48000
        ac=2
    </parameters>
</profile>
  1. Save the file as obs_export.xml in the renderprofiles directory.

Verify the Profile

  • Restart Kdenlive if it’s already open.

  • Go to File > Render. In the Rendering Profile dropdown, you should now see “OBS Export” listed.

Step 7: Use the “OBS Export” Profile

Render the trimmed video using the new profile.

  1. Open the trimmed video (cut_output.mkv) in Kdenlive.

  2. Go to File > Render.

  3. Choose the “OBS Export” profile from the dropdown.

  4. Specify the output file name and location (e.g., final_output.mkv).

  5. Click Render to export the video.

Step 8: Test the Final Output

After rendering, test the final video to ensure it meets your requirements.

Step 8.1: Run ffprobe

ffprobe -i final_output.mkv

Check: - Container: Should be Matroska (mkv). - Video codec: Should be H.264 (libx264). - Resolution and aspect ratio: Should match the scaling filter (16:9). - Audio codec: Should be AAC with stereo channels.

Step 8.2: Play the Video

Test the video in a media player like VLC to confirm smooth playback, proper audio sync, and correct resolution.

Step 9: Concatenating Videos Using FFmpeg

Combine the mini-presentation video (created in Kdenlive) and the trimmed video (cut_output.mkv) into a single MKV file.

Step 9.1: Prepare the Files

Ensure both videos have the same resolution, frame rate, and codec settings.

Step 9.2: Create a Text File to List the Files

Create a text file (concat_list.txt) with the following format:

file 'mini_presentation.mkv'
file 'cut_output.mkv'

Step 9.3: Run the Concatenation Command

ffmpeg -f concat -safe 0 -i concat_list.txt -c copy final_concatenated.mkv

Step 9.4: Verify the Concatenated Video

Test the final video using ffprobe and a media player.

Step 10: Adjusting Volume After the Mini-Presentation

Use FFmpeg to increase the volume of the second part of the concatenated video.

Step 10.1: Probe the Length of the Mini-Presentation Video

To determine the duration of the mini-presentation video (mini_presentation.mkv), use ffprobe. The output will provide the exact length of the video in seconds.

Run the following command in your terminal or command prompt:

ffprobe -i mini_presentation.mkv -show_entries format=duration -v quiet -of csv="p=0"
  • -i mini_presentation.mkv: Specifies the input file.

  • -show_entries format=duration: Extracts the duration of the video.

  • -v quiet: Suppresses unnecessary logging.

  • -of csv="p=0": Outputs only the duration value.

Example Output: If the mini-presentation video is 17.5 seconds long, the output will be:

17.500000

This value (e.g., 17.5) represents the duration of the mini-presentation video in seconds. You’ll use this value in the next step to adjust the audio volume.

Step 10.2: Use the Duration in the FFmpeg Command

The duration of the mini-presentation video determines where the volume adjustment begins. Specifically, the start parameter in the FFmpeg command should match the duration of the mini-presentation video.

Here’s the updated FFmpeg command with placeholders for clarity:

ffmpeg -i final_concatenated.mkv -filter_complex \
"[0:a]atrim=end=<DURATION>,asetpts=PTS-STARTPTS[a_before]; \
 [0:a]atrim=start=<DURATION>,asetpts=PTS-STARTPTS,volume=3.0[a_trimmed]; \
 [a_before][a_trimmed]concat=n=2:v=0:a=1[aout]" \
-map 0:v -map "[aout]" -c:v copy output_with_adjusted_volume.mkv

Replace <DURATION> with the actual duration of the mini-presentation video (e.g., 17.5).

Example Command:

If the mini-presentation video is 17.5 seconds long, the command becomes:

ffmpeg -i final_concatenated.mkv -filter_complex \
"[0:a]atrim=end=17.5,asetpts=PTS-STARTPTS[a_before]; \
 [0:a]atrim=start=17.5,asetpts=PTS-STARTPTS,volume=3.0[a_trimmed]; \
 [a_before][a_trimmed]concat=n=2:v=0:a=1[aout]" \
-map 0:v -map "[aout]" -c:v copy output_with_adjusted_volume.mkv
  • end=17.5: Specifies the end time for the first audio segment (the mini-presentation part).

  • start=17.5: Specifies the start time for the second audio segment (the part after the mini-presentation).

  • volume=3.0: Increases the volume of the second audio segment by a factor of 3.0.

Step 10.3: Verify the Final Output

After running the command, test the resulting video (output_with_adjusted_volume.mkv) to ensure the audio transitions smoothly and the volume adjustment starts at the correct point.

  1. Play the Video: Use a media player like VLC to confirm:

    • The audio remains unchanged during the mini-presentation (first 17.5 seconds).

    • The audio volume increases after the mini-presentation ends.

  2. Check Audio Sync: Ensure the audio is properly synchronized with the video throughout the entire duration.

Summary Here’s what we’ve accomplished in this step:

  1. Used ffprobe to determine the duration of the mini-presentation video (e.g., 17.5 seconds).

  2. Updated the FFmpeg command to split the audio into two parts:

    • The first part (up to 17.5 seconds) remains unchanged.

    • The second part (after 17.5 seconds) has its volume increased.

  3. Verified the final output to ensure smooth transitions and balanced audio levels.

The resulting file, output_with_adjusted_volume.mkv, now has consistent audio levels and is ready for further processing or publishing.

Key Notes

  • The duration of the mini-presentation video is critical for ensuring the volume adjustment starts at the correct point.

  • Always verify the duration using ffprobe to avoid manual errors.

  • Adjust the volume parameter (e.g., 3.0) as needed to achieve the desired audio level.

Step 10.2: Play the Video

Test the video in a media player to confirm smooth transitions and balanced audio levels.

Step 11: Re-encode for YouTube Upload

Transcode the final video into a YouTube-compatible format.

Step 11.1: Run the Command

ffmpeg -i output_with_adjusted_volume.mkv -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 192k -movflags +faststart output_youtube.mp4

Step 11.2: Verify the Output

Test the video in a media player and upload it to YouTube.

Summary

This guide covered:

  1. Setting up FFmpeg, OBS Studio and Kdenlive.

  2. Recording and trimming videos.

  3. Editing in Kdenlive.

  4. Creating a custom render profile.

  5. Concatenating videos and adjusting audio.

  6. Re-encoding for YouTube upload.

The resulting file (output_youtube.mp4) is now ready for publishing! 😊

Crónica del PyDay

Hace tiempo

Todo empezó hace unos cuantos meses. Dijimos con mi amigo Pelín “¡hagamos un pyday!”

Un par de meses pasaron y todavía no se hacía nada, así que le dije “pongamos una fecha”.

 Al principio de todo se puede tener preparadas algunas cosas: por ejemplo, la descripción del evento que deseamos y algunas plantillas para la parte gráfica. Plantilla de e-mail.

Dos meses antes

Él propuso su empresa como lugar, porque allí tendríamos probablemente un catering y una pantalla gigante para proyectar. Claro que, como mucho, podríamos tener unos 25 asistentes.

La fecha fue una difícil decisión: primero podía ser un 6 de noviembre, pero después esto resultó muy pronto y quisimos mandarla al sábado 19. Esto le dije que era mejor que no, porque en ese mismo día los chicos de Catamarca estaban organizando el suyo. Así que quedó para el día 26 de noviembre de 2022.

 La decisión de la fecha es algo que también debería generar un más amplio pedido de opinión. Además, hacerlo con un mínimo de tres meses.

Propuse dos opciones de imagen gráfica y pedí opinión a la comisión directiva de pyar, y finalmente quedó la primer idea que tuve.

50 días antes

Hacia el 10 de octubre, ingresé a la instancia de EventoL de Python Argentina, con mi usuario cree el evento, subí la imagen que habíamos armado, ingresé la fecha de realización, cree una sala única del evento, puse el lugar de realización, la empresa de Pelín.

 En este momento tendríamos que haber redactado también una descripción textual del evento, para poder ponerla en la instancia de eventoL

Y luego publiqué en mis redes sociales de pythonistas el llamado a propuestas con el link generado en eventoL para que la gente se anote.

 Aquí era el momento idóneo para buscar sponsors, tanto de python argentina, como en empresas locales o gobierno. Así, con cada respuesta positiva se puede anunciar algo en redes y medios para ir generando expectativa en la personas. Y aquí debí empezar a pedir colaboradores: alguien que quiera ir al evento y encargarse de video, grabación y fotografía.

40 días antes

Cree una charla en mi canal de youtube, que esperaba sirviera para dar impulso a la gente que quisiera animarse a ser speaker el día 19 de octubre. Traté de darle difusión y luego me puse a esperar.

1 mes antes

Nos avisaron que había otro lugar disponible para nuestro evento. Después de un poco de indecisión, nos pareció más amplio que el lugar original. Me dieron el contacto de la persona a cargo de administrarlo. Así que me puse en contacto con ella

25 días antes

Sergio Lapertosa nos comentó que una persona, Samuel Noya, que podría proponerse y le había pasado el contacto para hacerlo. Nunca lo hizo.

 Un problema aparte es la reticencia de algunos speakers de formalizar en EventoL. El pedido de propuesta es abierto, pero igual parecen dudar de describir su propuesta en el sitio. Quizá brindar un sistema de chat inmediato para hablar con los organizadores simplificaría las cosas.

Nos decidimos por la Usina, que nos pareció más amplio que el lugar original. Me dieron el contacto de la persona a cargo de administrarlo. Así que me puse en contacto con ella. Al principio, creíamos que nos proveerían de un pequeño coffee break.

24 días antes

Llegó la primera propuesta, e inmediatamente me puse a hacer el cartel gráfico para anunciarla por todas partes.

 Con la guía del coordinador o “redactor jefe” del evento, y del diseñador gráfico, se tiene que hacer marketing en las principales redes sociales. El trabajo de manejo de comunidades implica que alguien debe tener, en este caso, Instagram, Twitter, Facebook, Linkedin, y estar incluido en las comunidades de Python locales. Y cualquier otra red social donde la gente se agolpe.

El administrador de comunidades es un rol central en todo momento.

Lamentablemente, en ese momento no manejaba bien EventoL y no me resultó nada amigable encontrar como avisar a los que propusieron que su propuesta estaba aceptada.

 A los speakers hay que darles feedback siempre. Son el eje del espectáculo. El hecho de dar por supuesto que la gente que vendría de lejos estaba en las mismas redes y asumiría que al estar difundiendo su propuesta es que nos gustó implicó que después se bajaran. EventoL no permite a la gente ingresar más contacto que un email, y, encima, no lo pone en un lugar que me resultara intuitivo a mí.

8 días antes

Ante la falta de propuestas, el día 18 de noviembre anoté una charla mía, que prefería ensayarla antes de proponerla en otros foros internacionales.

1 semana antes

Al día siguiente empecé a desesperar: faltaban propuestas, faltando apenas una semana, no podía confirmarles a los chicos de la propuesta sobre testing y no aparecía más gente. Pedía ayuda en el grupo de organización. Dos de las chicas que querían aportar. Una de ellas, Zoe, al fijarse en su charla, decidió que no sería apta para una audiencia que recién empezaba con la programación. Valeria, la otra, me empezó a hablar, y nos pusimos a elaborar su propuesta.

También formalizó Matías, que inscribió su propuesta Introducción a Python el día 22 de noviembre. Ya contaba con su colaboración desde hacía un mes, pero lamentablemente no tenía una descripción formal y no podía agregarla al cronograma.

Me dijo que en la Usina nos ayudarían con la difusión. Esto se cumplió de forma muy tibia.

Para conocer bien de cerca el lugar donde haríamos el evento, fui a otro evento informático la semana previa. Allí pude ver que eran muy lindas las instalaciones, pero me dijeron que no proveían ninguna ayuda con la comida y que tampoco tenían pantallas para que usáramos: deberíamos traer un proyector propio. Y alguna tela o algo así para poder ver la imagen, ya que no hay ninguna pared blanca apropiada.

El proyector sencillamente traje el mío, que es apto para eventos diurnos porque tiene bastante potencia de imagen. Sin embargo, con la pantalla de proyección estuvo más difícil. Por suerte, un amigo de Pelín tenía la pantalla para la proyección. Sino, hubiéramos debido improvisar con alguna tela blanca, quizá.

5 días antes

Después de ver en youtube una charla donde decía que uno de los principales tips que daban era asegurar que la gente tuviera suficiente para comer y beber. En el evento que había ido la semana anterior al mío me había gustado mucho el servicio, así que quedé con el contacto y le solicité un coffee break. Estimé unas treinta personas asistiendo, aunque en ése día martes apenas teníamos 8 inscriptos. Por suerte, la encargada del catering quería mantenerme como cliente y de inmediato me dijo que sí, que podría hacerlo.

Dos días antes del evento

Esto trajo algo que no había considerado: quedé adeudando. El coffee break podía donarlo, pero igual me pareció pertinente pedir ayuda económica. Así que hablé a Facundo Batista y el me pasó el modelo que habían usado otros grupos para solicitar el dinero. Una vez que llené el modelo con los datos de mi evento, el mandó a los contactos que tenía y gracias a ello, parte del costo será eventualmente devuelto.

Armé el cronograma definitivo y empecé a difundirlo y solicitar que difundan por redes sociales. Lamentablemente, no pude usar algunos medios, como email o pegar carteles por la falta de personas dispuestas a dar charlas.

36 horas antes

Lamentablemente, todavía no sabía como asegurar la presencia de los speakers que venían de lejos, ni ellos habían hecho esfuerzo alguno para conectar. Me guiaron a la forma de ver en eventol el email que habian dejado y allí me encuentro con que era muy tarde: ellos no habían preparado su viaje y no vendrían.

Zoe S., mientras tanto, me aseguró que podría imprimir ése día viernes el cronograma y los papeles con los códigos qr para la autoinscripción.

24 horas antes

El día anterior al evento llegó Matías de Gualeguay, y lo recibí en mi casa. Quedé arreglando las cuestiones últimas de agradecimiento a nuestro único sponsor, ajustando los carteles que se imprimirían y revisando las diapositivas de mi propia charla.

El día del evento

Al día siguiente me levanté muy temprano. Ensayé mi charla, depuré algunos defectos y lo levanté a Matías, que estaba en mi departamento. Armamos los bolsos con proyector, capturadora de video, cables, computadoras y nos fuimos al lugar del evento, a 900 mts de ahí.

Cuando llegamos, abro el Whatsapp y Valeria, la oradora que se había agregado para cerrar nuestro evento, no podía venir, se había descompuesto a la noche.

De todas formas, pusimos la pantalla blanca con Pelín, movimos sillas y mesas para adaptarlos a nuestro setup, calibramos el proyector para máximo brillo en la sala tan iluminada, puse la video cámara a filmar.

A las 9:30, dí apertura al evento, comenté sobre el PyCamp en Corrientes, sobre Python Argentina, e invité a Matías a empezar a hablar.

Mientras tanto, con Pelín empezamos a ver qué hacer con la falta de dos speakers.

Matías, que sabía del inconveniente, alargó un poco su charla. Mi charla, que sería la tercera, la pusimos segunda. Luego del coffee break, que fue un momento donde los asistentes pudimos ponernos en contacto y disfrutar realmente del evento, llegó Pelín que se había ido a buscar algunos elementos de su casa.

La charla de él fue todo un éxito, y luego Zoe dió una speed lighting de introducción a GIT. Allí preparamos varias remeras donadas por Python Argentina y stickers traídos de PyCon USA para sortear y repartir entre los asistentes.

Después del sorteo, hablamos un poco varios de los programadores que ya trabajabamos con Python sobre nuestras experiencias y consejos para los que quieren empezar.

Después del evento

Y hoy debo ingresar mi proveedora, mi sponsor y mis costos en el sistema de registración de Python Argentina.

Aún falta editar los vídeos, y subirlos a Youtube.

PyDay 2022 Resistencia Chaco

Se viene un nuevo PyDay en Resistencia Chaco

Banner del PyDayNE 2022

El nuevo pyday será en la sede de ECOM en día 26 de noviembre.

Llamado a propuestas

Más información en:

Llamado a propuestas

Anotarse para asistir

Seguirnos en twitter

Unirte a nuestro grupo Telegram

Introducción a Python con Jupyter

Tuve el placer de dar charla para las primeras jornadas de Educación de Matemáticas en ingeniería

Dando charla en la Facultad de Ingeniería

Más información

Galería de fotos

Resúmen de la charla, enlaces, diapositivas y contenido

OpenLex en Google Summer of Code

Este año soy mentora del Google Summer of Code, por segundo año consecutivo.

¿Qué es el Google Summer of Code?

Es un programa global organizado por Google que acerca a los estudiantes al software libre, a las organizaciones de software libre relacionadas a la tecnología para ser parte de las comunidades, y de paso, tener un sueldo.

Los estudiantes van a tener la posibilidad de trabajar como en realidad se hace, aplicando los conocimientos teóricos, trabajando en grupo en forma remota o presencial, utilizando herramientas indispensables como control de versiones, github, etc y usando los estándares actuales en desarrollo de software. ¡Y ganando una beca por ello!

Todo esto tutelado/guiado por mí y probablemente por alguien más, en un ambiente amigable y seguro, y en español.

El proyecto es OpenLex, un software para web diseñado y desarrollado por mí, pensado para el manejo de estudios de abogacía, que necesita amor para crecer, y así ser modernizado y completado:

  • Migrarlo a Python3, y a Py4Web

  • Actualizar las versiones de las librerías JavaScript

  • Preparar una versión demo on line.

  • Armar un manejo de usuarios más robusto

  • Algunas features adicionales son muy necesarias, como implementar el uso de templates para los escritos.

Para ver más, podrías mirar en

¿Qué se precisa?

  • compromiso real,

  • conectividad estable y disponible para una o dos reuniones semanales on line (si tu conexión es lenta, por lo menos se necesita transmisión de audio).

  • una computadora a la que tengas acceso 18 hs por semana como mínimo.

  • instalarte Telegram, porque ése va a ser nuestro medio de comunicación habitual, ahí tenemos coordinar reuniones y comunicarnos día a día.

  • Ser apto para GSoC: tener más de 18 años, estar estudiando algo relacionado a la informática posterior al secundario o haberse recibido entre 1/12/20 y 17/05/21, y poder trabajar.

En lo técnico, lo que necesitás es muchas ganas, pero estaría bueno si conocés python, git, javascript, algo sobre programación web. ¿No conocés todo esto? ¡Esto es un proceso de aprendizaje, vamos todos juntos a apoyarnos en el desafío! Abajo agrego una lista de algunos sitios fantásticos donde aprender todo lo necesario.

Entonces, ¿tenés ganas de participar? ¿Qué hacer?

  1. Creá tu plan de proyecto: hay que investigar un poco, pensar posibles soluciones alternativas, inspirándose en la lista de issues.

  2. Acordate que GSoC se maneja en fases, la primera fase es para conocerse en la comunidad y familiarizarse con el código y su estilo, después viene la fase inicial de codificación, en l a cual serás evaluade por mí, como mentora,  y luego vendrán las 5 semanas de codificación, al final de ellas, tendrás que entregar algún producto y dar el URL.

  3. Pagos: los pagos son en dos partes , la primera luego de pasar la fase 1, y la última luego de terminar, utilizándose la plataforma Payoneer, un total de 1500 U$S. Cuando seas aceptade, el link para registrarte llegará a tu email. Tendrás un certificado de finalización al completar el programa.

Las fechas límite:

29/03/2021 al 13/04/2021: Para que les alumnes presenten sus propuestas.

13/04/2021 al 17/05/2021: Para que revisemos las propuestas presentadas

17/05/2021 al 07/06/2021: Me presento con les estudiantes como mentora, y en este tiempo pueden aprender más sobre la organización y el código existente.

07/06/2021 al 16/08/2021: Codear, codear, codear!

12/07/2021: Les estudiantes y yo nos evaluamos mutuamente.

16/08/2021: Les estudiantes envían su código, la síntesis de su proyecto y las evaluaciones finales de mentoría.

23/08/2021: Evalúo el código de les alumnes y dictamino si se cumplieron los objetivos del proyecto.

31/08/2021: Les alumnes reciben la notificación, y si pasaron o no los proyectos.

¿Te gustó?¿Todavía tenés dudas?

Bueno, podés leer más sobre GSoC:

El sitio oficial summerofcode ,

El manual del alumno student guide

Sobre el pago: payoneer

Y sobre las tecnologías que empleamos:

Python3: El tutorial de Python Inmersión en Python

Py4Web: py4web documentation

JavaScript: w3school javascript

GIT: gitexplorer try github

Cómo acelerar por harware operaciones con videos

Cómo acelerar por hardware operaciones con video.

Hola! Tengo un hw bastante modesto (i5, 8G RAM), Linux Mint y hago muy cada tanto algo de edición. Así que estuve mirando cómo hacer para ver cómo era mi tarjeta gráfica, para ver si había algún recurso de aceleración que no había aprovechado. Encontré que debía hacer >> lspci | grep VGA >> sudo lshw -C video ahí, supe que tenía una plaqueta gráfica intel HD Graphics 5500

OBS Studio

En los ajustes avanzados de salida, apartado video, descubría que tenía la posibilida de comprimir usando hardware, pero cuando lo traté de habilitar, me informé de que faltaba habilitar la aceleración Ahí me informé que existe una biblioteca de uso de mi tarjeta gráfica llamada vaapi, así que busqué $ sudo apt-cache search vaapi ahí me encontré con dos paquetes que pocedí a instalar $ sudo apt-get i965-va-drivera $ sudo apt-get i965-va-driver-shaders y entonces empezó mi obs studio a funcionar mucho mejor

Verificando el uso

Para poder ver el nivel de exigencia de mi tarjeta, instalé $ sudo apt install intel-gpu-tools Así al hacer $ sudo intel_gpu_top podría ver el nivel de exigencia

FFMpeg: transcodificando

Después, encontré que ffmpeg también nos permite utilizar la gpu para transcodificar. $ ffmpeg -vaapi_device /dev/dri/renderD128 -i <inputfile> -vf 'format=nv12,hwupload' -c:v h264_vaapi <outfile>.mkv

KDEnlive: Edición de videos

Finalmente, me encontré intentando lograr la aceleración de videos. Buscando, encontré que podría ser posible, pero primero es necesaria la biblioteca movit y rtaudio. $ sudo apt-get install librtaudio6 $ sudo apt install libmovit8

Encontré algún artículo [1], pero aparentemente sólo recompilando la librería MLT se podría hacer.

Análisis encuesta asistentes

Decidí que necesitaba algo más de información respecto del perfil y las preferencias del público que asistió a los eventos que coorganicé en el año pasado.

Quiero así también conocer qué tal estamos yendo, la edad y el género promedio de las personas que asistieron. Así que envié emails a todos los emails registrados, enviándoles una salutación de fin de año y también mandándoles el link para completar la encuesta. También puse en todos los grupos en redes sociales que surgieron de las reuniones, Telegram, Whatsapp, Facebook y por Twitter.

El resultado final pueden verlo acá:

resultado final.

Proceso de análisis

Una vez obtenidos los datos, el desafío fué bajar la información. Encontré que podía abrir planilla de cálculos con los resultados y posteriormente exportar a CSV (Comma Separated Values).

Conectando con la API de Google

Pero luego me sugirieron conectar directamente con la API de Google, y así fué que cree un proyecto en Google usando la consola Google.

Fuí al dashboard del proyecto, y de ahí seleccioné APIs, y navegué a la biblioteca de APIs.

Habilité Google Drive API, luego fuí a crear credenciales. Allí elegí que la llamaría a la API desde otra interfaz de usuario (CLI, Windows) y que necesitaría usar datos de usuario.

Luego cree una cuenta de servicio llamada encuesta, y bajé las credenciales en formato json. Las copié al subdirectorio en el que se encontraba mi notebook jupyter.

Ahí fuí a la hoja de cálculo GCalc, y la compartí con el usuario de la cuenta de servicio, que tiene un email que termina en encuesta@.....iam.gserviceaccount.com.

Creando el notebook de jupyter para análisis de los datos

Para crear la notebook jupyter, cree un nuevo environment y los añadí como kernel a jupyter. Para esto cree el virtualenv

>>> conda create -n myenv

Activé el environment creado

>>>  conda activate myenv

Luego instalé el paquete que provee el kernel IPython para Jupyter

>>> pip install --user ipykernel

Y finalmente lo activé

>>> python -m ipykernel install --user --name=myenv

Cree un nuevo notebook con el environment, y procedi a crear una celda especial para instalar los siguientes paquetes:

>>> import sys
>>> !{sys.executable} -m pip install pandas, numpy, matplotlib, gspread, oauth2client

Presentación y publicación de los resultados

Una vez instalado todo, utilizando las credenciales de google anteriormente bajadas, agregué el código para bajar la información directamente de la planilla y para realizar el análisis.

Una vez que completé el análisis, y realicé los gráficos correspondientes, procedí a exportar en formato HTML el resultado. El problema fué que cuando mostré los mismos, me dijeron que el hecho de que el código de programación python se entremezcle con los resultados resultaba confuso.

Para evitar esto, al html exportado le agregué el siguiente código:

<script>
function myFunction() {
    var x = document.getElementsByClassName("highlight");
    var i;
    for (i = 0; i < x.length; i++) {
      if (x[i].style.display === "none") {
        x[i].style.display = "block";
      } else {
        x[i].style.display = "none";
      }
    }
}
</script>

Después, dentro del bloque de la descripción inicial agregué un botón:

<button onclick="myFunction()">Mostrar Ocultar código fuente</button>

Luego del tag body, en el evento onload, también llamé a la función para que al leer la página también lo oculte:

<body onload="myFunction()">

Finalmente, lo agrego a mi blog como una página estática, en el subdirectorio stories, con formato html. Para que el generador de páginas estáticas Nikola lo agregue, precedí con

<!--
.. title: Análisis de la encuesta
-->

El resultado final pueden verlo acá:

resultado final <https://mavignau.gitlab.io/blog/stories/analisis-de-la-encuesta/index.src.html>

PyCon Cleveland, Ohio

Galería de fotos

El día 29 de mayo salí en colectivo desde Resistencia Chaco hacia Buenos Aires, hice un día de escala y el primero de mayo partí en un vuelo con dos escalas hacia Cleveland, Estados Unidos.

Justo antes de embarcar en el avión a Cleveland, me encuentro con Cris Ewing cuya remera decía PyLadies, me acerqué a hablar y justamente íbamos al mismo destino.

Vista de Cleveland

Vista de Cleveland

Al llegar, tomé el bus para ir al centro de la ciudad, cerca del cual quedaba en centro de convenciones. Era plena primavera, así que habían arreglos de flores por todas partes, particularmente, muchos tulipanes.

Bellísimos tulipanes multicolores

Bellísimos tulipanes multicolores

Llegué allá al mediodía del dos de mayo, para asistir a la tarde del último día de los tutoriales, y ver la exposición con los stands. Era muy grande, al menos cinco filas de stands, con destacados de las mayores corporaciones, otros de empresas menos conocidas, pero importantes, y con varios stands dedicados a comunidades como PyLadies o DjangoGirls.

En el Stand de Django Girls

En el Stand de Django Girls

Nos daban un desayuno, con café, té, varios tipos de leche (común, de soja, de almendras, etc), avena caliente, pastelería, frutas y algo salado, como burritos. El almuerzo, había una carne, que podía reemplazarse con tofu, con diversos acompañamientos, como ensaladas, y también, independientemente, una bandejita de ensalada, que traía algún sandwich, un paquete de papas fritas (las que nos sirvieron eran más crocantes y duritas, y mucho más sequitas que las habituales por acá).

Todo el día había café, té y leche, a la tarde se servía una merienda con pastelería y cerraba a las 7 de la noche cada día.

Al llegar el día 3 de mayo, fuí directamente al salón destinado a la PyCon Charlas. Como llegué temprano, me encontré hablando con Naomi Ceder , que estaba esperando a las personas

Junto a Naomi Ceder

Junto a Naomi Ceder

Mi charla era la segunda programada en la mañana, así que esperé hasta que me tocó darla

Iniciando mi charla

Iniciando mi charla

Durantes los tres siguientes días había actividades diversas para hacer: se podía asistir a las charlas, se podía ir a los open spaces, salones que podían ser solicitados por personas o grupos para realizar actividades diversas, cada una a diferente hora.

Tablero de open spaces, donde los asistentes proponían temas

Tablero de open spaces, donde los asistentes proponían temas

Los últimos días fueron para los sprints, los cuales dan una oportunidad única de trabajar en proyectos de fuente abierta junto a los más reconocidos desarrolladores de software. Primero ingresé a trabajar al sprint de Flask, un framework para desarrollo web con un enfoque modular, muy utilizado por su sencillez.

Los proyectos en los que se podía realizar desarrollo

Los proyectos en los que se podía realizar desarrollo

Más tarde me encontré con Marlene Marchena‏, una mujer peruana que venía a dar un taller sobre iniciación en el desarrollo para niños, utilizando Python para programar sobre Minecraft.

Ella me llevó al sprint sobre BeeWare, un ambicioso proyecto que pretende ser un completo framework para desarrollo multiplataforma, y como Russell Keith Magee, el principal desarrollador, tenía simplificado el accesos para los principiantes, durante el segundo día y tercer día. A cada persona que lograba hacer una contribución al proyecto, nos daba una pequeña medalla, ambas logramos tener nuestro pequeño trofeo.

Russell Keith Magee daba un medalla por la primera contribución.

Russell Keith Magee daba un medalla por la primera contribución.

Durante el almuerzo del tercer dia de sprints, armamos una mesa en la de hispanohablantes, y me enteré que se estaba realizando la traducción al castellano de parte de la documentación de Python, y que la persona a cargo era el español Raúl Cumplido , compañero de trabajo de Manuel Kauffmann.

Con Raúl Cumplido.

Con Raúl Cumplido.

Los últimos dos días tuve algo de tiempo para conocer la ciudad de Cleveland. Tiene una arquitectura magnífica, pude disfrutar del Rock & Roll Hall of Fame, de la Biblioteca Pública, del Centro Glenn Close de la NASA, y del Museo de Arte. También ví la Universidad Estatal de Cleveland, son dos manzanas con dos torres de más de 20 pisos y varios otros edificios de al menos 5 pisos cada uno.

Paisaje de Cleveland.

Paisaje de Cleveland.

Para ver muchas más fotos, en la galería