gpt4 book ai didi

ffmpeg - 需要帮助解决我的 ffmpeg 命令行

转载 作者:行者123 更新时间:2023-12-04 23:33:45 25 4
gpt4 key购买 nike

我创建了一个小 bash 脚本来编码 1080p 视频,视频将在左下角添加水印,我需要在顶部和底部添加黑色填充

我尝试了几种方法但仍然没有运气,我尝试了 -vf 并且是的它有效但不能同时使用填充和水印,并建议使用 filter_complex

如果我在没有 bash 脚本的情况下直接使用此代码,它就可以工作

time ffmpeg -hide_banner -i transformers.mp4 -i transformers.ass -loop 1 -i watermark.png -loop 1 -i logo.png -map 0:0 -map 0:1 -filter_complex "[0:0]scale=(iw*sar)*min(1920/(iw*sar)\,800/ih):ih*min(1920/(iw*sar)\,800/ih), pad=1920:800:(1920-iw*min(1920/iw\,800/ih))/2:(800-ih*min(1920/iw\,800/ih))/2;ass=transformers.ass[FID1];[FID1][2:v]overlay=10:${WATERMARKPOSITION}:repeatlast=0:enable='between(t,300,600)'[FID3];[3:v]fade=in:st=1200:d=1.6:alpha=1,fade=out:st=107998:d=1.6:alpha=1[FID6];[FID3][FID6]overlay=10:5:repeatlast=0:enable='between(t,1200,187922)'" -c:v libx264 -minrate 1800k -maxrate 1800k -bufsize 3600k -profile:v high -c:a aac -b:a 128k -profile:a aac_main -movflags faststart -strict -2 -f mp4 -y "transformers.mp4"

但是当我将它包含在我的 bash 脚本中时,我得到了这个错误,
[libx264 @ 0x2a063e0] height not divisible by 2 (300x39)
Output #0, mp4, to '/movie/Paddy/output/Transformers.Age.of.Extinction.2014.1080p.BluRay.H264.AAC-RARBG.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
comment : Transformers.Age.of.Extinction.2014.1080p.BluRay.H264.AAC-RARBG
encoder : Lavf57.71.100
title : Transformers Age of Extinction 2014 1080p BluRay H264 AAC-RARBG - Visit us @ Juraganfilm.COM
Stream #0:0: Video: h264 (libx264), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], q=-1--1, max. 2300 kb/s, 23.98 fps, 23.98 tbn, 23.98 tbc
Metadata:
encoder : Lavc56.60.100 libx264
Stream #0:1: Video: h264, none, q=2-31, 128 kb/s, SAR 1:1 DAR 0:0, 25 fps
Metadata:
encoder : Lavc56.60.100 libx264
Stream #0:2(eng): Audio: aac, 0 channels, 128 kb/s (default)
Metadata:
creation_time : 2017-12-19 07:58:39
handler_name : SoundHandler
encoder : Lavc56.60.100 aac
Stream mapping:
Stream #0:0 (h264) -> scale (graph 0)
Stream #0:0 (h264) -> overlay:overlay (graph 0)
Stream #2:0 (png) -> ass (graph 0)
Stream #3:0 (png) -> fade (graph 0)
pad (graph 0) -> Stream #0:0 (libx264)
overlay (graph 0) -> Stream #0:1 (libx264)
Stream #0:1 -> #0:2 (aac (native) -> aac (native))
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height

下面是我一直在处理的脚本
output="/movie/output"

FILESDIR=`find $PWD -type f -regex ".*\.\(mp4\|mkv\|avi\)" | sed 's@.*/@@' | sort -n`
for video in $FILESDIR
do

