Ffmpeg更改纵横比未成功

Ffmpeg更改纵横比未成功,ffmpeg,Ffmpeg,我试图改变视频的纵横比,因为它以错误的方式显示(应该是16:9,但显示3:4)。 我尝试了很多东西,但都没有成功。 例如,我试图设置SAR,但它改变了DAR,因此纵横比保持不变。下面是一个例子: ffmpeg -y -i rtmp://localhost/in/air-hdmi -vf "setsar=sar=16/9" -f flv rtmp://localhost/in/ngoraltestffmpeg ffmpeg version N-80388-gfd1d84b Copyr

我试图改变视频的纵横比,因为它以错误的方式显示(应该是16:9,但显示3:4)。 我尝试了很多东西,但都没有成功。 例如,我试图设置SAR,但它改变了DAR,因此纵横比保持不变。下面是一个例子:

ffmpeg -y -i rtmp://localhost/in/air-hdmi -vf "setsar=sar=16/9" -f flv rtmp://localhost/in/ngoraltestffmpeg 


    ffmpeg version N-80388-gfd1d84b Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
  configuration: --prefix=/home/anastasia/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/anastasia/ffmpeg_build/include --extra-ldflags=-L/home/anastasia/ffmpeg_build/lib --bindir=/home/anastasia/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree
  libavutil      55. 24.100 / 55. 24.100
  libavcodec     57. 46.100 / 57. 46.100
  libavformat    57. 38.101 / 57. 38.101
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 46.101 /  6. 46.101
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100

[flv @ 0x38143c0] audio stream discovered after head already parsed
[aac @ 0x3818f20] element type mismatch 1 != 0
[flv @ 0x38143c0] video stream discovered after head already parsed
Input #0, flv, from 'rtmp://localhost/in/air-hdmi':
  Metadata:
    Server          : NGINX RTMP (github.com/arut/nginx-rtmp-module)
    displayWidth    : 720
    displayHeight   : 576
    fps             : 0
    profile         : 
    level           : 
  Duration: 00:00:00.00, start: 181748.084000, bitrate: N/A
    Stream #0:0: Audio: aac (HE-AAC), 44100 Hz, stereo, fltp
    Stream #0:1: Video: h264 (High), yuv420p, 720x576, 25 fps, 25 tbr, 1k tbn, 50 tbc
[flv @ 0x39bf5a0] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
    Last message repeated 1 times
Output #0, flv, to 'rtmp://localhost/in/ngoraltest':
  Metadata:
    Server          : NGINX RTMP (github.com/arut/nginx-rtmp-module)
    displayWidth    : 720
    displayHeight   : 576
    fps             : 0
    profile         : 
    level           : 
    encoder         : Lavf57.38.101
    Stream #0:0: Video: flv1 (flv) ([2][0][0][0] / 0x0002), yuv420p, 720x576 [SAR 16:9 DAR 20:9], q=2-31, 200 kb/s, 25 fps, 1k tbn, 25 tbc
    Metadata:
      encoder         : Lavc57.46.100 flv
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: mp3 (libmp3lame) ([2][0][0][0] / 0x0002), 44100 Hz, stereo, fltp
    Metadata:
      encoder         : Lavc57.46.100 libmp3lame
Stream mapping:
  Stream #0:1 -> #0:0 (h264 (native) -> flv1 (flv))
  Stream #0:0 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
[aac @ 0x3a37000] element type mismatch 1 != 0
    Last message repeated 7 times
[flv @ 0x39bf5a0] Failed to update header with correct duration.ate= 942.7kbits/s speed=2.37x    
[flv @ 0x39bf5a0] Failed to update header with correct filesize.
frame=  112 fps= 48 q=31.0 Lsize=     633kB time=00:00:05.18 bitrate= 999.9kbits/s speed=2.23x    
video:546kB audio:82kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.846813%
Exiting normally, received signal 2.

使用<代码> Stdar=16/9 < /COD>不成功:它改变PAR,因此结果是相同的:

Input #0, flv, from 'rtmp://localhost/in/air-hdmi':
  Metadata:
    Server          : NGINX RTMP (github.com/arut/nginx-rtmp-module)
    displayWidth    : 720
    displayHeight   : 576
    fps             : 0
    profile         : 
    level           : 
  Duration: 00:00:00.00, start: 287464.746000, bitrate: N/A
    Stream #0:0: Audio: aac (HE-AAC), 44100 Hz, stereo, fltp
    Stream #0:1: Video: h264 (High), yuv420p, 720x576, 25 fps, 25 tbr, 1k tbn, 50 tbc
[flv @ 0x3a5ea20] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
    Last message repeated 1 times
Output #0, flv, to 'rtmp://localhost/in/ngoraltest':
  Metadata:
    Server          : NGINX RTMP (github.com/arut/nginx-rtmp-module)
    displayWidth    : 720
    displayHeight   : 576
    fps             : 0
    profile         : 
    level           : 
    encoder         : Lavf57.38.101
    Stream #0:0: Video: flv1 (flv) ([2][0][0][0] / 0x0002), yuv420p, 720x576 [SAR 64:45 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 1k tbn, 25 tbc
    Metadata:
      encoder         : Lavc57.46.100 flv
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: mp3 (libmp3lame) ([2][0][0][0] / 0x0002), 44100 Hz, stereo, fltp
    Metadata:
      encoder         : Lavc57.46.100 libmp3lame
Stream mapping:
  Stream #0:1 -> #0:0 (h264 (native) -> flv1 (flv))
  Stream #0:0 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
