Why i get permission denied at docker ffmpeg execution - docker

i want to make small gifs (miniclip) from a mp4 video using ffmpeg with php script in aws ecs.
The whole configuration is working with the symfony built-in server. Now i put the controller into local docker and now i get the following permission denied error:
ffmpeg version 5.0.1 Copyright (c) 2000-2022 the FFmpeg developers built with gcc 11.2.1
(Alpine 11.2.1_git20220219) 20220219 configuration: --prefix=/usr --enable-avfilter --
enable-gnutls --enable-gpl --enable-libass --enable-libmp3lame --enable-libpulse --
enable-libvorbis --enable-libvpx --enable-libxvid --enable-libx264 --enable-libx265 --
enable-libtheora --enable-libv4l2 --enable-libdav1d --enable-lto --enable-postproc --
enable-pic --enable-pthreads --enable-shared --enable-libxcb --enable-librist --enable-
libsrt --enable-libssh --enable-libvidstab --disable-stripping --disable-static --
disable-librtmp --enable-libaom --enable-libopus --enable-libsoxr --enable-libwebp --
enable-vaapi --enable-vdpau --enable-vulkan --enable-libdrm --disable-debug
libavutil 57. 17.100 / 57. 17.100
libavcodec 59. 18.100 / 59. 18.100
libavformat 59. 16.100 / 59. 16.100
libavdevice 59. 4.100 / 59. 4.100
libavfilter 8. 24.100 / 8. 24.100
libswscale 6. 4.100 / 6. 4.100
libswresample 4. 3.100 / 4. 3.100
libpostproc 56. 3.100 / 56. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2,
from 'https://vendery-streaming.fra1.cdn.digitaloceanspaces.com/myvideo.mp4': Metadata: major_brand : isom minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.24.101 Duration: 00:18:10.37, start: 0.000000,
bitrate: 3405 kb/s Stream #0:0[0x1](und):
Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 540x960, 3331 kb/s, 30
fps, 30 tbr, 15360 tbn (default) Metadata: handler_name : VideoHandler vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono,
fltp, 69 kb/s (default)
Metadata: handler_name :
SoundHandler vendor_id : [0][0][0][0] /var/www/html/public/myimage.gif: Permission denied
What exactly tells me the error? The folder /var/www/html/public/ exists but isnt writable?
The command from php i run the script is:
$output = shell_exec('/usr/bin/ffmpeg -y -ss 255 -t 4 -i '.$url.' -vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 /var/www/html/public/'.$outputFile.' 2>&1');
echo $output;
any idea is welcome.
the user is wrong. shell_exec('whoami'); gives me www-data, but why?? My dockerfile have the following in: RUN chown -R root:root /var/www/html/public
docker-compose.yaml
symfony:
mem_limit: 500M
mem_reservation: 500M
container_name: '${APP_NAME}-${APP_ENV}-backend'
#environment:
#- DATABASE_URL="mysql://${MYSQL_USER}:${MYSQL_PASS}#database/${MYSQL_DB}?serverVersion=mariadb-10.8.3"
build:
context: .
target: symfony
#restart: unless-stopped
ports:
- 8000:8000 #browser / container

Related

FFMpeg - PhantomJS to Youtube Live

I'm trying to stream a webpage captured with PhantomJS to Youtube using FMMpeg.
This is the command I use:
xvfb-run phantomjs --web-security=no render.js | ffmpeg -threads 0 -y -v verbose -c:v png -r 30 -f image2pipe -i - -f lavfi -i anullsrc -strict -2 -acodec aac -ac 1 -ar 44100 -b:a 128k -c:v libx264 -s 1280x720 -pix_fmt yuv420p -f flv "rtmp://a.rtmp.youtube.com/live2/key";
And the render.js code:
http://pastebin.com/raw/X9gv8iGH
It looks like it's streaming, but no feed is received by YouTube, and I can't see where the problem is.
Outpout from my console
Try this:
phantomjs --web-security=no render.js | ffmpeg -threads 0 -y -v verbose -c:v png -framerate 33 -f image2pipe -i - -f lavfi -i anullsrc -strict -2 -acodec aac -ac 1 -ar 44100 -b:a 128k -c:v libx264 -s 1280x720 -pix_fmt yuv420p -g 60 -r 30 -f flv "rtmp://a.rtmp.youtube.com/live2/key";
Parameter -framerate:
You can specify two frame rates: input and output.
Set input frame rate with the -framerate input option (before -i). The default for reading inputs is -framerate 25 which will be set if
no -framerate is specified.
The output frame rate for the video stream by setting -r after -i or by using the fps filter.
So in your case framerate should be 1/period_from_phantomjs which is 1000/30 = 33.33
As for the -g 60, that will add a key frame every 2 seconds, which is probably a requirement for the youtube streaming api (I know that for facebook it is).

