哔站下载合并
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | #!/bin/bash
#sh
SHPATH=`readlink -f $0`
SHDIR=`dirname $SHPATH`
cd "$SHDIR"
#file
TMP_PATH=tmp.txt
LIST_PATH=list.txt
#
find ./ -type f -name "*.mp4" |grep -v out.mp4|sed 's#^.\/##'|sort > $TMP_PATH
#
>$LIST_PATH
while read LINE
do
LINE_NEW=`echo $LINE `
echo "file '$LINE_NEW'" >> $LIST_PATH
done < $TMP_PATH
/usr/local/bin/ffmpeg -f concat -safe 0 -i $LIST_PATH -c copy -y out.mp4
|
| #查看硬件状态
nvidia-smi
#硬件加速
ffmpeg -hwaccel auto -i input.mp4 output.mp4
ffmpeg -hwaccel auto -i input.flv output.mp4
|
下载视频流
视频转码
| ffmpeg -i "$LINE" -c copy -y -bsf:v h264_mp4toannexb -f mpegts $VIDEO_OUT/$i.mp4
|
并行合并音视频,将其混合
| #音视频混合
ffmpeg -i 59.mp4 -i 59.m4a -acodec copy -vcodec copy 1111.mp4
|
(相同码率)视频串联拼接
| #视频串联
#将要合并的文件名写入到list.txt,输出名为out.mp4
ffmpeg -f concat -safe 0 -i list.txt -c copy out.mp4
#注!!!list.txt,需要加入'file''字段,范例
file /volume1/Download/2022-11-19/卡尔2022-11-19_020001.mp4
file /volume1/Download/2022-11-19/卡尔2022-11-19_224701.mp4
|
(不同码率)视频串联拼接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | #先查看需要合并视频是否是同一码率,如果不是进行统一封装
ffmpeg -i test.mp4
#需要先要要合并的视频进行统一封装:h264_mp4toannexb
ffmpeg -i head.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts head1.mp4
ffmpeg -i test.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts test1.mp4
ffmpeg -i foot.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts foot1.mp4
#flv to mp4
VIDEO_OUT='[2024-06-29 20-06-27][卡尔][【提前开播加油】重生之接单赚钱].flv'
OUT_MP4='卡尔直播回放2024-06-29_[土匪、VS怪兽、如初、啵啵、kelly、贝拉(四月)].mp4'
ffmpeg -i "$VIDEO_OUT" -c copy -bsf:v h264_mp4toannexb -f mpegts -y "$OUT_MP4"
#将视频放入list.txt
echo "head1.mp4 test1.mp4 foot.mp4" >list
#将要合并的文件名写入到list.txt,输出名为out.mp4
ffmpeg -f concat -safe 0 -i list.txt -c copy -y out.mp4
#################################################################################
|
获取分辨率
| ffmpeg -i head.mp4 2>&1|grep Video:|awk '{print $11}'
|
获取视频时长
| #获取视频信息,过滤 Duration行
$ /volume1/@appstore/ffmpeg/bin/ffmpeg -i 卡尔2022-12-08.mp4 2>&1|grep Duration
Duration: 04:34:27.92, start: 0.000000, bitrate: 2156 kb/s
#awk截取时间
$ /volume1/@appstore/ffmpeg/bin/ffmpeg -i 卡尔2022-12-08.mp4 2>&1|grep Duration|awk -F ' |,' '{print $4}'
04:34:27.92
|
分割视频:按时间戳
ffmpeg -i [源文件] -ss [起始时间] -to [结束] -c copy [输出文件]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 | #将src.mp4从00:00:00到1:00:00的视频截取出来,输出名为out.mp4
ffmpeg -i '卡尔直播回放2024-06-26_[土匪、球球VS金克斯、璃月].mp4' -ss 00:00:00 -to 00:01:00 -c copy out.mp4
##############
VIDEO_SRC='卡尔直播回放2024-02-26_[土匪、飒飒VS柯柯、叶麦].mp4'
VIDEO_OUT="$VIDEO_SRC.new.mp4"
TIME_START='00:00:00'
TIME_END='03:21:29'
ffmpeg -i $VIDEO_SRC -ss $TIME_START -to $TIME_END -c copy -y $VIDEO_OUT
cp $VIDEO_OUT /volume1/demo/biliup-rs/Downloads/kaerlol/2025年01月/
#####################mp4 to mp4
VIDEO_SRC='卡尔_2024-08-24_21-06-34.mp4'
VIDEO_OUT=new_"$VIDEO_SRC"
TIME_START='00:00:00'
TIME_END='03:52:22'
ffmpeg -i "$VIDEO_SRC" -ss $TIME_START -to $TIME_END -c copy -y "$VIDEO_OUT"
#
OUT_MP4='卡尔直播回放2024-06-29_[土匪、VS怪兽、如初、啵啵、kelly、贝拉(四月)].mp4'
ffmpeg -i "$VIDEO_OUT" -c copy -bsf:v h264_mp4toannexb -f mpegts -y "$OUT_MP4"
cp $VIDEO_OUT /volume1/demo/biliup-rs/Downloads/kaerlol/2025年01月/
###################flv to mp4
VIDEO_SRC='kaer2024-09-28T21_03_16.flv'
VIDEO_OUT=new_"$VIDEO_SRC"
TIME_START='00:00:00'
TIME_END='04:53:17'
ffmpeg -i "$VIDEO_SRC" -ss $TIME_START -to $TIME_END -c copy -y "$VIDEO_OUT"
#
TO_MP4=out.mp4
ffmpeg -i "$VIDEO_OUT" -c copy -bsf:v h264_mp4toannexb -f mpegts -y "$TO_MP4"
cp $VIDEO_OUT /volume1/demo/biliup-rs/Downloads/kaerlol/2025年01月/
|
加字幕水印
核心使用:drawtext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #每5秒显示2秒
TITLE=卡尔
FF=/volume1/homes/admin/biliup-rs/src/font/font.ttf
DATE=`date +%F`
#FILE=/volume1/homes/admin/biliup-rs/src/mp4/head.mp4
FILE=head.mp4
ffmpeg -i "$FILE" -vf "drawtext=fontsize=30:fontfile=$FF:text="$TITLE$DATE":x=20:y=20:fontcolor=green:box=0:boxcolor=yellow:enable=lt( mod(t\,5)\,2)" out.mp4
####B站水印,透明度0.3
#每30秒显示10秒
#标题
TITLE='B站<扯犊子哟>'
#字体
FF=wawa.ttf
#文件
FILE=old.mp4
ffmpeg -i "$FILE" -vf "drawtext=fontsize=60:fontfile=$FF:text="$TITLE":x=20:y=h-line_h-5:fontcolor=white:alpha=0.3:box=0:boxcolor=yellow:enable=lt( mod(t\,30)\,10)" -y out.mp4
|
获取视频截图
参数:
-t:持续时间
-f:图片格式,
-s:格式大小,如-s 640x360
-y:覆盖,直接使用
| #获取第一名的截图
ffmpeg -i out.mp4 -y -f mjpeg -t 1 out.png
|
图片加水印居中
listlist
使用cuda加速
ffmpeg -framerate 1 -loop 1 -i
不使用cuda加速
ffmpeg -framerate 1 -loop 1 -i
ffmpeg -framerate 1 -loop 1 -i
指定视频长度
1
2
3
4
5
6
7
8
9
10
11
12 | #图片
PNG_PATH=/tmp/image.png
#MP3
MP3_PATH=/tmp/music.mp3
#视频长度(单位:秒)
OUT_TIME=5
#输出
OUT_PATH=/tmp/out.mp4
#############
ffmpeg -framerate 15 -loop 1 -i $PNG_PATH -i $MP3_PATH -t $OUT_TIME -y $OUT_PATH
|
豆包ai
| ffmpeg -loop 1 -i example.jpg -i example.mp3 -c:v libx264 -preset medium -crf 23 -pix_fmt yuv420p -c:a copy -shortest -movflags +faststart video.mp4
|
"
| #
img_path=
mp3_path=
mp4_path="${mp3_path}.mp4""
ffmpeg -loop 1 -i "$img_path" -i "$mp3_path" -c:v libx264 -preset medium -crf 23 -pix_fmt yuv420p -c:a copy -shortest -movflags +faststart "$mp4_path"
|
命令解释:
-
输入参数:
-
-loop 1:让图片无限循环播放,从而使视频时长与音频时长一致。
-
-i example.jpg:指定图片输入文件。
-
-i example.mp3:指定音频输入文件。
-
视频处理:
-
-c:v libx264:使用 H.264 视频编码器,这是一种广泛兼容的编码器。
-
-preset medium:设置编码速度与压缩率的平衡,medium 是一个较为常用的预设。
-
-crf 23:设置恒定速率因子(CRF),取值范围为 0 - 51,数值越小画质越好,通常 23 是一个不错的平衡值。
-
-pix_fmt yuv420p:将视频像素格式设置为 YUV420P,以确保视频在大多数播放器上都能正常播放。
-
音频处理:
-
-c:a copy:直接复制音频流,不进行重新编码,这样可以节省处理时间并保持音频质量。
-
输出控制:
-
-shortest:让输出视频的时长与最短的输入(通常是音频)一致。
-
-movflags +faststart:优化视频文件的头部信息,使视频可以更快地开始在线播放。
跑马灯
| #注意字体文件
ffmpeg -i video.mp4 -vf "drawtext=text=周五,周五,卡秃子休息日! :expansion=normal:fontfile=foo.ttf: y=h-line_h-10:x=(mod(15*n\,w+tw)-tw): fontcolor=white: fontsize=40: shadowx=2: shadowy=2" -y output.mp4
|
图片+音乐+跑马灯=合成视频
参数解析
-framerate 每秒帧数,数字越小刷新越慢(跑马灯效果以15为优)
-loop 1 图片循环一次
-i 要读取的文件
-t 制定视频长度
-y 存在同名视频文件时直接覆盖
ffmpeg 停止
ffmpeg 视频添加背景
参数说明:
scale:缩放尺寸
overlay:位于屏幕的位置
居中:overlay=w/2:h/2
右下角:overlay=(W-w):0
注:大写W为(背景图的)背景的宽带,小写w为视频的宽带;大写H为(背景图的)背景高度,小写h为视频的高度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | #视频居中
ffmpeg -loop 1 -i 1.png -i 1.mp4 -filter_complex "[1]scale=w=800:h=450[s];[0][s]overlay=w/2:h/2" -shortest -y output.mp4
#youtube视频
ffmpeg -loop 1 -i 1.png -i 1.mp4 -filter_complex "[1]scale=w=1040:h=585[s];[0][s]overlay=(W-w)/2:h/2/2/2" -shortest -y output.mp4
#视频在右上角
ffmpeg -loop 1 -i 1.png -i 1.mp4 -filter_complex "[1]scale=w=800:h=450[s];[0][s]overlay=(W-w):0" -shortest -y output.mp4
#视频在右下角
ffmpeg -loop 1 -i 1.png -i 1.mp4 -filter_complex "[1]scale=w=800:h=450[s];[0][s]overlay=(W-w):(H-h)" -shortest -y output.mp4
|
浏览器代理
| 'Mozilla/5.0 (Linux; Android 10; SM-G981B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Mobile Safari/537.36'
|
基于FFmpeg对视频叠加图片水印
| #input.mp4是你要添加水印的视频文件,watermark.png是水印图片,overlay=10:10表示将水印放在视频的左上角,output.mp4是输出文件名
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
|
| #当图片的背景色为纯色时(如纯白色),可以使用movie与colorkey滤镜做配合做成半透明效果:
ffmpeg -i 1.mp4 -vf "movie=bili.png,colorkey=white:0.01:1.0 [wm]; [in] [wm] overlay=30:10 [out]" image1_out.mp4
|
左下角水印
| ffmpeg -i 1.mp4 -vf "movie=bili.png,lut=a=val*0.5 [wm]; [in] [wm] overlay=x=10:y=H-h-5 [out]" -y image3_out.mp4
#解析
-i 1.mp4 输入视频
-vf 方法
movie=bili.png 水印图
lut=a=val*0.5 [wm] 水印透明度
overlay=x=10:y=H-h-5 x坐标,y坐标(H为视频高度,h为水印高度,5为5像素)
|
ffmpeg提取音频
| SRC_FILE='卡尔直播回放2024-07-25_[土匪、涵涵VS小屋、乔西]【辈分局】.mp4'
OUT_WAV="$SRC_FILE.wav"
ffmpeg -i "$SRC_FILE" -ar 48000 -ac 2 -sample_fmt s16 "$OUT_WAV"
|
ffmpeg添加字幕水印,控制显示时间戳
视频添加字幕水印,蓝色高亮
时间戳有enable='between(t,10,20),控制在10显示,第20秒消失
| ffmpeg -i input.mp4 -vf "drawtext=fontfile=wawa.ttf: text='Your Text Here': fontcolor=white: fontsize=36: x=(w-text_w)/2+1: y=(h-text_h)/2+1: enable='between(t,10,20)', drawtext=fontfile=wawa.ttf: text='Your Text Here': fontcolor=blue: fontsize=36: x=(w-text_w)/2: y=(h-text_h)/2: enable='between(t,10,20)'" -c:a copy -y output.mp4
|