我尝试使用 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/