В Linux программа FFmpeg, являющаяся бесплатным консольным мультимедийным фреймворком, позволяет конвертировать, записывать, транслировать аудио и видео.
Содержание
Синтаксис
ffmpeg [глобальные_параметры] {[параметры_входного_файла] -i входной_файл}... {[параметры_выходного_файла] выходной_файл}...
Установка FFmpeg в Linux
Установка в Ubuntu:
$ sudo apt install ffmpeg
Установка в Arch Linux:
$ yay -S ffmpeg
Поддерживаемые форматы
Для получения списка форматов, поддерживаемых FFmpeg, выполняем запуск программы с параметром -formats
:
oleg@mobile:~:$ ffmpeg -formats
...
File formats:
D. = Demuxing supported
.E = Muxing supported
--
D 3dostr 3DO STR
E 3g2 3GP2 (3GPP2 file format)
E 3gp 3GP (3GPP file format)
D 4xm 4X Technologies
E a64 a64 - video for Commodore 64
D aa Audible AA format files
D aac raw ADTS AAC (Advanced Audio Coding)
D aax CRI AAX
DE ac3 raw AC-3
...
DE wav WAV / WAVE (Waveform Audio)
D wavarc Waveform Archiver
D wc3movie Wing Commander III movie
E webm WebM
E webm_chunk WebM Chunk Muxer
DE webm_dash_manifest WebM DASH Manifest
E webp WebP
D webp_pipe piped webp sequence
DE webvtt WebVTT subtitle
DE wsaud Westwood Studios audio
D wsd Wideband Single-bit Data (WSD)
D wsvqa Westwood Studios VQA
DE wtv Windows Television (WTV)
DE wv raw WavPack
D wve Psion 3 audio
D x11grab X11 screen capture, using XCB
D xa Maxis XA
D xbin eXtended BINary text (XBIN)
D xbm_pipe piped xbm sequence
D xmd Konami XMD
D xmv Microsoft XMV
D xpm_pipe piped xpm sequence
E xv XV (XVideo) output device
D xvag Sony PS3 XVAG
D xwd_pipe piped xwd sequence
D xwma Microsoft xWMA
D yop Psygnosis YOP
DE yuv4mpegpipe YUV4MPEG pipe
oleg@mobile:~:$
Здесь приведён лишь фрагмент списка поддерживаемых форматов, так как весь список огромен.
Использование FFmpeg в Linux
Информация о файле
Для получения сведений о медиафайле, запустим:
oleg@mobile:~:$ ffmpeg -i bulgarian_05.flv
ffmpeg version n6.0 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.1 (GCC) 20230201
configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-version3 --enable-vulkan
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
Input #0, flv, from 'bulgarian_05.flv':
Metadata:
starttime : 0
totalduration : 398
totaldatarate : 181
bytelength : 8990890
canseekontime : true
sourcedata : B4A7D0B65MM1395514468407002
purl :
pmsg :
httphostheader : r17---sn-nv47en7d.googlevideo.com
Duration: 00:06:37.60, start: 0.000000, bitrate: 180 kb/s
Stream #0:0: Video: flv1, yuv420p, 320x240, 111 kb/s, 25 fps, 25 tbr, 1k tbn
Stream #0:1: Audio: mp3, 22050 Hz, stereo, fltp, 65 kb/s
At least one output file must be specified
oleg@mobile:~:$
В приведённом выводе FFmpeg отобразил информацию о медиафайле вместе с подробностями, такими как версия, сведения о конфигурации, уведомление об авторских правах, параметры сборки и библиотеки и т. п.
Для получения вывода без всех подробностей используется флаг -hide_banner
:
oleg@mobile:~:$ ffmpeg -i bulgarian_05.flv -hide_banner
Input #0, flv, from 'bulgarian_05.flv':
Metadata:
starttime : 0
totalduration : 398
totaldatarate : 181
bytelength : 8990890
canseekontime : true
sourcedata : B4A7D0B65MM1395514468407002
purl :
pmsg :
httphostheader : r17---sn-nv47en7d.googlevideo.com
Duration: 00:06:37.60, start: 0.000000, bitrate: 180 kb/s
Stream #0:0: Video: flv1, yuv420p, 320x240, 111 kb/s, 25 fps, 25 tbr, 1k tbn
Stream #0:1: Audio: mp3, 22050 Hz, stereo, fltp, 65 kb/s
At least one output file must be specified
oleg@mobile:~:$
Конвертирование видеофайла в иной формат
Поскольку FFmpeg является многофункциональным и мощным конвертером аудио и видео, то он способен конвертировать медиафайлы практически в любые форматы. Можем, например, преобразовать файл .flv
в .mp4
:
oleg@mobile:~:$ ffmpeg -i bulgarian_05.flv bulgarian_05.mp4
ffmpeg version n6.0 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.1 (GCC) 20230201
...
Input #0, flv, from 'bulgarian_05.flv':
Metadata:
starttime : 0
totalduration : 398
totaldatarate : 181
bytelength : 8990890
canseekontime : true
sourcedata : B4A7D0B65MM1395514468407002
purl :
pmsg :
httphostheader : r17---sn-nv47en7d.googlevideo.com
Duration: 00:06:37.60, start: 0.000000, bitrate: 180 kb/s
Stream #0:0: Video: flv1, yuv420p, 320x240, 111 kb/s, 25 fps, 25 tbr, 1k tbn
Stream #0:1: Audio: mp3, 22050 Hz, stereo, fltp, 65 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (flv1 (flv) -> h264 (libx264))
Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 0x55df7bf56080] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x55df7bf56080] profile High, level 1.3, 4:2:0, 8-bit
[libx264 @ 0x55df7bf56080] 264 - core 164 r3095 baee400 - H.264/MPEG-4 AVC codec - Copyleft 2003-2022 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'bulgarian_05.mp4':
Metadata:
starttime : 0
totalduration : 398
totaldatarate : 181
bytelength : 8990890
canseekontime : true
sourcedata : B4A7D0B65MM1395514468407002
purl :
pmsg :
httphostheader : r17---sn-nv47en7d.googlevideo.com
encoder : Lavf60.3.100
Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv420p(progressive), 320x240, q=2-31, 25 fps, 12800 tbn
Metadata:
encoder : Lavc60.3.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc60.3.100 aac
frame= 9941 fps=235 q=-1.0 Lsize= 7497kB time=00:06:37.75 bitrate= 154.4kbits/s speed= 9.4x
video:1785kB audio:5412kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.176303%
[libx264 @ 0x55df7bf56080] frame I:44 Avg QP:12.09 size: 6636
[libx264 @ 0x55df7bf56080] frame P:2943 Avg QP:14.08 size: 387
[libx264 @ 0x55df7bf56080] frame B:6954 Avg QP:13.80 size: 57
[libx264 @ 0x55df7bf56080] consecutive B-frames: 5.7% 2.2% 2.3% 89.8%
[libx264 @ 0x55df7bf56080] mb I I16..4: 56.5% 25.1% 18.4%
[libx264 @ 0x55df7bf56080] mb P I16..4: 0.5% 1.1% 0.4% P16..4: 5.8% 1.0% 0.8% 0.0% 0.0% skip:90.2%
[libx264 @ 0x55df7bf56080] mb B I16..4: 0.1% 0.1% 0.1% B16..8: 3.4% 0.1% 0.1% direct: 0.1% skip:96.1% L0:59.9% L1:38.2% BI: 1.9%
[libx264 @ 0x55df7bf56080] 8x8 transform intra:40.4% inter:59.6%
[libx264 @ 0x55df7bf56080] coded y,uvDC,uvAC intra: 28.9% 43.2% 33.5% inter: 0.9% 1.3% 0.7%
[libx264 @ 0x55df7bf56080] i16 v,h,dc,p: 70% 11% 16% 2%
[libx264 @ 0x55df7bf56080] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 14% 56% 2% 2% 2% 2% 2% 2%
[libx264 @ 0x55df7bf56080] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 20% 25% 5% 6% 5% 6% 5% 6%
[libx264 @ 0x55df7bf56080] i8c dc,h,v,p: 67% 13% 13% 7%
[libx264 @ 0x55df7bf56080] Weighted P-Frames: Y:7.2% UV:1.2%
[libx264 @ 0x55df7bf56080] ref P L0: 81.5% 5.2% 9.6% 3.3% 0.4%
[libx264 @ 0x55df7bf56080] ref B L0: 60.5% 38.2% 1.3%
[libx264 @ 0x55df7bf56080] ref B L1: 97.7% 2.3%
[libx264 @ 0x55df7bf56080] kb/s:36.76
[aac @ 0x55df7bf57840] Qavg: 64915.191
oleg@mobile:~:$
Конвертирование видеофайла в аудиофайл
Для преобразования видеофайла в аудиофайл нужно лишь указать выходной формат (.mp3
, .ogg
или иной), опция -vn
отключит запись видео:
oleg@mobile:~:$ ffmpeg -i bulgarian_05.mp4 -vn bulgarian_05.mp3
...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'bulgarian_05.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf60.3.100
Duration: 00:06:37.77, start: 0.000000, bitrate: 154 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 320x240, 36 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc60.3.100 libx264
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 111 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:1 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to 'bulgarian_05.mp3':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
TSSE : Lavf60.3.100
Stream #0:0(und): Audio: mp3, 22050 Hz, stereo, fltp (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
encoder : Lavc60.3.100 libmp3lame
size= 3109kB time=00:06:37.79 bitrate= 64.0kbits/s speed=80.2x
video:0kB audio:3108kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.010336%
oleg@mobile:~:$
Извлечение изображений из видеофайла
FFmpeg позволяет с лёгкостью извлекать изображения из видеофайла:
oleg@mobile:~:$ ffmpeg -i bulgarian_05.mp4 -r 1 -f image2 image-%2d.png
...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'bulgarian_05.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf60.3.100
Duration: 00:06:37.77, start: 0.000000, bitrate: 154 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 320x240, 36 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc60.3.100 libx264
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 111 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'image-%2d.png':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf60.3.100
Stream #0:0(und): Video: png, rgb24(pc, gbr/unknown/unknown, progressive), 320x240, q=2-31, 200 kb/s, 1 fps, 1 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc60.3.100 png
frame= 399 fps= 86 q=-0.0 Lsize=N/A time=00:06:38.00 bitrate=N/A dup=0 drop=9542 speed=85.8x
video:15747kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
oleg@mobile:~:$
Здесь:
- -r-
- Устанавливает частоту кадров (значение по умолчанию равно 25)
- -f-
- Указывает выходной формат (формат изображения в данном случае)
- image-%2d.png
- Указывает желаемое название извлечённых изображений
Заключение
Здесь были приведены простейшие примеры использования в Linux фреймворка FFmpeg. Возможности программы весьма велики и изучив работу с ней вы не будете разочарованы.