使用 FFmpeg 2pass 简单改小视频分辨率,降低音视频码率,以用于移动设备观看。

直接上命令:

1
2
3
4
5
ffmpeg -i in.mp4 -s 854x480 -c:v libx264 -preset slow -b:v 500k -pass 1 -an -f mp4 -y /dev/null   #windows 最后使用 NULL,linux 使用 /dev/null。抑制输出。
# -s 后面就是视频分辨率, b:v  b:a 后面是相应码率。
# && \ 可以连接两句
ffmpeg -i in.mp4 -s 854x480 -c:v libx264 -preset slow -b:v 500k -pass 2 -c:a aac -b:a 64k -strict -2 out.mp4
# strict -2 参数由ffmpeg版本决定,旧的要,否则报错。

速度选项:

ultrafast superfast veryfast faster fast medium – default preset slow slower veryslow

1
2
3
4
5
-an   : 不编码音频
-vcodec : 设置视频的编码,我这里使用的是x264
-b   : 这个是码率
-f   : 强制使用格式
-y   : 自动输y确认

一条命令:

1
2
nohup ffmpeg -i in.mkv -s 854x480 -c:v libx264 -preset slow -b:v 500k -pass 1 -an -f mp4 -y /dev/null && ffmpeg -i in.mkv -s 854x480 -c:v libx264 -preset slow -b:v 500k -pass 2 -c:a aac -b:a 64k -strict -2 out.mp4 >/dev/null 2>&1 &

ffmpeg-htop-1.jpg

参考内容1参考内容2

{% note success %}

使用脚本批量压制:

{% endnote %}

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/bash 

filelist=$(find *.mp4 *.mkv *.avi ! -name "*_480p.mp4" -a)
OLDIFS="$IFS"
IFS=$"\n"
for filename in *.mp4 *.mkv *.avi

do
	nohup ffmpeg -i $filename -s 854x480 -c:v libx264 -preset fast -b:v 500k -pass 1 -an -f mp4 -y /dev/null && \
	ffmpeg -i $filename -s 854x480 -c:v libx264 -preset fast -b:v 500k -pass 2 -c:a aac -b:a 64k -strict -2 "${filename%.*}"_480p.mp4 >/dev/null 2>&1
	
done

rm ffmpeg2pass*

IFS=$OLDIFS

参考文档1参考文档2—nohup参考文档—find参考文档—IFS

find 使用有无,具体修改如下。

{% note success %}

改进版,可以处理子目录下的所有 mp4 mkv avi wmv 格式视频。

{% endnote %}

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash 
rm -f nohup.out

if [ ! -d finish ];then
  mkdir -p finish
fi

filelist=$(find  \( -iname "*.mp4" -o -iname "*.mkv" -o -iname "*.avi" -o -iname "*.wmv" \) -a ! -name "*_480p.mp4")
FOLDER=$(cd `dirname $0`; pwd)


for filename in $filelist

do
	tempname=${filename##*/}
	newfilename=${tempname%.*}
	nohup ffmpeg -i $FOLDER${filename#*.} -s 854x480 -c:v libx264 -preset fast -b:v 500k -pass 1 -an -f mp4 -y /dev/null && ffmpeg -i $FOLDER${filename#*.} -s 854x480 -c:v libx264 -preset fast -b:v 500k -pass 2 -c:a aac -b:a 64k -strict -2 finish/"${newfilename}"_480p.mp4 >/dev/null 2>&1
	
done


rm -f ffmpeg2pass*

exit

裁剪

1
ffmpeg -ss 00:00:00 -i in.mp4 -to 03:35:55 -vcodec copy -acodec copy -avoid_negative_ts 1 cutout.mp4

-i 需要在 -to 前面。

参考文章1参考2

字幕

1
ffmpeg -i input.mp4 -i subtitles.srt -c:s mov_text -c:v copy -c:a copy output.mp4

参考文档

附录:

mpv 几个快捷键

功能
< 逐帧 播放,上一帧
> 逐帧 播放,下一帧
M 静音
shift + <– 退一秒
shift + –> 进一秒

参考内容