【注意】最后更新于 March 12, 2018,文中内容可能已过时,请谨慎使用。
使用 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 &
|
参考内容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 + –> |
进一秒 |
参考内容 。