Welcome to Markizano.NET: Home of ytffmpeg project!

ytffmpeg: Streamline Your Posting Process!

ytffmpeg is a command-line tool that allows you to convert and compress your videos for YouTube, TikTok, and and other video-friendly social media platforms. It is designed to be easy to use and to provide the best quality for your videos. It is also open-source, so you can modify it to your needs.

One of the things that's really great about ytffmpeg is all subttiles are generated locally. No ChatGPT services are used in processing the video. This means that you can use ytffmpeg to process your videos without having to worry about your data being sent to a third-party service.

Download ytffmpeg

You can download ytffmpeg from Github:


Here's a high level overview of the process I am attempting to automate with this project: Architecture Diagram
Architecture Diagram

The idea is to take a series of inputs such as videos I have recorded from my phone, OBS, custom audio files I may have build, and publish at the direction of the ytffmpeg.yml configuration file.


Here's a high level description of the process:


During the refresh process, ytffmpeg will look for new media in the resources/ directory. If any mp4 files are found, they are converted to mkv files.
If any mkv files are found with missing generated subtitles and subtitle support is enabled, it will automatically generate subtitles for all MKV files.
Finally, if any MKV files are found that are not part of any INPUTS as described by ytffmpeg.yml configuration, they will be appended to the list of input videos to process into a pristine cut to be built/compiled and published to your configured social media sites.

The refresh process is designed to ensure ytffmpeg.yml has all files in resources/ as an INPUT file somewhere. In a future release, it will complain about "garbage" being in the resources directory. If it's not a direct requirement for ffmpeg and compiling the final product, then it should go in a different directory.


For each of the videos described in ytffmpeg.yml configuration, ytffmpeg will process the instructions provided to cut, slice, overlay or whatever to the video as necessary. It will then combine subtitles as needed and output a result video in the build/ directory.
This will be stored as an mp4 file with h264 encoding and aac audio encoding to ensure they are compliant enough to publish to Social Media platforms.

If a resource is provided on the command line, then ytffmpeg will only process that resource and any dependencies it may have. This is useful when you are only working on one video in a project and don't want to re-compile the entire project.

What's nice about the build process is it will produce a video with h264 encoding for video and aac endcoding for audio wrapped in a mp4 file. This is the most compatible format for social media platforms. It will also include subtitles in the video file. Not only are there subtitle streams attached as metadata (soft-subs) in the video file itself, but also on-screen subtitles are burned into the video file (hard-subs). This is to ensure that the video is accessible to all viewers.


For each of the videos described in the local ytffmpeg.yml configuration, ytffmpeg will attempt to publish each of the videos to the configured social media platforms. Platforms can be configured globally in your system in /etc/ytffmpeg/config.yml, per user in ~/.config/ytffmpeg/config.yml, or per project in the local ./ytffmpeg.yml.

More Details

Here's more detailed information about ytffmpeg:


What makes ytffmpeg so powerful is the ytffmpeg.yml configuration file. This file is used to describe the videos you want to process, how you want to process them, and where you want to publish them. It is a simple YAML file that is easy to read and write. In a future release, I want to introduce the idea of parsing data structures to craft ffmpeg filter_complex commands to make it easier to describe how you want to process your videos.

For example, when trimming a video, it's important to reset the PTS (presentation time stamp) before using in a concat function to ensure the snippet plays correctly in the final video. This is a complex process that is difficult to describe in a simple configuration file. I want to make it easier to describe these complex processes in a simple way that makes it easier to swiftly process your videos without getting in the way of a thousand options in a visual editor like Blender, Adobe Premiere, or Final Cut Pro.


You can find the documentation for ytffmpeg on Github: