2013-03-08 136 views
0

我從捕獲板獲取了一個Mpeg TS文件以製作一個DEMO視頻片段。使用ffmpeg,試圖將容器從Mpeg TS更改爲MP4,fps成爲Mpeg TS的兩倍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編輯它,所以我嘗試使用下面的命令來改變只是其容器TS到MP4的有關ffmpeg。

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% 
+0

請同時顯示完整的ffmpeg控制檯輸出。 – LordNeckbeard 2013-03-08 17:44:17

+0

我添加了完整的日誌。 – user2148481 2013-03-09 13:57:38

回答

-1

你可以嘗試爲FPS和對帶寬的顯式開關值...

-r 29.97

-vcodec libx264

-b:v 500K

-bt 220k

然後看看這樣或類似的東西解決了f rame/rate倍增問題。

+2

您的建議將對視頻進行重新編碼,並且user2148481問道:「是否有一種方法可以保留與TS相同的fps,只需複製選項即可更改容器?」 – LordNeckbeard 2013-03-08 17:43:26

0

您的視頻輸入是每秒30幀的隔行掃描視頻,其等於每秒 ffmpeg的60場產生一個60幀的漸進視頻改變每個字段到一個單獨的幀

一些隔行掃描標記可以保持幀速率

2

您將不得不使用ffmbc重新包裝MP4中的視頻。 ffmpeg不像預期的那樣多路複用隔行掃描的H264流 - 它將每個字段放入不同的訪問單元中。看到這個question和我在視頻製作的答案。