FFMPEG:不同視訊來源解析度的影片上的影像填充計算

FFMPEG:不同視訊來源解析度的影片上的影像填充計算

我有一些不同解析度的影片(1920x1080、1280x720、1280,544、640x480 等)

我需要的:

  1. 將影片從 2 秒縮短至 15 秒 (+)
  2. 將解析度變更為寬度等於 source_video_height 且高度等於 (source_video_height*1.7777777777777778) (+)
  3. 在影片中加入一些不同的文字 (+)
  4. 將黑色填充更改為圖片或為該視頻創建圖片(源圖片為 1800x1200)背景(目前圖片覆蓋視頻,不正確)(-)
  5. 創建寬度和高度填充,如第 2 點所示,我嘗試過,但不明白為什麼不能在那裡使用 ih 和 iw (-)
ffmpeg -loop 1 -i bg.jpeg -i video.mp4 -ss 00:00:02.000 -to 00:00:14.999 -vf "[in]scale=ih:(ih*1.777777777777778):force_original_aspect_ratio=decrease,pad=width=720:height=1280:x=(720-iw)/2:y=(1280-ih)/2:color=black,drawtext=fontfile=./DejaVuSerif.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/5:text='Text_1':enable='between(t,5,8)',drawtext=fontfile=./DejaVuSerif.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/5:text='Text_2':enable='between(t,8,10)',drawtext=fontfile=./DejaVuSerif.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/5:text='Text_3':enable='between(t,10,12)'[out]" -c:a copy output_0_$RANDOM.mp4

答案1

你不需要pad。第一步用背景做一些事情,然後覆蓋影片。

#!/bin/bash
ffmpeg -loop 1 -i in1.png \
-i "input 1.mp4" \
-ss 00:00:02.000 -to 00:00:14.999 -filter_complex "
[1:v]scale=ih:-2[1v];
[0:v][1v]overlay=(W-w)/2:(H-h)/2:shortest=1,
drawtext=fontfile=./DejaVuSerif.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/5:text='Text_1':enable='between(t,5,8)',
drawtext=fontfile=./DejaVuSerif.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/5:text='Text_2':enable='between(t,8,10)',
drawtext=fontfile=./DejaVuSerif.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/5:text='Text_3':enable='between(t,10,12)'
[v]
" -map [v] -map 1:a -c:v h264_nvenc -cq 20 -c:a copy /tmp/output.mp4 -hide_banner -y
mpv /tmp/output.mp4

相關內容