5

VLCFFmpeg(或AVconv )是否具有将视频的持续时间强制为特定秒数的任何功能?

假设我有一个...... 5 分钟的 .mp4 视频(无音频)。有没有办法让上述任何工具将视频“扩展”到更长的持续时间?该视频来自 Power Point 幻灯片,但它太短(运行速度太快,不能这么说)。这个想法将自动插入帧,使其达到指定的持续时间。它看起来很可行(呃……对于像我这样的视频编码/转码新手来说):一个 5 分钟的视频,30fps 意味着我有 9000 帧……要让它长 10 倍,得到第一个“真实”帧,复制十次,然后得到第二个“真实”帧,复制十次……以此类推。

我使用的是 Ubuntu 12.04,但如果需要,我可以安装/编译任何所需的软件。到目前为止,我有 VLC、AVConv 和 FFmpeg(FFmpeg 在特定文件夹中,所以它不会与 AVConv 冲突)

先感谢您。

4

1 回答 1

13

使用setpts 视频过滤ffmpeg。简单的例子:

  • 慢速(半速):setpts=PTS*2setpts=PTS/0.5
  • 快速 (2x):setpts=PTS/2setpts=PTS*0.5

视频速度提升 10 倍

ffmpeg -i input.mp4 -filter_complex "setpts=PTS/10" output.mp4

音频和视频速度提高 10 倍

对于音频,请使用atempoRubberbandasetrate音频过滤器。

ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=PTS/10[v];[0:a]atempo=10[a]" -map "[v]" -map "[a]" output.mp4

匹配视频到音频的持续时间

在此示例audio.wav中,持续时间为 30 秒和video.mp490 秒。

  1. 获取音视频文件的时长:

     ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 audio.wav
     ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.mp4
    
  2. 使用setpts视频过滤器调整视频的持续时间以匹配音频持续时间。

     ffmpeg -i video.mp4 -i audio.wav -filter_complex "[0:v]setpts=PTS*30/90[v]" -map "[v]" -map 1:a -shortest output.mp4
    

使视频适合特定时间

在此示例中,输入为 120 秒。所需的输出为 30 秒:

  1. 获取输入文件的持续时间:

    ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
    
  2. 使用setptsatempo(或Rubberband)过滤器:

    ffmpeg -i input.mp4 -filter_complex "setpts=PTS/(120/30);atempo=120/30" output.mp4
    
于 2013-02-08T22:19:26.323 回答