(当使用
setsar
时,参数为
720x576[SAR 16:9 DAR 20:9]
,当
setdar
时--
720x576[SAR 64:45 DAR 16:9]

我还尝试应用
scale=720:-1
-aspect 16:9
,结果都是一样的

但是!Wnen I write
ffplay-vf setsar=16/9rtmp://localhost/in/ngoraltest
它完美地展示了我需要的东西。 这是一个什么样的问题,该怎么解决呢

另外,我有点困惑,输入信号的SAR和DAR并没有任何信息,但我对此无能为力

ffmpeg -i infile -aspect 16:9 -c copy outputfile
从:

设置视频显示纵横比。如果当 ,它将影响存储在的纵横比 容器级别,但不是存储在编码帧中的纵横比,如果 它存在

据我所知。当DAR数字变高时,视频媒体存在此问题。我猜媒体是如此紧密地缠绕在一起,它不会与其他具有相同方面的媒体发生冲突。我能看到的唯一方法是将其转换为原始格式并重新压缩。我在尝试将视频剪辑连接或拼接在一起时遇到了这个问题。与不同文件中的DAR不匹配的数字表示错误。我被迫使用windows movie maker手动连接媒体

从:

设置视频显示纵横比。如果当 ,它将影响存储在的纵横比 容器级别,但不是存储在编码帧中的纵横比,如果 它存在

据我所知。当DAR数字变高时,视频媒体存在此问题。我猜媒体是如此紧密地缠绕在一起,它不会与其他具有相同方面的媒体发生冲突。我能看到的唯一方法是将其转换为原始格式并重新压缩。我在尝试将视频剪辑连接或拼接在一起时遇到了这个问题。与不同文件中的DAR不匹配的数字表示错误。我被迫使用windows movie maker手动连接媒体。

您需要使用

ffmpeg -y -i rtmp://localhost/in/air-hdmi -vf "setdar=16/9" -f flv rtmp://localhost/in/ngoraltestffmpeg
setsar
是样本的纵横比,即一个像素
setdar
用于视频。当然,
setdar
所做的是改变SAR,考虑视频的尺寸,从而获得显示比率
DAR=宽度x SAR/高度

您需要使用

ffmpeg -y -i rtmp://localhost/in/air-hdmi -vf "setdar=16/9" -f flv rtmp://localhost/in/ngoraltestffmpeg

setsar
是样本的纵横比,即一个像素
setdar
用于视频。当然,
setdar
所做的是改变SAR,考虑视频的尺寸,从而获得显示比率
DAR=Width x SAR/height

因此,基于这里的所有内容,我遇到了同样的问题,并尝试了一些超级简单的方法:(在我的例子中,它显示为4:3,但我需要它显示为16:9)

但是,请注意,我从第一次失败尝试的输出中得知,它告诉我:

Stream #0:0: Video ...(other stuff)... 640x480 [SAR 1:1 DAR 4:3], ... (other stuff)...
所以我想我只需要改变DAR 4:3,所以我运行了这个:

ffmpeg -i "input.avi" -vf setdar=16:9 -c:a copy "output.mp4"

它就像一种魅力。

因此,基于这里的一切,我遇到了同样的问题,并尝试了一些超级简单的有效方法:(在我的例子中,它显示为4:3,但我需要它显示为16:9)

但是,请注意,我从第一次失败尝试的输出中得知,它告诉我:

Stream #0:0: Video ...(other stuff)... 640x480 [SAR 1:1 DAR 4:3], ... (other stuff)...
所以我想我只需要改变DAR 4:3,所以我运行了这个:

ffmpeg -i "input.avi" -vf setdar=16:9 -c:a copy "output.mp4"

如果你读了我的问题,你会注意到我已经试过了。另外,如果与
-aspect
一起使用,则
-c:v copy
会引发错误,从而导致aspect发生明显变化codec@Ngoral
-aspect
对于某些容器格式,确实可以使用
-c:v copy
,但我对FLV和RTMP不够熟悉,无法立即知道它是否可以工作,我没有进行调查或测试。但是,您没有提供实际错误,并且省略了
ffmpeg
配置和版本信息,这一点很重要。我们如何知道您是否使用的是古老的
ffmpeg
?@LordNeckbeard是的,对不起,我脑子里的东西都混在一起了,它与
c:v copy
一起工作。无论如何,这没有帮助。我还更新了日志,以便您可以查看版本和所有依赖项。如果您阅读了我的问题,您可能会注意到我已经尝试过了。另外,如果与
-aspect
一起使用,则
-c:v copy
会引发错误,从而导致aspect发生明显变化codec@Ngoral
-aspect
对于某些容器格式,确实可以使用
-c:v copy
,但我对FLV和RTMP不够熟悉,无法立即知道它是否可以工作,我没有进行调查或测试。但是,您没有提供实际错误,并且省略了
ffmpeg
配置和版本信息,这一点很重要。我们如何知道您是否使用的是古老的
ffmpeg
?@LordNeckbeard是的,对不起,我脑子里的东西都混在一起了,它与
c:v copy
一起工作。无论如何,这没有帮助。我还更新了日志,以便您可以看到您正在使用编码器
flv1
的版本和所有依赖项。“我怀疑你想要那个。”领主,我该用什么?怎么做?:)添加
-c:v libx264
作为H.264视频的输出选项。您正在使用编码器
flv1
。“我怀疑你想要那个。”领主,我该用什么?怎么做?:)添加
-c:v libx264
作为H.264视频的输出选项。我想我实际上需要坐到编码器/解码器,我的像素应该是其他形式。无论如何,这是行不通的