FFMPEG watermark with filter - ffmpeg

I am trying to use a watermark and apply Yadif using complex filter, but I cannot figure out how to apply Yadif with the following syntax
ffmpeg -i "source:" -i C:\logo.png -c:v libx264 -preset veryfast -s 1920x1080 -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 11835k -crf 18 -acodec mp3 -ab 128k -filter_complex [0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] -map [out] -f mpegts "dest"
Can anyone point me in the right direction?
Thanks

As indicated at the support forum, use
ffmpeg -i "source:" -i C:\logo.png \
-filter_complex "[0:v]yadif,scale=hd1080,setsar=1[b]; \
[b][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10" \
-c:v libx264 -preset veryfast -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 11835k \
-c:a mp3 -b:a 128k -f mpegts "dest"

Related

Is it possible to add stroke to text in ffmpeg

I would like to add black stroke to text in ffmpeg. Is it possible?
ffmpeg -y -i video.mp4 -vf drawtext="fontfile=arialuni.ttf:textfile=z1.txt : x=0/2:y=h-t*13:fontcolor=white:fontsize=35:shadowcolor=black:shadowx=10:shadowy=10" -shortest -vcodec libx264 -pix_fmt yuv420p -r 25 -g 160 -b:v 4000k -profile:v main -level 3.1 -acodec libmp3lame -b:a 128k -ar 44100 -preset superfast output1.mp4
Yes - set the borderw option in your drawtext filter to set the width of the stroke you want.
bordercolor can be used to set the colour, but defaults to black so you don't need to set it for your use case.
For example, the command in the OP could become:
ffmpeg -y -i video.mp4 -vf drawtext="fontfile=arialuni.ttf:textfile=z1.txt : x=0/2:y=h-t*13:fontcolor=white:fontsize=35:shadowcolor=black:shadowx=10:shadowy=10:bordercolor=black:borderw=3" -shortest -vcodec libx264 -pix_fmt yuv420p -r 25 -g 160 -b:v 4000k -profile:v main -level 3.1 -acodec libmp3lame -b:a 128k -ar 44100 -preset superfast output1.mp4
See https://ffmpeg.org/ffmpeg-filters.html#drawtext-1 for documentation.

Using ffmpeg merge two videos with xfade transition, but failed

ffmpeg -hide_banner -i 1.mp4 -i 2.mp4 -filter_complex_script "[0:a]atrim=0:0[a0];[0:v]split[v000][v010];[1:a]atrim=0:[a1];[1:v]split[v100][v110];[v000]trim=0:0[v001];[v010]trim=0:[v011t];[v011t]setpts=PTS-STARTPTS[v011];[v100]trim=0:0[v101];[v110]trim=0:[v111t];[v111t]setpts=PTS-STARTPTS[v111];[v011][v101]xfade=duration=1:transition=smoothleft[vt0];[v001][vt0][v111]concat=n=3[outv];[a0][a1]concat=n=2:v=0:a=1[outa]" -map [outv] -map [outa] -look_ahead 0 -ac 2 -c:v libx264 -c:a aac -profile:v high -preset:v veryfast -keyint_min 72 -g 72 -sc_threshold 0 -b:v 3000k -minrate 3000k -maxrate 6000k -bufsize 6000k -b:a 128k -avoid_negative_ts make_zero -fflags +genpts -y ffmpeg-xfade-concat.mp4
You should be getting an error:
Failed to set value for option 'filter_complex_script'
-filter_complex_script accepts a text file. The text file contains the filtergraph. But your filtergraph is in the command itself.
Either move the filtergraph into a text file and use -filter_complex_script filters.txt, or change -filter_complex_script to -filter_complex.

Burning subtitles different resolutions

