Warm tip: This article is reproduced from serverfault.com, please click

php-ffmpeg命令可以将任何格式的视频转码成不同的分辨率?

(php - ffmpeg commands to transcode any format video into different resolutions?)

发布于 2020-11-28 14:53:20

如何在ffmepg的帮助下将任何格式的视频转换为不同的分辨率,例如YouTube。我需要最好的命令来做到这一点。减小视频大小,更改分辨率和视频音频位。

质量是

  • 1080p
  • 720p
  • 480p
  • 360p
  • 240p和144p

输出将为mp4 h.264 / AVC视频格式。

Questioner
Priyanshu Roy
Viewed
11
llogan 2020-11-29 02:37:17

使用秤过滤器

ffmpeg -i input.mp4 -filter_complex
"[0]scale=-2:1080,format=yuv420p[1080];
 [0]scale=-2:720,format=yuv420p[720];
 [0]scale=-2:480,format=yuv420p[480];
 [0]scale=-2:360,format=yuv420p[360];
 [0]scale=-2:240,format=yuv420p[240];
 [0]scale=-2:144,format=yuv420p[144]"
-map "[1080]" -map 0:a -c:v libx264 -c:a aac -movflags +faststart 1080.mp4
-map "[720]" -map 0:a -c:v libx264 -c:a aac -movflags +faststart 720.mp4
-map "[480]" -map 0:a -c:v libx264 -c:a aac -movflags +faststart 480.mp4
-map "[360]" -map 0:a -c:v libx264 -c:a aac -movflags +faststart 360.mp4
-map "[240]" -map 0:a -c:v libx264 -c:a aac -movflags +faststart 240.mp4
-map "[144]" -map 0:a -c:v libx264 -c:a aac -movflags +faststart 144.mp4

使用T型多路复用器的一种更高效但更复杂的方法,因此音频仅被编码1次,而不是6次:

ffmpeg -i input.mp4 -filter_complex
"[0]scale=-2:1080,format=yuv420p[1080];
 [0]scale=-2:720,format=yuv420p[720];
 [0]scale=-2:480,format=yuv420p[480];
 [0]scale=-2:360,format=yuv420p[360];
 [0]scale=-2:240,format=yuv420p[240];
 [0]scale=-2:144,format=yuv420p[144]"
-map "[1080]" -map "[720]" -map "[480]" -map "[360]" -map "[240]" -map "[144]" -map 0:a
-c:v libx264 -c:a aac -f tee
"[select=\'v:0,a\':movflags=+faststart]1080.mp4|[select=\'v:1,a\':movflags=+faststart]720.mp4|[select=\'v:2,a\':movflags=+faststart]480.mp4|[select=\'v:3,a\':movflags=+faststart]360.mp4|[select=\'v:4,a\':movflags=+faststart]240.mp4|[select=\'v:5,a\':movflags=+faststart]144.mp4"

我将命令分成几行以帮助可视化命令。在运行命令之前将其设置为1行。