FFmpeg is a free (LGPL, GPL licensed) software project that produces programs and libraries for managing multimedia files. It can convert any video format to another video format by changing the codecs as well.
FFmpeg can be used by end users and system administrators. Specifying FFmpeg’s output directory may be different for the 2 user types. In this article “How to set ffmpeg output directory?” We will answer the question.
How to set ffmpeg output directory?
The usage of FFmpeg is as follows:
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
If you are going to work on only one file, you just need to be in the directory where the file is located:
[foc@rocky9 ~]$ pwd
/home/foc
[foc@rocky9 ~]$ ls
answer.m4a
Simple Usage Example
Let’s do an example on a file according to FFmpeg standard usage.To convert answer.m4a to answer.mp3, the command should be written like this:
[foc@rocky9 ~]$ ffmpeg -i answer.m4a answer.mp3
ffmpeg version 5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 11 (GCC)
configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --docdir=/usr/share/doc/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' --extra-ldflags='-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 ' --extra-cflags=' -I/usr/include/rav1e' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --enable-chromaprint --disable-crystalhd --enable-fontconfig --enable-frei0r --enable-gcrypt --enable-gnutls --enable-ladspa --enable-libaom --enable-libdav1d --enable-libass --enable-libbluray --enable-libbs2b --enable-libcdio --enable-libdrm --enable-libjack --enable-libjxl --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libilbc --enable-libmp3lame --enable-libmysofa --enable-nvenc --enable-openal --enable-opencl --enable-opengl --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librav1e --enable-librubberband --enable-libsmbclient --enable-version3 --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-version3 --enable-vapoursynth --enable-libvpx --enable-vulkan --enable-libshaderc --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-avfilter --enable-libmodplug --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-lto --enable-libmfx --enable-runtime-cpudetect
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'answer.m4a':
Metadata:
major_brand : 3gp4
minor_version : 0
compatible_brands: isom3gp4
creation_time : 2022-12-25T18:35:05.000000Z
com.android.version: 13
Duration: 00:23:02.76, start: 0.000000, bitrate: 130 kb/s
Stream #0:0[0x1](eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 128 kb/s (default)
Metadata:
creation_time : 2022-12-25T18:35:05.000000Z
handler_name : SoundHandle
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to 'answer.mp3':
Metadata:
major_brand : 3gp4
minor_version : 0
compatible_brands: isom3gp4
com.android.version: 13
TSSE : Lavf59.27.100
Stream #0:0(eng): Audio: mp3, 44100 Hz, mono, fltp (default)
Metadata:
creation_time : 2022-12-25T18:35:05.000000Z
handler_name : SoundHandle
vendor_id : [0][0][0][0]
encoder : Lavc59.37.100 libmp3lame
size= 10804kB time=00:23:02.76 bitrate= 64.0kbits/s speed= 144x
video:0kB audio:10803kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.003200%
As can be seen in the command output, the directory where the file is located is detected as both input folder and output folder. Because we did not assign any input/output folder.
And after the command the convert process is completed. A new file has been created in the active folder.
[foc@rocky9 ~]$ ls
answer.m4a answer.mp3
If the files are not in the active folder, their location is written after the -i parameter:
[foc@rocky9 ~]$ sudo ffmpeg -i /opt/answer.m4a /opt/answer.mp4
Output #0, mp4, to '/opt/answer.mp4':
Metadata:
major_brand : 3gp4
minor_version : 0
compatible_brands: isom3gp4
...
You can see the Output folder in the command output.
Using FFmpeg in Bash Script
If you are going to convert on a single file or once, the above step will be enough for you. If the convert process is to be repeated over and over, it must of course be automated with a bash script.
Let’s write an example script. Let’s give the output and input directory information as constant in the script:
[foc@rocky9 ~]$ cat convert.sh
#!/bin/bash
input="/home/foc/convert-input"
output="/home/foc/convert-output"
ffmpeg -i $input/answer.m4a $output/answer.mp3
Run the script:
[foc@rocky9 ~]$ ./convert.sh
You can see the input and output folder directories in the script output:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/foc/convert-input/answer.m4a':
...
Output #0, mp3, to '/home/foc/convert-output/answer.mp3':
...
You can give directory information as environment variable:
[foc@rocky9 ~]$ export ffmpeg_input="/home/foc/convert-input"
[foc@rocky9 ~]$ export ffmpeg_output="/home/foc/convert-output"
[foc@rocky9 ~]$ echo $ffmpeg_output
/home/foc/convert-output
[foc@rocky9 ~]$ echo $ffmpeg_input
/home/foc/convert-input
Then we can edit the script like this:
[foc@rocky9 ~]$ cat convert.sh
#!/bin/bash
ffmpeg -i $ffmpeg_input/answer.m4a $ffmpeg_output/answer.mp3
Then you won’t need to give the input/output folder in the script.
Summary
In this article, we have made examples of setting the input/output folder using ffmpeg. If you haven’t installed ffmpeg before, you can start from the article “Install FFmpeg in Rocky Linux 9 [Step-by-Step]”.
References
ffmpeg.org -
ffmpeg Documentation
superuser.com -How do I specify ffmpeg video
directory?

![How to set FFmpeg output directory? [SOLVED]](/set-ffmpeg-output-directory/set-ffmpeg-output-directory.jpg)
