In this article you will learn how to use FFmpeg to effortlessly convert
mp4, additionally, you will be acquainted with re-encoding video and audio using different
Table of Contents
We will discuss converting
mkv files to
mp4; there is a high probability that you might be in situations that require having
mp4 files, or you may want to use systems that do not support the
mkv container format. In these situations, it is imperative to convert the video file to another system-friendly file extension, such as the mp4 video format.
Basic FFmpeg commands consist of four elements:
ffmpeg [Input File] [Flags/Actions] [Output File]
How to Install FFmpeg
To install the FFmpeg project, we first go to our terminal and type the following update command to download package information from all configured sources:
sudo apt update
After making sure that the first command got executed correctly, Type the below-given command and hit
Enter to install the project:
sudo apt install ffmpeg
After executing the preceding command. FFmpeg will get installed onto our system and also add the
ffmpeg binary to the path variable. So now we can use the
ffmpeg command in the command line.
One final step left is to verify that FFmpeg is actually installed. Let’s type
ffmpeg to check the FFmpeg configuration.
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
-versioncommand line switch.
Getting Started with FFmpeg
For this tutorial, we are going to work on a short clip from an old cartoon series. Let’s start by downloading the Matroska media file (link) by following the bellow given command:
--2022-06-19 16:22:24-- https://archive.org/download/barney-bear-1939-mkv/Barney%20Bear%20-%20E22%20-%20Wee-Willie%20Widlcat%20%28June%2020%2C%201953%29.mkv Resolving archive.org (archive.org)... 188.8.131.52 Connecting to archive.org (archive.org)|184.108.40.206|:443... connected. HTTP request sent, awaiting response... 302 Found . . . Connecting to ia801904.us.archive.org (ia801904.us.archive.org)|220.127.116.11|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 69396820 (66M) [application/octet-stream] Saving to: 'Barney Bear - E22 - Wee-Willie Widlcat (June 20, 1953).mkv'
Change the file name to
Bbear.mkv . Check the below command:
mv 'Barney Bear - E22 - Wee-Willie Widlcat (June 20, 1953).mkv' 'Bbear.mkv' ls
audio2.mp3 audio.aac audio.mp3 Bbear.mkv video.mp4
Checking the Media Streams and Information
It’s always recommended to check and familiarize ourselves with basic metadata about video files and also the containing streams. We can achieve this by using the
-i command line argument without specifying an output.
ffmpeg -i Bbear.mkv
Input #0, matroska,webm, from 'Bbear.mkv': . . . Metadata: CREATION_TIME : ENCODER : Lavf55.12.0 Duration: 00:06:31.47, start: 0.083000, bitrate: 1418 kb/s Stream #0:0: Video: h264 (Main), yuv420p(tv, smpte170m/smpte170m/bt709, progressive), 686x480, SAR 1:1 DAR 343:240, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default) Stream #0:1(und): Audio: ac3, 48000 Hz, stereo, fltp, 256 kb/s (default) Metadata: title : Stereo LANGUAGE : und Stream #0:2(und): Subtitle: ass
Note: We can achieve similar results by using
ffprobe which is one of FFmpeg main executable, this command is used for getting the characteristics of media files containers and streams. Follow the bellow command:
After we’ve checked the media file information, notice the different streams, Video:
ac3, and also the subtitle stream Subtitle:
Note: As with any command line interface, the user should specify the path of input or output files depending on their working directories. In the examples given in this article, it is assumed that the user has navigated to the working directory to execute the FFmpeg commands.
Converting MKV to MP4
ffmpeg we can choose between two different ways to convert media files. The first and easy one is to copy streams into the desired container, and the second one is to re-encode those streams in order to change their quality or size…
Converting MKV to MP4 Without Re-Encoding
mp4 is actually quite easy; we can use
ffmpeg command to copy the original video and audio streams into a new container. This simple method can save a lot of time since we are not encoding the media file, and the conversion process will be fast. Additionally, the video and audio quality will not be reduced. In order to achieve this, we will use the the
-c copy ffmpeg option just as so:
ffmpeg -i Bbear.mkv -c copy Bbear_wout.mp4
You can check the streams of our new MPEG-4 file; you’ll notice that nothing changed – except for the container.
Another way to convert (copy streams into a new container) is by specifying the streams you want to be copied into the new container, to do that we will use the
-c:v copy and
-c:a copy options to replicate only the video and audio into the
.mp4 file. Let’s check the following command:
ffmpeg -i Bbear.mkv -c:v copy -c:a copy Bbear_vid-aud.mp4
After displaying the new media file information, you’ll notice that the subtitle stream does not exist. (To copy the subtitle stream use the
-c:s copy option)
Converting MKV to MP4 With Re-Encoding
FFmpeg is able to encode a wide variety of video and audio formats. The
-c command line switch let us specify our favorite encoder. As you might have noticed, we can use the
-c command option to set a codec for each stream; instead of the
copy parameter. Follow the below-mentioned command for better understanding.
ffmpeg -i Bbear.mkv -c:v copy -c:a libvorbis Bbear_encode-AUD.mp4
In the preceding command, we encoded the audio stream by choosing the
libvorbis encoder. However, we copied the video into the new container.
How about we set an encoder for our video stream as well? Let’s do that by changing the copy from the previous command to
mpeg4, just as so:
ffmpeg -i Bbear.mkv -c:v mpeg4 -c:a libvorbis Bbear_ENCODE_vid-aud.mp4
Note: In case you are converting to
mp4, these are some of the favorites codecs that you can use (
libxvid ); on the other hand, you can choose from the following audio codecs (libfaac , libfdk_aac , libvorbis , libmp3lame, and acc).
We can also check with the
-encoders flag all available encoders supported by the
ffmpeg command. Check the following command:
Encoders: V..... = Video A..... = Audio S..... = Subtitle .F.... = Frame-level multithreading ..S... = Slice-level multithreading ...X.. = Codec is experimental ....B. = Supports draw_horiz_band
In this article, we’ve walked you through the different ways of converting
mp4, and also we showed you how to use
ffmpeg‘s video and audio encoders to reduce size and control quality. We hope these commands may come in handy for you.