ffmpeg: Generate empty audio and video (working for video) - audio

I'm trying to generate a black video with FFMPEG. I have accomplished this with the following:
ffmpeg -t 5 -f lavfi -i color=c=black:s=1920x1080 -c:v libx264 -tune stillimage -pix_fmt yuv420p out.mp4
Unfortunately this video doesn't have any audio tracks. Following this, I have tried to insert -i anullsrc=channel_layout=stereo:sample_rate=44100:
ffmpeg -t 5 -i anullsrc=channel_layout=stereo:sample_rate=44100 -f lavfi -i color=c=black:s=1920x1080 -c:v libx264 -tune stillimage -pix_fmt yuv420p out.mp4
Unfortunately this gives the error:
anullsrc=channel_layout=stereo:sample_rate=44100: No such file or
directory
How can I modify my initial script to generate a video with empty audio?

anullsrc is also a source filter so it too needs -f lavfi before it.
ffmpeg -f lavfi -t 5 -i color=c=black:s=1920x1080 -f lavfi -t 5 -i anullsrc=channel_layout=stereo:sample_rate=44100 -c:v libx264 -tune stillimage -pix_fmt yuv420p out.mp4

Related

ffmpeg output to multiple rtmp simultaneously

i have this situation:
i need stream to 3 different rtmp
1 rtmp is normal all the audio and video
2 rtmp is the video but different audio
3 rtmp is only audio of first video
this my elaboration...
ffmpeg -re -i /usr/VIDEO/my_video.mp4 -i /usr/VIDEO/x_audio.mp3 \
-map 0:v -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -map 0:a -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/live/pass \
-map 0:v -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -map 1:a -streamloop -shortest -f flv rtmp://my_ip/noaudio/pass \
-map 0:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/only_audio/pass
i was thinking was ok, but is not.
Where I have misstake
ok find solution
ffmpeg -re -i /usr/VIDEO/my_video.mp4 -re -i /usr/VIDEO/xaudio.mp3 \
-map 0 -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/live/pass \
-map 0:v -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -map 1:a -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/noaudio/pass \
-map 0:a -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/onlyaudio/pass
and like that gonna work
for looping the audio add -stream_loop (--NUMBER--) before the audio where (--NUMBER--) sis the times that should repeat
once -stream_loop 1
twice 1nce -stream_loop 2
3 times 1nce -stream_loop 3
... and so on
ffmpeg -re -i /usr/VIDEO/my_video.mp4 -stream_loop (--NUMBER--) -re -i /usr/VIDEO/xaudio.mp3 \
-map 0 -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/live/pass \
-map 0:v -c:v libx264 -vf format=yuv420p -b:v 2000k -bufsize 3000k -maxrate 2000k -s 1024X576 -g 60 -map 1:a -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/noaudio/pass \
-map 0:a -c:a aac -b:a 192k -ar 44100 -f flv rtmp://my_ip/onlyaudio/pass
Use the tee muxer. It's more complicated but more efficient: you can encode streams once and re-use them for multiple outputs.
ffmpeg -re -i video.mp4 -re -i audio.mp3 -map 0 -map 1:a -c:v libx264 -c:a aac -vf "scale=1024:-2,format=yuv420p" -b:v 2000k -bufsize 3000k -maxrate 2000k -g 60 -b:a 192k -ar 44100 -shortest -f tee "[select=\'v:0,a:0\':f=flv]rtmp://my_ip/normal|[select=\'v:0,a:1\':f=flv]rtmp://my_ip/altaudio|[select=\'a:0\':f=flv:onfail=ignore]rtmp://my_ip/onlyaudio"

FFMPEG: How to add two more audio streams?

