【问题标题】:ffmpeg scale/forcing fixed video resolution issueffmpeg 缩放/强制固定视频分辨率问题
【发布时间】:2018-01-30 13:57:48
【问题描述】:

我尽量确保video comes outresolution1920 x1080, 如果不是编码must force this resolution。 我需要它来从具有标准分辨率 (HD) 的视频输入创建精细的适应集。

我无法始终获得此分辨率,例如对于 1920 x 1040 我得到 1993 x 1080

,在我的 ffmpeg 命令行下方:

ffmpeg -y -i $name -i logo1080.png -c:a aac -b:a 256k -ar 48000 -ac 2 -async 1 -c:v libx264 -x264opts keyint=$GOP:min-keyint=$GOP:no-scenecut -bf 0 -r $FPSC -b:v 2400k -maxrate 2400k -bufsize 1200k -profile:v main -t $FDUR -filter_complex "[0:v][1:v]overlay=main_w-overlay_w-10:10,scale=1920:1080" format1080.mp4

我尝试了 ffmpeg 比例页面告诉的所有可能性,但不知道如何解决它。 我想我需要一些帮助 谢谢, 马西莫

【问题讨论】:

  • 你试过-s 1920x1080 并移除缩放吗? (如果不知道参数放在哪里,把它放在-r $FPSC之前)
  • 嗨,Kamilz 是我尝试这两种方法的整个下午,1920x1072 是输入文件,使用 -s 我得到了 1932 x 1080,比例为“scale=-1920:-1080”,我得到了 1920 x 1072,没有办法获得固定的分辨率。在我最后一次尝试之下: ffmpeg -y -i $name -i logo1080.png -c:a aac -b:a 384k -ar 48000 -ac 2 -async 1 -c:v libx264 -x264opts keyint=$GOP:min- keyint=$GOP:no-scenecut -bf 0 -s 1920x1080 -r $FPSC -b:v 2400k -maxrate 2400k -bufsize 1200k -profile:v main -t $FDUR -filter_complex "[0:v][1:v ]overlay=main_w-overlay_w-10:10" format-1080.mp4
  • 问题似乎只有在进程必须添加更多区域时才会出现
  • 我也试试 -s hd1080
  • 分享你的命令的完整日志。

标签: video ffmpeg video-encoding


【解决方案1】:

MP4box 似乎考虑了 SAR 校正尺寸,即它认为框架尺寸为 iw*sar x ih。 ffmpeg 的比例过滤器调整输出的 SAR 以保留输入的 DAR。在这种情况下,1920/1040 = 1920 x newSAR/1080,所以1920 x new SAR == 1993

您可以通过在标度后将 SAR 设置为 1 来回避这个问题。

-filter_complex "[0:v][1:v]overlay=main_w-overlay_w-10:10,scale=1920:1080,setsar=1"

【讨论】:

  • 我阅读了有关 dar 和 sar 的文章,但我在 -s -vf 和 -filter_complex 之间迷失了自我,为了确保我立即开始使用您对同一视频的更正进行编码(在 13inch 2014 mac 上完全召回..) 在 3 小时内我可以给你我的反馈,我很乐观,非常感谢 ;)
【解决方案2】:

谢谢大家的不负责任,我认为会有一点错误但我不明白在哪里,我试着把所有的步骤都带上!

在我写的 bash 下也是在 stackoverflow 用户的帮助下:

#!/bin/bash
# ENCODING FOR MPEG DASH

echo "ENCODE DASH-READY PROCESS"

echo -n "Insert input file name (es: input.mp4) and press [ENTER]: "
read name

DUR="$(ffmpeg -i $name 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }')"

FPS="$(ffmpeg -i $name 2>&1 | sed -n "s/.*, \(.*\) fp.*/\1/p")"
FPSC=$( echo "($FPS+0.5)/1" | bc )

eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width $name)
size=${streams_stream_0_height}

GOP="$((FPSC*2))"
DURM="$((DUR%2))"
FDUR="$(($DUR-$DURM))"
# :no-open-gop=1:crf=16
# -c:a copy 
# -vf "scale=-1:1080”


ffmpeg -y -i $name -i logo.png -c:a aac -b:a 384k -ar 48000 -ac 2 -async 1 -c:v libx264 -x264opts keyint=$GOP:min-keyint=$GOP:no-scenecut -bf 0 -s hd1080 -r $FPSC -b:v 4800k -maxrate 4800k -bufsize 3000k -profile:v main -t $FDUR -filter_complex "[0:v][1:v]overlay=main_w-overlay_w-10:10" format-1080.mp4

ffmpeg -y -i format-1080.mp4 -c:a aac -b:a 128k -ar 48000 -ac 2 -async 1 -c:v libx264 -x264opts keyint=$GOP:min-keyint=$GOP:no-scenecut -bf 0 -s 640x360 -r $FPSC -b:v 800k -maxrate 800k -bufsize 500k -profile:v main -t $FDUR format-360.mp4


#clear
echo duration in seconds $FDUR 
echo fps $FPSC 
echo height resolution $size 
echo I-frames GOP $GOP
#MP4Box -info TRACK_ID format.mp4 2>&1 | grep GOP
echo "format-1080.mp4 ready"
echo "format-360.mp4 ready"
echo "ENCODE COMPLETED"

它准备了两个表示,第二个是从第一个创建的。 正如我所说,我希望这个脚本能够处理更多类型的视频:如果输入视频没有所需的规格(例如:gop,分辨率 HD 1920 x 1080),编码必须强制它们生成另一个适应集高清版,这是为了避免非常规的分辨率,比如影院范围或一切都不是 1920 x 1080 来生成高清版的精细小版。

现在事实变得不清楚: 如果我使用ffmpeg -i format-1080.mp4 我知道分辨率是 1920 x 1080 但是如果我检查文件信息(请注意,我此时在 osx 上尝试)它说 1993 x 1080,与我尝试破折号时说的 MP4Box 相同:

[DASH] Files have non-proportional track layouts (1993x1080 vs 664x360) but sample size and aspect ratio match, assuming precision issue

我知道如果第一个视频输入是 1920 x 1080,第二个是 640 x 360 一切正常。

我的 ffmpeg 版本是 3.4.1 实验的原始视频是:

ffmpeg version 3.4.1 Copyright (c) 2000-2017 the FFmpeg developers
  built with Apple LLVM version 9.0.0 (clang-900.0.39.2)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.4.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'total.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isomavc1
    creation_time   : 2012-08-10T11:02:57.000000Z
  Duration: 01:53:31.08, start: 0.000000, bitrate: 2211 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1040 [SAR 1:1 DAR 24:13], 2111 kb/s, 24 fps, 24 tbr, 96 tbn, 48 tbc (default)
    Metadata:
      creation_time   : 2012-08-10T11:02:58.000000Z
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 95 kb/s (default)
    Metadata:
      creation_time   : 2012-08-10T11:13:14.000000Z
      handler_name    : GPAC ISO Audio Handler

在上面您可以清楚地看到原始分辨率为 1920 x 1040。 当我尝试从原始分辨率添加更多没有比例的区域时似乎是问题,似乎只有当视频必须变得比原始视频更小时,比例校正才能正常工作。 一些想法? 谢谢! 马西莫

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多