0

我从采集板上得到了一个 Mpeg TS 文件来制作一个演示视频剪辑。

这是来自ffmpeg的文件信息;

Stream #0:0[0x51]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 59.94 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x61]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 224 kb/s

但是,我无法在 FCP X 中对其进行编辑,因此我尝试使用以下命令使用 ffmpeg 将其容器 TS 更改为 MP4。

ffmpeg -i input.ts -vcodec copy -acodec copy output.mp4

完成后,output.mp4 的 fps 变为 59.94 fps,信息如下;

Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 1750 kb/s, 59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc
Stream #0:1(und): Audio: mp2 (mp4a / 0x6134706D), 48000 Hz, stereo, s16p, 224 kb/s

fps不一样。

有没有办法通过复制选项来更改容器来保持与 TS 相同的 fps?

我想知道是否只是重新编码是解决方案。

/////

完整的日志;

$ ffmpeg -i input.ts -vcodec copy -acodec copy output.mp4
ffmpeg version 1.1.2 Copyright (c) 2000-2013 the FFmpeg developers
  built on Feb  6 2013 10:45:57 with Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
  configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-libtheora --enable-libschroedinger --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex --enable-libfreetype --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64 --enable-yasm --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid
  libavutil      52. 13.100 / 52. 13.100
  libavcodec     54. 86.100 / 54. 86.100
  libavformat    54. 59.106 / 54. 59.106
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 32.100 /  3. 32.100
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[mpegts @ 0x7f8a2b033000] max_analyze_duration 5000000 reached at 5003333
Input #0, mpegts, from 'input.ts':
  Duration: 00:05:01.27, start: 0.224400, bitrate: 2727 kb/s
  Program 1 
    Stream #0:0[0x51]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 59.94 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x61]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 224 kb/s
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf54.59.106
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 29.97 fps, 90k tbn, 90k tbc
    Stream #0:1: Audio: mp2 (i[0][0][0] / 0x0069), 48000 Hz, stereo, 224 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7f8a2b058200] pts has no value
frame=13472 fps=0.0 q=-1.0 size=   54536kB time=00:03:44.80 bitrate=1987.3kbits/frame=18056 fps=0.0 q=-1.0 Lsize=   73024kB time=00:05:01.28 bitrate=1985.5kbits/s    
video:64370kB audio:8212kB subtitle:0 global headers:0kB muxing overhead 0.608498%
4

3 回答 3

2

您将不得不使用ffmbc将视频重新包装为 MP4。ffmpeg 不会像预期的那样复用隔行扫描的 H264 流——它将每个字段放入一个不同的访问单元中。请参阅此问题和我在视频制作中的回答。

于 2016-02-09T13:10:00.690 回答
0

您的输入视频是 30 fps 隔行扫描视频,等于每秒 60 个场 ffmpeg 生成了 60 fps 逐行视频,将每个场更改为单独的帧

一些去隔行标志可以保持帧速率

于 2013-03-09T05:49:22.847 回答
-1

您可以尝试为 fps 和带宽显式切换值...

-r 29.97

-vcodec libx264

-b:v 500k

-BT 220k

然后看看它或类似的东西是否解决了帧/速率加倍问题。

于 2013-03-08T16:42:52.033 回答