How to Live Stream YouTube without Audio [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 6 years ago.
Improve this question
I have two IP cam and a computer with ffmpeg to re-stream them to YouTube.
First Cam
It has Video and Audio. I can re-stream to YouTube successfully with this command.
ffmpeg -re -rtsp_transport tcp -i rtsp://192.168.aaa.bbb:554/ch0_1.h264 -acodec libmp3lame -ar 44100 -b:a 128k -pix_fmt yuv420p -profile:v baseline -s 426x240 -bufsize 2048k -vb 400k -maxrate 800k -deinterlace -vcodec libx264 -preset medium -g 30 -r 30 -f flv rtmp://a.rtmp.youtube.com/live2/<YouTube_key>
Second Cam
It has Video only. However, with both commands below, I can't stream to YouTube. (although the ffmpeg process is running well)
ffmpeg -re -rtsp_transport tcp -i rtsp://192.168.aaa.ccc/Streaming/Channels/102 -an -pix_fmt yuv420p -profile:v baseline -s 426x240 -bufsize 2048k -vb 400k -maxrate 800k -deinterlace -vcodec libx264 -preset medium -g 30 -r 30 -f flv rtmp://a.rtmp.youtube.com/live2/<YouTube_key>
or
ffmpeg -re -rtsp_transport tcp -i rtsp://192.168.aaa.ccc/Streaming/Channels/102 -acodec libmp3lame -ar 44100 -b:a 128k -pix_fmt yuv420p -profile:v baseline -s 426x240 -bufsize 2048k -vb 400k -maxrate 800k -deinterlace -vcodec libx264 -preset medium -g 30 -r 30 -f flv rtmp://a.rtmp.youtube.com/live2/<YouTube_key>
I've test both camera's stream first using FLV, and they work well. So, the issue is not the URL of IP camera.
From what I understand, YouTube define stream as audio-video content. However, what if the source only has Video.
So, my question:
How to live stream YouTube without audio, specially from an IP cam?
Thanks
Generate a dummy audio and try
ffmpeg -re -rtsp_transport tcp -i rtsp://192.168.aaa.ccc/Streaming/Channels/102
-f lavfi -i anullsrc
-pix_fmt yuv420p -profile:v baseline -s 426x240 -bufsize 2048k -vb 400k -maxrate 800k
-deinterlace -vcodec libx264 -preset medium -g 30 -r 30
-acodec libmp3lame -ar 44100 -b:a 128k
-f flv rtmp://a.rtmp.youtube.com/live2/<YouTube_key>

Anybody know what this avconv line does?

avconv -y -i input.avi -b 915k -an -f mp4 -ar 44100 -f s16le -ac 2 -i /dev/zero -acodec libfaac -ab 128k -strict experimental -shortest -vcodec libx264 output.mp4 -loglevel fatal
First of all, this seems to be an old version of avconv, since the command line has changed since then (but not too much).
So, let's break it down:
-y
This answers 'yes' to questions like "do you want to overwrite the output file".
-i input.avi
This gives the program the file input.avi as an input
-b 915k
This asks to change the bitrate to 915 Kibibytes per second
-an
This removes all the audio from the output.
-f mp4
Sets up MP4 as the format of the output file
-ar 44100
This sets audio sampling rate of the following input file.
-f s16le
This sets the format of the audio of the following input file.
-ac 2
This sets number of channels of audio to two.
-i /dev/zero
This adds another input file that consists entirely of zero input
-acodec libfaac
This reencodes the audio (silence most likely) with libfaac
-ab 128k
Setting the audio bitrate to 128 Kbps
-strict experimental
Allows avconv to use nonstandard approaches while encoding.
-shortest
Ends encoding when the shortest of the inputs has ended. This is needed because /dev/zero will never end.
-vcodec libx264
This sets the library to do the video encoding. The codec will be (unfortunately) h264
output.mp4
This is the name of the output file
-loglevel fatal
Fatal messages will be written as the log, and that's it.
In the future you may find man avconv to be your friend.

ffmpeg stream file to crtmp - How to change the resolution?

I'm using ffmpeg - streaming local file to crtmpserver (or other server):
ffmpeg.exe -re -i file.avi -vcodec libx264 -preset veryfast -acodec aac -strict experimental -f flv rtmp://256.257.0.0:1935/flvplayback/live
How to change the resolution? File has a resolution 1920x1080, but I want to send only 640x360.
-s 640x360 does not work.
Use -vf scale=640:360.
ffmpeg.exe -re -i file.avi -vf scale=640:360 -vcodec libx264 -preset veryfast -acodec aac -strict experimental -f flv rtmp://256.257.0.0:1935/flvplayback/live

Http Live Streaming Delay on iPhone

With this code I see the stream of my desktop in a iPhone:
vlc -I dummy screen:// vlc://quit --sout='#transcode{threads=300,width=554,height=367,fps=30,vcodec=h264,vb=500000,venc=x264{aud,profile=baseline,level=30,keyint=30,bframes=0,ref=1}}:duplicate{dst=std{access=livehttp{seglen=10,delsegs=true,numsegs=100,index=/var/www/streaming/mystream.m3u8,index-url=http://localhost/streaming/mystream-########.ts},mux=ts{use-key-frames},dst=/var/www/streaming/mystream-########.ts}};
but I have a big delay, like 30-40 second... Do you know how to reduce this delay?
All I want is:
• Stream clearly the desktop for a 600x400 window in a iPhone
• No audio
• MAX delay of 1-2 second
Do you know how to do a stream?
The Best stream I get is from ffmpeg, but there is always 7-8 seconds of delay.
This is the string:
ffmpeg -f x11grab -s `xdpyinfo | grep 'dimensions:'|awk '{print $2}'` -r 25 -i :0.0 -pix_fmt yuv420p -vcodec libx264 -acodec libfaac -r 25 -profile:v baseline -b:v 1500k -x264opts keyint=25 -s 640x360 -map 0 -flags -global_header -f segment -segment_list index_1500.m3u8 -segment_time 1 -segment_format mpeg_ts -segment_list_type m3u8 -segment_list_flags +live -segment_list_size 1 segment%05d.ts

Resources