MOVIETITLE=${video%.*}
INFOVID=${MOVIETITLE//./ }
BITRATE="${HEIGHT}"
WIDTH=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 ${video} 2>&1 | sed -e 's|\[.*||g' | sed ':a;N;$!ba;s/\n//g' | sed -e 's|x.*||g')
HEIGHT=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 ${video} | sed -e 's/.*x//')
WATERMARKPOSITION=$(expr $HEIGHT - 50)
VIDEOMAP=$(ffmpeg -i $video 2>&1 | grep "Stream #" | grep Video | sed -e "s|.*\#||g" | sed -e "s|: Video.*||g" | sed -e "s|(.*||g")
AUDIOMAP=$(ffmpeg -i $video 2>&1 | grep "Stream #" | grep Audio | sed -e "s|.*\#||g" | sed -e "s|: Audio.*||g" | sed -e "s|(.*||g")
MAXRATE=$(expr $BITRATE + 500)
BUFFSIZE=$(expr $MAXRATE \* 2)

time ffmpeg -hide_banner -i $video -i $MOVIETITLE.ass -loop 1 -i $WATERMARK -loop 1 -i $LOGO -map ${VIDEOMAP} -map ${AUDIOMAP} -filter_complex "[${VIDEOMAP}]scale=(iw*sar)*min(${WIDTH}/(iw*sar)\,${HEIGHT}/ih):ih*min(${WIDTH}/(iw*sar)\,${HEIGHT}/ih), pad=${WIDTH}:${HEIGHT}:(${WIDTH}-iw*min(${WIDTH}/iw\,${HEIGHT}/ih))/2:(${HEIGHT}-ih*min(${WIDTH}/iw\,${HEIGHT}/ih))/2;ass=$MOVIETITLE.ass[FID1];[FID1][2:v]overlay=10:${WATERMARKPOSITION}:repeatlast=0:enable='between(t,300,600)'[FID3];[3:v]fade=in:st=1200:d=1.6:alpha=1,fade=out:st=107998:d=1.6:alpha=1[FID6];[FID3][FID6]overlay=10:5:repeatlast=0:enable='between(t,1200,187922)'" -c:v libx264 -minrate ${BITRATE}k -maxrate ${MAXRATE}k -bufsize ${BUFFSIZE}k -profile:v high -c:a aac -b:a 128k -profile:a aac_main -movflags faststart -strict -2 -f mp4 -y "${output}/$MOVIETITLE.mp4"
done

已经工作了一整天,但我仍然无法正常工作。

有人可以指导我哪一部分是错的吗?

最佳答案

1)删除映射。未标记的 filter_complex 输出被自动映射,所以 -map 0:0将映射未处理的视频流。没有任何 map 。一个音频流将是 picked up ,在您的输入中只有一个。

2)在你的垫之后,有一个分号,这使它成为一个未标记的 filter_complex 输出,直接发送到输出

pad (graph 0) -> Stream #0:0 (libx264)

因此, ass 过滤器没有输入,最终使用 watermark.png。覆盖和其他过滤器应用于此流。并且它的大小不能被 2 整除。
overlay (graph 0) -> Stream #0:1 (libx264)

分号应该是逗号。

3)ass过滤器是直接读取字幕文件。它不需要作为常规输入提供。
time ffmpeg -hide_banner -i transformers.mp4 -loop 1 -i watermark.png -loop 1 -i logo.png -filter_complex "[0:0]scale=(iw*sar)*min(1920/(iw*sar)\,800/ih):ih*min(1920/(iw*sar)\,800/ih), pad=1920:800:(1920-iw*min(1920/iw\,800/ih))/2:(800-ih*min(1920/iw\,800/ih))/2, ass=transformers.ass[FID1];[FID1][2:v]overlay=10:${WATERMARKPOSITION}:repeatlast=0:enable='between(t,300,600)'[FID3];[3:v]fade=in:st=1200:d=1.6:alpha=1,fade=out:st=107998:d=1.6:alpha=1[FID6];[FID3][FID6]overlay=10:5:repeatlast=0:enable='between(t,1200,187922)'" -c:v libx264 -minrate 1800k -maxrate 1800k -bufsize 3600k -profile:v high -c:a aac -b:a 128k -profile:a aac_main -movflags faststart -strict -2 -f mp4 -y "transformers.mp4"
此外,您的淡出和最后叠加的数字看起来不正确。 st=107998代表 107888 即 30 小时 . between(t,1200,187922) 也是如此

关于ffmpeg - 需要帮助解决我的 ffmpeg 命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55491642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com