This is my already working stream:
ffmpeg -f lavfi -i anullsrc -rtsp_transport tcp -i rtsp://stream1video -i rtsp://stream2audio -c:v copy -map 1:v -map 2:a -preset veryfast -pix_fmt + -c:a aac -f flv rtmp://a.rtmp.youtube.com/....
Now I would like to add two more audio files in the background in a loop.
something like this:
-i /1.aac -i /2.aac
So it should be something like:
ffmpeg -f lavfi -i anullsrc -rtsp_transport tcp -i rtsp://stream1video -i rtsp://stream2audio -stream_loop 1 -i /1.aac -stream_loop 1 -i 2.aac -c:v copy -map 1:v -map 2:a -map 3:a -map 4:a -preset veryfast -pix_fmt + -c:a aac -f flv rtmp://a.rtmp.youtube.com/....
But unfortunately, it doesn't work.
Any tips?
Assuming you want to downmix all three audio streams into one add the amix filter:
ffmpeg -rtsp_transport tcp -i rtsp://stream1video -i rtsp://stream2audio -re -stream_loop -1 -i 1.aac -re -stream_loop -1 -i 2.aac -filter_complex "[1:a][2:a][3:a]amix=inputs=3[a]" -map 0:v -map "[a]" -c:a aac -f flv rtmp://a.rtmp.youtube.com/

Ffmpeg script cuts out sound

I have this ffmpeg script I'm running to automatically convert videos to instagram's accepted coded
The script looks like this:
ffmpeg -analyzeduration 20M -probesize 20M -y -re -f lavfi -i "movie=filename='file.mp4':loop=5, setpts=N/(FRAME_RATE*TB)" -vcodec libx264 -b:v 3500k -vsync 2 -t 59 -acodec aac -b:a 128k -pix_fmt yuv420p -vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:white" -crf 24 new_file.mp4
However that seems to cut out the audio, and I can't seem to find out how to prevent that? I didn't use any -an or anything, and when messing around the audio keeps being cut out? Any idea why?
The movie filter, by default, only reads one video stream from the input.
For looping, stream_loop is available without having to use filters.
ffmpeg -analyseduration 20M -probesize 20M -y -re -stream_loop 5 -i "file.mp4" -vcodec libx264 -b:v 3500k -vsync cfr -t 59 -acodec aac -b:a 128k -pix_fmt yuv420p -vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:white" -crf 24 new_file.mp4

FFmpeg (merge two audio)

I have two long audio files. I want to merge cut some part from each video
and merge both parts in one file.
In below command the problem there is no audio in the second audio part. It contain the first part and the second is empty.
What is the problem?
ffmpeg -f lavfi -i color=c=black
-ss 157.824 -t 99.818
-i "file1.mp4"
-ss 315.764 -t 50.308
-i "file2.mp4"
-s 854x480
-aspect 1.779167
-r 25
-c:v libx264
-b:v 800k
-c:a aac
-strict experimental
-b:a 128k
-f mp4
-t 150.126 -async 1
-y "output.mp4"

Creating Video and Streaming Command Line

Currently, using ffmpeg, I am using two commands on my Terminal to:
1) create a video from a bunch of images:
ffmpeg -r 60 -f image2 -s 1920x1080 -i rotated-pano_frame%05d_color_corrected_gradblend.jpg -vcodec libx264 -crf 25 -pix_fmt yuv420p test.mp4
2) stream the video to a udp address:
ffmpeg -re -i test.mp4 -c copy -f flv udp://127.0.0.1:48550
I am trying to combine both these instructions into one command line instruction, using &&, as suggested in the answer to a previous question of mine:
ffmpeg -r 60 -f image2 -s 1920x1080 -i rotated-pano_frame%05d_color_corrected_gradblend.jpg -vcodec libx264 -crf 25 -pix_fmt yuv420p test.mp4 \
&& ffmpeg -re -i test.mp4 -c copy -f flv udp://127.0.0.1:48550
but am encountering an error which prevents streaming:
[flv # 0x7fa2ba800000] video stream discovered after head already parsed.
Thoughts on a different command line syntax to join the two instructions, different ffmpeg instruction (filters perhaps?), and why I am getting the error?

Resources