如何使用 FFMPEG 过滤器功能的多次传递?

如何使用 FFMPEG 过滤器功能的多次传递?

我知道如何通过多个步骤完成此操作,但我宁愿一次性完成,这样我就不会多次重新编码。看来这是可能的……

我在 YouTube 上有一个视频播放列表,我想按照以下流程运行它:

  1. 使用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 目录这需要下一步……
  2. 将所有视频转换为相同的编解码器和格式(一些是 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
  3. 将任何尺寸较小的视频拉伸至 1920x1080,然后将视频填充至 1920:1200,并将视频推至顶部
    • ffmpeg -i .\input.mkv -filter:v "pad=1920:1200:0:0" padded.mp4 -y(仅起到填充作用)
  4. 在左下角添加图片
    • ffmpeg -i padded.mp4 -i watermark.png -filter_complex "overlay=10:1090" watermarked.mp4
  5. 在底部嵌入字幕文本(最好不要与水印图像重叠,因此位于右下角)
    • ffmpeg -i watermarked.mp4 -vf subtitles=inpyt.srt captioned.mp4
  6. 将所有视频合并为一个 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

我用的是分号;而不是逗号,链接多个过滤器。行末的反向撇号使命令跨越多行。

相关内容