I'm trying to create a live stream with three quality profiles with different resolutions (SD, HD and FullHD). The live stream has subtitles, and I have to burn them for compatibility reasons.
I know how to do it with one profile, but with many no idea.
ffmpeg -nostdin -loglevel error -hwaccel cuvid -deint 2 -drop_second_field 1 -surfaces 15 -c:v h264_cuvid -resize 1280x720 -y -i udp://xxx.xxx.xxx.xxx:xxxxx?pkt_size=1316\&buffer_size=409600\&fifo_size=1000000\&overrun_nonfatal=1 -filter_complex [i:0x2c6]hwdownload,format=nv12[base];[i:0x993]setpts=(2.5)/TB+PTS[subs];[subs]scale=1280:720[subtitle];[base][subtitle]overlay[v];[v]hwupload_cuda[v] -map [v] -c:v hevc_nvenc -preset llhq -rc vbr_hq -cq 23 -qp 23 -tier high -profile:v main10 -level 4.0 -b:v 2000k -maxrate 2400k -bufsize 1000k -map i:0x2bd -c:a libfdk_aac -ac 2 -b:a 64k -map i:0x2be -c:a libfdk_aac -ac 2 -b:a 64k -metadata:s:a:0 language=eng -metadata:s:a:1 language=spa -f mpegts -mpegts_flags resend_headers+pat_pmt_at_frames -mpegts_copyts 1 -pcr_period 40 udp://yyy.yyy.yyy.yyy:yyyy?ttl=31\?pkt_size=1316\&buffer_size=409600\&fifo_size=1000000\&overrun_nonfatal=1
Apparenlty, Iffmpeg doen't allow to use -vf filter with filter_complex.
I'm using ffmpeg 3.4, cuda 8.
Use
ffmpeg -nostdin -loglevel error -hwaccel cuvid -deint 2 -drop_second_field 1 -surfaces 15
-c:v h264_cuvid -y -i udp://xxx.xxx.xxx.xxx:xxxxx?pkt_size=1316\&buffer_size=409600\&fifo_size=1000000\&overrun_nonfatal=1
-filter_complex "[i:0x2c6]hwdownload,format=nv12,split=3[fhd][hd][sd];
[i:0x993]setpts=(2.5)/TB+PTS,split=3[subfhd][subhd][subsd];
[fhd]scale=1920:1080[fhd];
[hd]scale=1280:720[hd];
[sd]scale=960:540[sd];
[subfhd]scale=1920:1080[subfhd];
[subhd]scale=1280:720[subhd];
[subsd]scale=960:540[subsd];
[fhd][subfhd]overlay,hwupload_cuda[v-fhd];
[hd][subhd]overlay,hwupload_cuda[v-hd];
[sd][subsd]overlay,hwupload_cuda[v-sd]"
-map [v-fhd] -map [v-hd] -map [v-sd] -c:v hevc_nvenc -preset llhq -rc vbr_hq -cq 23 -qp 23 -tier high
-profile:v main10 -level 4.0 -b:v 2000k -maxrate 2400k -bufsize 1000k
-map i:0x2bd -map i:0x2be -c:a libfdk_aac -ac 2 -b:a 64k
-metadata:s:a:0 language=eng -metadata:s:a:1 language=spa
-f mpegts -mpegts_flags resend_headers+pat_pmt_at_frames -mpegts_copyts 1
-pcr_period 40 udp://yyy.yyy.yyy.yyy:yyyy?ttl=31\?pkt_size=1316\&buffer_size=409600\&fifo_size=1000000\&overrun_nonfatal=1
You'll have to adjust the video bitrates and buffer sizes as required, but this is the basic command template.

How can I apply yadif filter to my command using -vf in ffmpeg

ffmpeg -i "udp://localhost:2117" -vf "movie= logo3.png [logo];[in]
[logo]overlay= 30:70 [out]" -c:a aac -ac 1 -strict -2 -c:v libx264 -maxrate
1500k -bufsize 1500k -g 40 -r 23 -preset veryfast -threads 1 -f flv
rtmp://localhost/live/OTA2
I'am using this command above for my streaming transcoding , I want apply yadif filter in side -vf " " but i am getting error , so maybe i don't know the syntax
so someone help me how to apply yadif filter to the current command
Better to use a filter_complex in this case.
ffmpeg -i "udp://localhost:2117"
-filter_complex "[0]yadif[main];movie=logo3.png[logo];[main][logo]overlay=30:70"
-c:v libx264 -maxrate 1500k -bufsize 1500k -g 40 -r 23 -preset veryfast -threads 1
-c:a aac -ac 1 -strict -2
-f flv rtmp://localhost/live/OTA2

ffmpeg keyframerate can't setup

I need setting keyframe for youtube but not working. Is on linux Debian.
ffmpeg -i "test.flv" -vcodec libx264 -x264-params keyint=120:no-scenecut -sameq -pix_fmt yuv420p -re -ar 44100 -b:a 128k -bufsize 2048k -vb 400k -maxrate 800k -deinterlace -acodec libmp3lame -preset medium -g 30 -r 30 -f flv "rtmp://a.rtmp.youtube.com/live2/"
I have error Unrecognized option 'x264-params'

Resources