Encoding audio to matroska container using ffmpeg audio encoder adpcm_adx - c++

Trying to reencode audio file from mp4 container to Matroska(mkv) container using FFmpeg audio encoder adpcm_adx or (aptx, comfortnoise, g726le...) I am getting an error message
No wav codec tag found for codec ...
I have c++ code which includes thired-party integration of ffmpeg,
and I am having the same result using ffmpeg terminal options.
ffmpeg -i file.mp4 -c:v copy -c:a adpcm_adx -b:a 44100 output.mkv
Instead of getting output file correctly I am getting
No wav codec tag found for codec adpcm_adx
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:0 -- Conversion failed!
Maybe I should specify extra parameters for making it work which I haven't hooked up yet.
Thanks in advance.
I'll appreciate any help.

Related

ffmpeg/Libavcodec couldn't find codec

I want to make a transcoding video app from h.264 to h.265.
I have a problem with libavcodec library. I have this library in my project, all function is working, but when i'm trying to set codec :
avcodec_find_decoder_by_name("libx265");
function couldn't find it. Hovewer, when i give "hevc" instead of "libx265" function is working, but it's not the same.
Please for help :)
There is no decoder named libx265
libx265 is only an encoder.
FFmpeg has a native, built-in HEVC/H.265 decoder
It is named hevc. You don't have to do anything special to include or enable it.
There are also several hardware accelerated HEVC decoders that may be available for your system: hevc_cuvid, hevc_mediacodec, hevc_qsv, hevc_rkmpp, and hevc_v4l2m2m.
ffmpeg has implemented codecs (lets call them builtin) and wrappers to third party codecs. It seems/could be that the h265 codec is just a wrapper, that means you have to install a h265 decoder. Besides, did you specify the h265 codec when you configured ffmpeg? Did you build it yourself or pre build via package manager?
Try 'ffmpeg -decoders' at the command line and search for h265.

I am using ffmpeg library in my program to record video and audio

I want to record video coming from a camcorder to a wmv file. I am using ffmpeg libraries and I have it saving the video as an "avi" file. However the requirements of the project is to output a wmv file. Can anyone help me discover how to set up the video and audio codecs?
You can configure for video codec as MPEG4 and audio codec as Windows media audio 2 to get the .wmv file format.
ffmpeg -i input.mp4 -b:v 2M -vcodec msmpeg4 -acodec wmav2 output.wmv
When you use ffmpeg to generate WMV format the output video quality may be slightly less than other format. So it is better to set the qscale value to get better quality video.

Reading video files with OpenCV VideoCapture

