video - 更改视频分辨率 ffmpeg

标签 video ffmpeg video-processing

我有不同分辨率的视频。我希望它们都具有 480x320 的分辨率。我尝试了命令:

ffmpeg -i %s_ann.mp4 -vf scale=480x320,setsar=1:1 %s_annShrink.mp4' %(dstfile,dstfile)

但视频的输出是大小为 0 kb 的文件。

我做错了什么?

最佳答案

我想这里真的有两个问题......

  • 如何批量转换文件?
  • 如何自动缩放视频?


  • 如何批量转换文件?

    这些脚本应该可以解决问题...

    window
    for %%i in (*.mp4) do (
        ffmpeg -y -i "%%i" << TODO >> "%%~ni_shrink.mp4"
    )
    

    Linux (未经测试!)
    for i in *.mp4; 
    do
        ffmpeg -y -i "$i" << TODO >> "${i%.mp4}_shrink.mp4";
    done
    

    (我不太确定 Linux 脚本中的输出文件扩展,值得验证。)

    如何自动缩放视频?

    这有点棘手。当你有你的命令时,纵横比可能会搞砸。这里的选项...
  • 缩放视频,忽略纵横比。结果 = 视频失真
  • 缩放视频,保持纵横比,以便调整缩放的高度(或宽度)以适应。结果 = 最佳
  • 缩放视频,保持纵横比并用黑条填充,使视频大小正好为 480x320。结果 = 浪费/增加文件大小
  • 在缩放之前裁剪输入,使其“填充”480x320 分辨率。结果 = 不完整的视频

  • 选项 2 将是首选解决方案,否则您(可能不必要地)增加输出文件大小。选项 3,我将给出一个经过部分测试的解决方案。选项4我什至不会碰。

    选项 2:缩放视频,保持纵横比,以便调整高度以适合
    ffmpeg -y -i "%%i" -vf scale=480:-2,setsar=1:1 -c:v libx264 -c:a copy "%%~ni_shrink.mp4"
    

    选项 3:缩放视频,保持纵横比并用黑条填充,使视频大小正好为 480x320
    ffmpeg -y -i "%%i" -vf "[in]scale=iw*min(480/iw\,320/ih):ih*min(480/iw\,320/ih)[scaled]; [scaled]pad=480:320:(480-iw*min(480/iw\,320/ih))/2:(320-ih*min(480/iw\,320/ih))/2[padded]; [padded]setsar=1:1[out]" -c:v libx264 -c:a copy "%%~ni_shrink.mp4"
    

    关于video - 更改视频分辨率 ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34391499/

    相关文章:

    flash - 将 RGB 转换为 YUV,+ ffmpeg

    ffmpeg 水平翻转网络摄像头到虚拟摄像机

    ffmpeg - 将带隐藏字幕的 TS 转换为带字幕的 MKV/MP4

    video - 将两个视频叠加到静态图像上?

    ios - 如何在 iOS 中将一个视频叠加在另一个视频上?

    python - 为什么 ffmpeg-python 的输出与图像形状不匹配?

    java - 如何构建一个播放视频的 Android 小部件

    android - 生成可在 Android 和 iOS 上播放的视频

    iphone - 将视频流式传输(或渐进式下载)到 Droid 浏览器

    linux - 使用 gstreamer 和 gst-launch 循环播放视频?