我知道如何通过多个步骤完成此操作,但我宁愿一次性完成,这样我就不会多次重新编码。看来这是可能的……
我在 YouTube 上有一个视频播放列表,我想按照以下流程运行它:
- 使用YouTube-dl并使它们都具有相同的格式/编解码器(必须完全相同,因为我稍后会将它们连接起来)
youtube-dl --merge-output-format mp4 -f "bestvideo+bestaudio[ext=m4a]/best" -o "%(id)s.%(ext)s" -a playlist2.lst
- 我知道 YouTube-dl 使用FFmpeg后台处理视频,但此命令会导致一些 MP4 使用VP09和其他人使用AVCL 目录这需要下一步……
- 将所有视频转换为相同的编解码器和格式(一些是 MP4、MKV 或 WebM)
ffmpeg -i raw.mkv -preset slow -codec:a libfdk_aac -b:a 128k -codec:v libx264 -pix_fmt yuv420p -b:v 4500k -minrate 4500k -maxrate 9000k -bufsize 9000k -vf scale=-1:1080 input.mp4
- 将任何尺寸较小的视频拉伸至 1920x1080,然后将视频填充至 1920:1200,并将视频推至顶部
ffmpeg -i .\input.mkv -filter:v "pad=1920:1200:0:0" padded.mp4 -y
(仅起到填充作用)
- 在左下角添加图片
ffmpeg -i padded.mp4 -i watermark.png -filter_complex "overlay=10:1090" watermarked.mp4
- 在底部嵌入字幕文本(最好不要与水印图像重叠,因此位于右下角)
ffmpeg -i watermarked.mp4 -vf subtitles=inpyt.srt captioned.mp4
- 将所有视频合并为一个 MP4
ffmpeg -f concat -safe 0 -i files.lst -c copy playlist.mp4
如果必须进行多次重新编码,那么最少需要多少次?我既关心时间,又关心质量。我正在将视频转换为MP4,但我可以使用不同的格式/容器,例如影片,网页, 或者m4v如果这样效果更好的话。也许不需要让所有视频都使用相同的编解码器。
我在 Windows 10 上运行 FFmpeg 和 YouTube-dl,但如果有必要,可以在 Windows Subsystem for Linux 或 Powershell 下运行脚本。
答案1
终于明白了
ffmpeg -i .\input.mp4 -i "watermark.png" `
-filter_complex "scale=-1:1080,pad=1920:1180:0:0:#01487e,overlay=0:1050,`
subtitles=test.srt:force_style=Fontsize=20"`
-codec:a aac -b:a 128k -codec:v h264_nvenc -pix_fmt yuv420p `
-b:v 4500k -minrate 4500k -maxrate 6000k -bufsize 9000k ./padded.mp4 -y
我用的是分号;
而不是逗号,
链接多个过滤器。行末的反向撇号使命令跨越多行。