ffmpeg Unsupported codec adpcm_ima_wav when i want sending in RTP - audio

when i want encode a wav file and send it with rtp in ffmpeg i receive an error that say "Unsupported codec adpcm_ima_wav" but i can encode this file with adpcm_ima_wav and save this file but i can not send with rtp in ffmpeg.
ffmpeg -hide_banner -y -re -thread_queue_size 4 -i audio -acodec adpcm_ima_wav -sdp_file test.sdp -f rtp "rtp://127.0.0.1:2222"
below show this error:
Input #0, wav, from 'audio':
Metadata:
encoded_by : Pro Tools
originator_reference: !jtMVHCThOfaaaGk
date : 2010-09-14
creation_time : 08:04:58
time_reference : 0
Duration: 00:00:30.03, bitrate: 2304 kb/s
Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s32 (24 bit), 2304 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s24le (native) -> adpcm_ima_wav (native))
Press [q] to stop, [?] for help
[rtp # 0x55867efcd380] Unsupported codec adpcm_ima_wav
Could not write header for output file #0 (incorrect codec parameters ?): Operation not permitted
Error initializing output stream 0:0 --
Conversion failed!

ffmpeg Support decode and encode adpcm_ima_wav but When you want to convert any codec to adpcm_ima_wav,chunk is important for you so you need to pay attentions to calculation of chunk. I understood that i forgot calculation chunk of That voice i want to convert.

Related

ffmpeg default audio codec instead of specifying it with acodec option

In raspberry pi I've following i2s microphone breakout board and use it like the guide suggested. When I try record audio from it using ffmpeg to the file with ffmpeg -f alsa -i dmic_sv out.wav command. I'll receive following error
[alsa # 0x22e21c0] cannot set sample format 0x10000 2 (Invalid argument)
dmic_sv: Input/output error
When I specify the used codec explicitly with -acodec it works fine:
ffmpeg -f alsa -acodec pcm_s32le -i dmic_sv out.wav
And from the output ffmpeg will reencode to pcm_s16le
Input #0, alsa, from 'dmic_sv':
Duration: N/A, start: 1597597938.887969, bitrate: 3072 kb/s
Stream #0:0: Audio: pcm_s32le, 48000 Hz, stereo, s32, 3072 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s32le (native) -> pcm_s16le (native))
How I can tell ffmpeg to use signed 32-bit little endian by default without specifying it explicitly? And where ffmpeg gets this default and can I configure it somehow?
I figured this one out myself by reading ffmpeg source code. It seems when codec is not specified and alsa device is used. FFmpeg will default to pcm 16-bit samples instead. Code to set the default here and the default macro here.

Extract audio with ffmpeg, linux

I'm trying to extract audio tracks from some Avi videos and save them to their own files, ideally without re-encoding.
I've had a look through here https://www.ffmpeg.org/ffmpeg.html#Audio-Options and here ffmpeg to extract audio from video though I'm getting errors regardless of the approach I try.
My latest command string is:
ffmpeg -i /home/d/Pictures/Test/input-video.AVI -map 0:a -vn -acodec copy /home/d/Pictures/Test/output-audio.m4a
The key part of the output is:
Guessed Channel Layout for Input Stream #0.1 : mono
Input #0, avi, from '/home/d/Pictures/Test/input-video.AVI':
Duration: 00:00:05.94, start: 0.000000, bitrate: 18131 kb/s
Stream #0:0: Video: mjpeg (MJPG / 0x47504A4D), yuvj422p(pc, bt470bg/unknown/unknown), 1280x720, 17995 kb/s, 30.28 fps, 30.28 tbr, 30.28 tbn, 30.28 tbc
Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 11025 Hz, 1 channels, s16, 176 kb/s
File '/home/d/Pictures/Test/output-audio.m4a' already exists. Overwrite ? [y/N] y
[ipod # 0x1d89520] Codec for stream 0 does not use global headers but container format requires global headers
[ipod # 0x1d89520] Could not find tag for codec pcm_s16le in stream #0, codec not currently supported in container
Output #0, ipod, to '/home/d/Pictures/Test/output-audio.m4a':
Metadata:
encoder : Lavf56.40.101
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 11025 Hz, mono, 176 kb/s
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
I'm believe I have got the right audio stream number from this output and thus am assuming the "-map 0:a" part isn't the problem.
I'm running on Linux Mint 18.1
MP4 family of formats don't store PCM audio, so you either have to re-encode or save to another format, like Matroska.
ffmpeg -i video.AVI -map 0:a -vn -acodec copy audio.mka

Multichannel AAC mp4 encoding using libav (avconv) or ffmpeg

I am trying to create a four-channel mp4 file with AAC encoding for ambisonics use. I am trying to encode a 4-channel first-order ambisonic wav file into AAC like so:
avconv -i four_channel_input.wav -c:a libfaac -ac 4 four_channel_output.mp4
This gives me the error
[libfaac # 0x7f938885a000] Specified channel_layout is not supported
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Removing the -ac 4 option gives me a 5 channel file
Duration: 00:01:21.09, start: 0.021333, bitrate: 218 kb/s
Stream #0:0(und): Audio: aac (LC) [mp4a / 0x6134706D]
48000 Hz, 5.0, fltp, 215 kb/s (default)
with a blank first channel, which is obviously suboptimal. In order to create compressed ambisonics files, should I be using a separate format like AmbiX (even though I believe this is uncompressed)?
With ffmpeg, you can run
ffmpeg -i input.wav -c:a aac -ac 4 -channel_layout 4.0 four_channel_output.mp4

ffmpeg stdout wrong timecode out

If I run this command line
ffmpeg -ss 0 -t 3600 -i file1.mp3 -ss 0 -t 20 -i file2.mp3 -filter_complex "[0][1]concat=n=2:v=0:a=1" -ac 2 -f wav - > test.wav
I'm basically putting the stout inside a container wav (test.wav) but the duration is always wrong. The output file should be 01:00:20.00 but if I play it on VLC (or any player audio) it shows 06:12:49.00 and even if I change the start_times, the durations and number of files, I still get that timecode out. The even weirder thing is that ffprobe shows the duration as it should be. Can somebody please help me on this?
UPDATE:
[wav # 0000000000cf3680] Ignoring maximum wav data size, file may be invalid
[wav # 0000000000cf3680] Estimating duration from bitrate, this may be inaccurate
Input #0, wav, from 'test.wav':
Metadata:
encoder : Lavf57.72.101
timecode : 01:00:20.00
Duration: 01:00:20.00, bitrate: 1536 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 2 channels, s16, 1536 kb/s
That is what the ffprobe on the output shows..the duration is correct here but not on any audio player

How to merge mp4 audio dash fragment with another audio

I have 1 audio file from dash stream
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file_191282-377206_header.mp4': Metadata:
major_brand : iso6
minor_version : 1
compatible_brands: mp42dashmsdhmsixiso6avc1isom
creation_time : 2016-04-29T11:04:26.000000Z Duration: 00:00:30.02, start: 14.997333, bitrate: 49 kb/s
Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 48 kb/s (default)
Also in exiftool output:
Movie Data Size : 180193
Movie Data Offset : 6388
I try to merge with another audio and save metadata info like Movie Data Size/Offset and start/duration time.
I try with ffmpeg/MP4Box commands like:
MP4Box -new -add file_191282-377206_header.mp4 -add out000.mp4
ffmpeg -i file_191282-377206_header.mp4 -i out000.mp4 -codec copy -shortest output.mp4
ffmpeg -i file_191282-377206_header.mp4 -i out000.mp4 -filter_complex amerge -ac 2 -c:a aac output.mp4
All the time information erased or changed.
So question is how to merge 2 audio files inside mp4 and not change Movie Size/Offset and start/duration time?
Try to merge the actual audio (AAC) not the media container (MP4).
So extract the AAC from each media file, then merge those audios.
Finalise by putting the merged audio back into a new MP4 output.

Resources