I am having trouble being able top open any video files in OpenCV besides those encoded in MJPEG.
I have installed OpenCV using this script (which should compile OpenCV with support for ffmpeg) and an testing using the sample provided here.
When running with a h264 encoded video I get:
[mov,mp4,m4a,3gp,3g2,mj2 # 0x123ed80] multiple edit list entries, a/v desync might occur, patch welcome
[h264 # 0x12465e0] A non-intra slice in an IDR NAL unit.
[h264 # 0x12465e0] decode_slice_header error
Could not open the output video for write: test.mp4
When running with an MPEG-2 encoded video I get:
[mpegts # 0x1e92d80] PES packet size mismatch
[mpegts # 0x1e92d80] PES packet size mismatch
[mpegts # 0x1e92d80] max_analyze_duration reached
[mpegts # 0x1e92d80] PES packet size mismatch
Could not open the output video for write: test.mpeg
I am running x64 Ubuntu 12.04.
EDIT: I tried OpenCV 2.4.8 on a Ubuntu 13.10 x86 VM, ffmpeg works fine, however the sample code still fails, this time with the following error:
[h264 # 0x849ff40] A non-intra slice in an IDR NAL unit.
[h264 # 0x849ff40] decode_slice_header error
Could not find encoder for codec id 28: Encoder not foundOpenCV Error: Unsupported format or combination of formats (Gstreamer Opencv backend doesn't support this codec acutally.) in CvVideoWriter_GStreamer::open, file /home/dan/Install-OpenCV/Ubuntu/2.4/OpenCV/opencv-2.4.8/modules/highgui/src/cap_gstreamer.cpp, line 505
terminate called after throwing an instance of 'cv::Exception'
what(): /home/dan/Install-OpenCV/Ubuntu/2.4/OpenCV/opencv-2.4.8/modules/highgui/src/cap_gstreamer.cpp:505: error: (-210) Gstreamer Opencv backend doesn't support this codec acutally. in function CvVideoWriter_GStreamer::open
I am not sure about the main reason for this. But I guess this problem is relate to the decoder installed on your system. According to the install script from github, it removes your ffmpg and x264 then rebuilds them from source code. Before testing your OpenCV code, try simple "ffmpeg" command on your test video.
Such as: ffmpeg -i inputfile.avi -f image2 image-%3d.jpeg
The script you have used is quite old and installs old version of OpenCV (2.4.2, while the latest stable is 2.4.8), try to use this script - https://github.com/jayrambhia/Install-OpenCV/blob/master/Ubuntu/2.4/opencv2_4_8.sh or install OpenCV and ffmpeg on you own.
As rookiepig mentioned - check whether ffmpeg is working.
Try to use different codec - here http://www.fourcc.org/ is full list of options, of course testing all of them is useless - jsut try the most popular codecs.
I know that it's stupid, but on Windows some codecs works only in release mode(okay, probably they are working in both modes, but on my machine they used to work only in release mode). Try to compile you program in both modes and check whether there is some difference.
And show us you code, maybe there is something wrong in it.

Video codec for H264 with opencv

I am trying to create a movie using opencv and I need that output file be in H264 format.
I used the following fourcc in opencv, but I am getting error that suitable codec is not installed.
fourcc=CV_FOURCC('H','2','6','4') ;
When I run my application I get the following error message:
Could not find encoder for codec id 28: Encoder not found
What do I need to be able to use this codec in OpenCV?
H264 is not a codec, but rather a standard, while for example x264 is an encoder that implements the H264 standard (CV_FOURCC('X','2','6','4') ;).
OpenCV can write videos using FFMPEG or VFW. You need to compile FFPMEG with x264-support (instructions can be found on FFMPEG's website)
If you are using VFW: Take a look at http://sourceforge.net/projects/x264vfw/

how to convert and play a .h263 file?

I am working on ubuntu. I have a file.h263 and I don't know how to play it. I've tried ffmpeg -f msg0001.h263 -i file.avi but it didn;t work. Need some help please. I want to convert file.h263 in .avi or mp2 in order to play the file in an android phone. Got any advices? It would be best to have a c++ code. but i didn't find any example, nothing at all.
Please help. If you have a piece of code that does this I would appreciate.
Thx
You should be able to play H263 file and convert it to AVI as the following:
ffplay -i file.h263
ffmpeg -i file.h263 file.avi
For android playback you can keep video stream in H.263 and convert the file to 3GPP (.3gp) or MPEG-4 file format or change file format and codec to MPEG-4 and H.264. For example:
ffmpeg -i file.h263 -vcodec copy -f 3gp file-h263.3gp
ffmpeg -i file.h263 -vcodec h264 -f mp4 file-h264.mp4
See Android supported media formats for more information.
.h263 is old yet great format, and if your software player uses HW accelration to play video that majority of old videocards (including Nvidia, ATI) will provide you HW accelration for video playback for .h263 format files... now various use .h264 format... thus try to convert videos to .h264 format instead of avi...
i think what you are facing is a extension delima .... try renaming it to MP4, then various player will play it without problems..
you can also use vlc.. one of the best video players ever...
Beside GStreamer can play H263 files , and with gstreamer pipelines you can convert various format on flies...
though i usually use Handbreak to convert video files /DVD's, and it is available on windows, Mac as well as on linux ....
P.S. in Gstreamer, you might need to install plugins, install all 2... good, bad and ugly plugin. i am not sure in which .h263 comes in, but must be in one of these three......