ffmpeg - 使用 -c :v copy 时帧倒置

标签 ffmpeg copy flip

我尝试使用 ffmpeg 的复制选项将 AVI 视频(一段时间)复制到另一个新创建的 AVI 文件中。
(在 Windows 32 位上)

ffmpeg -i "C:\Temp\zzz\myAvi.avi" -c copy -t 00:00:10 "C:\Temp\zzz\myAviNew.avi"

为什么结果文件中的图片颠倒了?
(而且生成的新音频有点失真。)

在新创建的文件上再次使用相同的命令不会再次将它们翻转回来 - 图片保持倒置。
为什么这个?它是一个错误吗?

控制台带来以下输出:
 ffmpeg version N-50911-g9efcfbe Copyright (c) 2000-2013 the FFmpeg developers
  built on Mar 13 2013 21:26:48 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libg
sm --enable-libilbc --enable-libmp3lame --enable-libopencore-amrnb --enable-libo
pencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-li
bschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-lib
twolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enabl
e-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 19.100 / 52. 19.100
  libavcodec     55.  0.100 / 55.  0.100
  libavformat    55.  0.100 / 55.  0.100
  libavdevice    54.  4.100 / 54.  4.100
  libavfilter     3. 45.103 /  3. 45.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[avi @ 02537ba0] non-interleaved AVI
Guessed Channel Layout for  Input Stream #0.1 : stereo
Input #0, avi, from 'C:\Temp\zzz\Hase.avi':
  Duration: 00:00:35.92, start: 0.000000, bitrate: 171375 kb/s
    Stream #0:0: Video: rawvideo, bgra, 768x576, 12 tbr, 12 tbn, 12 tbc
    Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16
, 1411 kb/s
Output #0, avi, to 'C:\Temp\zzz\HaseNew.avi':
  Metadata:
    ISFT            : Lavf55.0.100
    Stream #0:0: Video: rawvideo, bgra, 768x576, q=2-31, 12 tbn, 12 tbc
    Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, 141
1 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=   11 fps=0.0 q=-1.0 size=   19162kB time=00:00:00.91 bitrate=171242.4kbit
frame=   16 fps= 12 q=-1.0 size=   27874kB time=00:00:01.33 bitrate=171255.5kbit
...
...
...
frame=  120 fps=5.4 q=-1.0 size=  209083kB time=00:00:09.99 bitrate=171280.6kbit
frame=  121 fps=5.5 q=-1.0 Lsize=  210834kB time=00:00:10.08 bitrate=171288.2kbi
ts/s
video:209088kB audio:1723kB subtitle:0 global headers:0kB muxing overhead 0.0112
76%

C:\WINDOWS\system32>

最佳答案

问题可能来自您的输入文件。该副本完全按照它所说的进行,它将比特流从输入容器复制到输出容器。出现问题时,大部分时间是因为某些数据尚未从输入传递到输出(例如元数据),因为无法使用复制修改视频数据。

关于您的具体问题,视频文件可以包含元数据以指定播放到视频播放器的旋转。

要将该信息添加回输出容器,您需要将以下属性添加到输出。

-metadata:s:v:0 rotate=180

您的初始命令应如下所示:
ffmpeg -i "C:\Temp\zzz\myAvi.avi" -c copy -t 00:00:10 -metadata:s:v:0 rotate=180 "C:\Temp\zzz\myAviNew.avi"

关于ffmpeg - 使用 -c :v copy 时帧倒置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22203850/

相关文章:

stream - 如何通过 ffmpeg 保存 RAW rtp 输出文件

encoding - Android 上的 FFMPEG x264 编码 - 前瞻错误

c# - 如何将在其他表中有相关​​记录的 SQL 记录复制到同一个数据库?

path - 如何构建 mtp 设备的路径(可在文件夹浏览对话框中使用)?

r - 翻转 gg TreeMap

video - 如何在没有 ffmpeg 的情况下合并两个文件

bash - 如何设置 ffmpeg 队列?

linux - Linux 中日志频繁轮转时如何复制所需的日志文件内容

html - CSS 翻转代码在 IE11 中不起作用

tensorflow - 如何在 Keras 中翻转张量?