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:
Overview
Here's a high level overview of the process I am attempting to automate with this project:
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.
Process
Here's a high level description of the process:
Refresh
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.
Build
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.
Publish
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
:
Configuration
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.
Documentation
You can find the documentation for ytffmpeg on Github: