2016-11-20 172 views
0

我试图改变视频的纵横比,导致它显示错误的方式(它应该是16:9,但显示3:4)。 我试了很多东西,都没有工作。 例如我试图设置SAR,但它改变了DAR,因此宽高比保持不变。这里有一个例子:Ffmpeg改变纵横比没有成功

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. 

使用setdar=16/9并不成功:它改变了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,该PARAMS是720x576 [SAR 16:9 DAR 20:9],当setdar - 720x576 [SAR 64:45 DAR 16:9]

我也试着申请scale=720:-1-aspect 16:9和所有保持不变。

但是!当我写ffplay -vf setsar=16/9 rtmp://localhost/in/ngoraltest它完全显示我需要什么。 什么可能是thae问题和锄头来解决它?

P.S.我有点困惑,没有关于输入信号的SAR和DAR的信息,但我完全可以不做任何事情。

+0

您正在使用编码器“flv1”。我怀疑你想要那样。 – LordNeckbeard

+0

@LordNeckbeard Whatshoul我用?如何? :) – Ngoral

+0

添加'-c:v libx264'作为H.264视频的输出选项。 – LordNeckbeard

回答

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

documentation

设置视频显示宽高比。如果-aspectstream copying一起使用,它将影响存储在 容器级别的纵横比,但不会存储在编码帧中的纵横比,如果 它存在。

从我所知道的。当DAR数字变高时,视频媒体存在这个问题。我猜媒体是如此紧张的结局,它不会连接到其他媒体具有相同的方面。我能看到的唯一方法是将其转换为原始格式并重新压缩它。当我尝试将视频剪辑连接在一起时遇到此问题。在不同文件中与DAR不匹配的数字会产生错误。我被迫使用Windows电影制作人手动附加媒体。

+0

如果您阅读我的问题,您可能会注意到我已经尝试过。 '-c:v copy'抛出一个错误,如果与'-aspect'一起使用会导致方面明显改变编解码器 – Ngoral

+0

@Ngoral'-aspect'对'-c:v copy'在一些容器格式中工作,但我不是熟悉FLV和RTMP就可以知道它是否能正常工作,而且我没有进行调查或测试。但是,您没有提供实际的错误,并且省略了包含的重要的'ffmpeg'配置和版本信息。我们如何知道你是否不使用古老的'ffmpeg'? – LordNeckbeard

+0

@LordNeckbeard是的,对不起,我脑子里混杂着一切,它使用'c:v copy'。无论如何,这没有帮助。我还更新了日志,以便您可以看到版本和所有依赖关系 – Ngoral

0

需要使用

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

+0

我以为我实际上需要坐在编码器/解码器上,我的像素应该是其他形式。无论如何,这不起作用:( – Ngoral

+0

根据您粘贴的控制台输出,输出的DAR是16:9,所以这些值是正确的。您的视频是否已经有信箱?从原始视频粘贴屏幕截图。 ffmpeg -y -i rtmp:// ... -vf“scale = 1024:576,setsar = 1”-f flv rtmp:// ...' – Mulvya