【问题标题】:Convert one image + one video's audio to video with ffmpeg使用ffmpeg将一张图像+一个视频的音频转换为视频
【发布时间】:2019-09-06 04:46:00
【问题描述】:

我正在尝试将一个视频文件 (flv) 和一个图像文件 (jpg) 转换为一个 mp4 视频,视频的音频采样率增加,图像覆盖在音频之上。

现在我正在使用这个命令:

ffmpeg -i video.flv -loop 1 -i photo.jpg -y -filter:a "asetrate=55786.5‬" -vcodec png -filter:v "pad=ceil(iw/2)*2:ceil(ih/2)*2" -map 1:0 -map 0:1 -y -tune stillimage finalvideo.mp4

它生成的 mp4 在 VLC 中可以正常播放,但不会上传到 YouTube,这是我最终想要做的。我可以使用两个单独的 ffmpeg 命令将 flv 转换为 mp3,然后再转换为 mp4,但是我在时间和资源有限的环境中运行它,所以我想尽可能避免这种情况。

【问题讨论】:

  • YT 可能不接受 PNG 视频流。试试-c:v libx264 -pix_fmt yuv420p。非常规的采样率也可能是一个问题。您如何限制输出持续时间?
  • 这就是我的想法,所以我尝试了 libx264 而不是 PNG,但这不使用图像并保持原始视频完好无损。不幸的是,对于我的项目,我必须使用那个奇怪的采样率。我现在实际上并没有限制输出持续时间,我必须这样做吗?
  • 编码器的选择与使用哪个输入流无关。后者由-map决定,或者如果没有设置地图,则自动stream selection
  • 出于某种原因,每当我使用-c:v libx264 时,即使我正确映射它,它也会保持原始视频完好无损。我可以让它使用图像而不是视频的唯一方法是使用-c:v png
  • 分享这样一个命令的日志。通过添加 -report 生成日志。

标签: ffmpeg


【解决方案1】:

经过更多的试验,我设法想出了一个可以解决问题的命令:

ffmpeg -i x.flv -loop 1 -i p.jpg -y -filter:a "asetrate=55786.5" -vcodec libx264 -filter:v "pad=ceil(iw/2)*2:ceil(ih/2)*2" -map 0:1 -map 1:0 -y -tune stillimage -shortest z.mp4

我是 ffmpeg 的新手,所以我没有意识到我已经设置了输出持续时间并且 -loop 的位置意味着什么。谢谢大家!

【讨论】:

    猜你喜欢
    • 2011-08-18
    • 2020-08-25
    • 1970-01-01
    • 2017-02-26
    • 2014-03-02
    • 2016-06-13
    • 2016-04-26
    • 2019-03-30
    • 1970-01-01
    相关资源
    最近更新 更多