MLT query video_codecs not listing libx264 - ffmpeg

Querying video codecs does not list libx264 as an available codec
[terry#localhost ~]$ melt -query video_codecs | grep 264
- h264_nvenc
- h264_v4l2m2m
- h264_vaapi
- nvenc_h264
- h264
- h264_cuvid
But I can use it in a command such as:
melt avformat:DarkStar.webm -consumer avformat:output.mp4 acodec=aac vcodec=libx264
and it works successfully.
This is causing a problem with kdenlive. When selecting Render and choosing the format MP4 - the dominating format (H264/AAC) the render option is disabled with the error Unsupported video codec: libx264.
kdenlive checks the profile codec against the list obtained from MLT using:
Mlt::Properties vcodecs(mlt_properties(consumer->get_data("vcodec")));
which seems to get the same list as query video_codecs.
For info here is what ffmpeg says about the codecs:
[terry#localhost ~]$ ffmpeg -codecs | grep 264
ffmpeg version 4.3 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9.3.0 (PCLinuxOS 9.3.0-1pclos2020)
configuration: --prefix=/usr --enable-shared --enable-pic --libdir=/usr/lib64 --shlibdir=/usr/lib64 --incdir=/usr/include --extra-cflags=-I/usr/include/nvenc --disable-stripping --enable-postproc --enable-gpl --enable-pthreads --enable-libtheora --enable-libvorbis --disable-encoder=vorbis --enable-libvpx --enable-runtime-cpudetect --enable-libdc1394 --enable-librtmp --enable-libspeex --enable-libfreetype --enable-libgsm --enable-libcelt --enable-libopus --enable-libopencv --enable-libopenjpeg --enable-libtwolame --enable-libxavs --enable-frei0r --enable-libmodplug --enable-libass --enable-gnutls --enable-libcdio --enable-libpulse --enable-libv4l2 --enable-avresample --enable-opencl --enable-libmp3lame --enable-libaom --enable-sndio --enable-libdav1d --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libx264 --enable-libx265 --enable-libvo-amrwbenc --enable-libxvid --enable-decoder=atrac3 --enable-decoder=atrac3p --enable-libwebp --enable-libfdk-aac --enable-nonfree --enable-cuda --enable-cuvid --enable-nvenc --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_cuvid ) (encoders: libx264 libx264rgb h264_nvenc h264_v4l2m2m h264_vaapi nvenc nvenc_h264 )
Software versions:
mlt-6.20.0
ffmpeg-4.3
x264-1.157.20190309

libx264 is not a codec, its an encoder implementation of a codec. use ffmpeg -encoders | grep 264

There were changes in ffmpeg 4.3 which required MLT to be rebuilt against it.

Related

Attempting to encode .png images to video format .avi. Getting an output error

Here is the problem. My code is:
cat *.png | ffmpeg -framerate 30 -f image2pipe -i -c:a copy -c:v libx264 -crf 18 -preset veryslow - output.avi
output is:
ffmpeg -framerate 30 -f image2pipe -i -c:a copy -c:v libx264 -crf 18
-preset veryslow - output.avi ffmpeg version 5.1.2-essentials_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers built with gcc 12.1.0 (Rev2, Built by MSYS2 project) configuration: --enable-gpl --enable-version3 --enable-static
--disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband 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
-c:a: Protocol not found Did you mean file:-c:a?
I am not sure how to proceed.
A one liner that I found elsewhere.

How to convert wav audio file to aac in python?

I have a project about audio compression, I've been working with pydub I am using the function export() to write and save the file it works perfectly fine from aac to wav but doesn't the other way around it gives me this error : (From what I understood, ffmpeg doesn't support the aac format for this function )
Encoding failed. ffmpeg/avlib returned error code: 1
Command:['ffmpeg', '-y', '-f', 'wav', '-i', '/var/folders/n1/x3tb_rg17pdgss5jb_zr7v380000gn/T/tmp7rv9zmjx', '-f', 'm4a', '/var/folders/n1/x3tb_rg17pdgss5jb_zr7v380000gn/T/tmpco06cpgo']
Output from ffmpeg/avlib:
ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 12.0.0 (clang-1200.0.32.27)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.1_4 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from '/var/folders/n1/x3tb_rg17pdgss5jb_zr7v380000gn/T/tmp7rv9zmjx':
Duration: 00:00:01.82, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
[NULL # 0x7fbbb7008200] Requested output format 'm4a' is not a suitable output format
/var/folders/n1/x3tb_rg17pdgss5jb_zr7v380000gn/T/tmpco06cpgo: Invalid argument
aac
Command:['ffmpeg', '-y', '-f', 'wav', '-i', '/var/folders/n1/x3tb_rg17pdgss5jb_zr7v380000gn/T/tmp7rv9zmjx', '-f', 'adts', '/var/folders/n1/x3tb_rg17pdgss5jb_zr7v380000gn/T/tmpco06cpgo']
m4a
Command:['ffmpeg', '-y', '-f', 'wav', '-i', '/var/folders/n1/x3tb_rg17pdgss5jb_zr7v380000gn/T/tmp7rv9zmjx', '-f', 'ipod', '/var/folders/n1/x3tb_rg17pdgss5jb_zr7v380000gn/T/tmpco06cpgo']

FFMPEG Output to DeckLink Duo 2

Im trying to use FFMPEG to stream out to my Decklink duo 2 but im unable to do so.
Heres the command that im trying:
ffmpeg -f decklink -i "DeckLink Duo (1)#5"
-pix_fmt uyvy422 -r 25000/1000 "DeckLink Duo (3)"
I tried just sending color bars as an output but it still doesnt work
Command:
ffmpeg -f lavfi -i color=color=red -t 10000 "DeckLink Duo (3)"
Both Result:
ffmpeg version N-82794-g3ab1311 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads
--enable-dxva2 --enable-libmfx --enable-nvenc
--enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r
--enable-gnutls --enable-iconv --enable-libass
--enable-libbluray --enable-libbs2b --enable-libcaca
--enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc
--enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg
--enable-libopus --enable-librtmp --enable-libschroedinger
--enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora
--enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc
--enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp
--enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg
--enable-lzma --enable-decklink --enable-zlib
libavutil 55. 42.100 / 55. 42.100
libavcodec 57. 67.100 / 57. 67.100
libavformat 57. 58.102 / 57. 58.102
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 68.100 / 6. 68.100
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Input #0, lavfi, from 'color=color=red':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
[NULL # 00000000025745a0] Unable to find a suitable output format for 'DeckLink Duo (3)'
DeckLink Duo (3): Invalid argument
Any Suggestions or help to solve this is much appreciated.
As the documentation says "DeckLink is very picky about the formats it supports. Pixel format is always uyvy422, framerate, field order and video size must be determined for your device with -list_formats 1. Audio sample rate is always 48 kHz.", see https://www.ffmpeg.org/ffmpeg-devices.html#decklink-1. So you need to add the resolution and make sure it is supported.
For the Duo 2 or Quad 2, You need to confirm in Desktop Video utility that you have assigned an SDI port to the channel, otherwise it may be in key/fill mode. This can be found in the third tab called "Connectors". If you can't select one (happens on device (2) or (4) if 1 or 3 are set to key/fill mode, you go back to 1 or 3 and change them to use a single connector.
That was the cause of my I/O error trying to use chanel (3).

ffmpeg: Encoder (codec amr_nb) not found for output stream #0:1

I'm using this command to convert flv to 3gp
ffmpeg -y -i in.flv -ar 8000 -b:a 12.20k -ac 1 -s 176x144 out.3gp
And it's giving this error
Encoder (codec amr_nb) not found for output stream #0:1
I have searched for amr_nb packages on yum but didn't able to find it.
I'm on CentOS 7
ffmpeg -version
ffmpeg version 2.6.8 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-4)
configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --enable-libfaac --enable-nonfree --enable-libfdk-aac --enable-nonfree --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
libavutil 54. 20.100 / 54. 20.100
libavcodec 56. 26.100 / 56. 26.100
libavformat 56. 25.101 / 56. 25.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 11.102 / 5. 11.102
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
I'm not sure what's missing.
Edit:
I followed this guide https://s3bubble.com/installing-ffmpeg-on-centos-6-6-in-usrlocalbin/ + alijandro's advice.
The ffmpeg installed in your system didn't support encoder amr-nb which is the default encoder for 3gp format.
See if you can find in the encoders list
$ ffmpeg -encoders |grep amr_nb
You can try
use h263/aac as the output encoder, add the option -vcodec h263 -acodec aac
or build ffmpeg with amr-nb support
get opencore source from here https://sourceforge.net/projects/opencore-amr
compile the source and install to /path/to/opencore-amr
get the source of ffmpeg
configure ffmpeg with the options
$./configure --enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-version3 \
...
--extra-cflags="-I/path/to/opencore-amr/include" \
--extra-ldflags="-L/path/to/opencore-amr/lib"
...
# more configure options
compile and install ffmpeg, then your command will work

ffmpeg isn't accepting "%d" format?

So, I have a directory full of files named motor_animate_000.gif, motor_animate_001.gif, etc.
I run:
ffmpeg -r 30 -i motor_animate_%03d.gif -r 30 motor.mpg
I expect to get a file called motor.mpg, but instead I get the usual bunch of printout, ending with:
motor_animate_%03d.gif: No such file or directory
What? This worked in Ubuntu 14.04, but doesn't work now. What I'm doing appears to be consistent with the ffmpeg man page. I'm now officially clueless. Thanks in advance.
Here's what I get when I try the alternate suggested below:
tim#Servo:~/Documents/Movies/dcmotor/animation$ ffmpeg -f image2 -framerate 30 -i motor_animate_%03d.gif motor.mpg
ffmpeg version 2.8.10-0ubuntu0.16.04.1 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
[image2 # 0x20bd420] Could not find codec parameters for stream 0 (Video: none, none): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
motor_animate_%03d.gif: could not find codec parameters
Input #0, image2, from 'motor_animate_%03d.gif':
Duration: 00:00:04.03, start: 0.000000, bitrate: N/A
Stream #0:0: Video: none, none, 30 fps, 30 tbr, 30 tbn, 30 tbc
No decoder for stream #0:0, filtering impossible
Error opening filters!
The gif demuxer does not support a series of input files. You'll need to manually tell it to use the image file demuxer instead:
ffmpeg -f image2 -framerate 30 -i motor_animate_%03d.gif motor.mpg
The image file demuxer uses -framerate instead of -r.
You don't need to declare frame rate twice if you want to output to be the same as the input, so I removed the output -r.

Resources