아래 명령을 사용하여 MP4로 변환하는 큰 MPEG-TS 파일이 있습니다. MP4와 TS 파일 모두에서 비디오에서 같은 시간을 찾으려면 MP4는 TS 파일 뒤에 몇 프레임이됩니다. 내가 찾는 비디오가 더 나빠질수록 점점 악화됩니다.
c:\>ffmpeg -y -r 30 -i full-ts.ts -c:v copy -r 30 -an full.mp4
ffmpeg version N-69040-gb23a866 Copyright (c) 2000-2015 the FFmpeg developers
built on Jan 12 2015 22:02:37 with gcc 4.9.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge
r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-
libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
libavutil 54. 16.100 / 54. 16.100
libavcodec 56. 20.100 / 56. 20.100
libavformat 56. 18.101 / 56. 18.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 7.100 / 5. 7.100
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, mpegts, from 'full-ts.ts':
Duration: 00:11:25.75, start: 1.424000, bitrate: 3407 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 125 kb/s
Output #0, mp4, to 'full.mp4':
Metadata:
encoder : Lavf56.18.101
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 30 fps, 30 tbr, 15360 tbn, 30 tbc
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
frame=20419 fps=0.0 q=-1.0 Lsize= 251660kB time=00:11:25.59 bitrate=3007.0kbits/s
video:251446kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.084929%
TBN이 출력 스트림에서 왜 그렇게 큰지 혼란 스럽습니다. -copyts, -copytb, 모든 -vsynch 옵션을 시도했지만 MP4에서 검색 시간을 일치시킬 수 없습니다. 또한 MP4는 29.78의 프레임 속도를 보여 주지만 TS 파일은 ffprobe를 사용하여 30/1로 고정됩니다.
ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=avg_frame_rate full.mp4
streams_stream_0_avg_frame_rate="5227264/175529"
ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=avg_frame_rate full-ts.ts
programs_program_0_streams_stream_0_avg_frame_rate="30/1"
streams_stream_0_avg_frame_rate="30/1"
두 컨테이너에서 동일한 프레임을 표시하기 위해 어떻게 탐색 할 수 있습니까? 도와주세요!
@LordNeckbeard-출력에서 몇 가지 사항을 변경하지만 여전히 추구하는 문제가 있습니다. log @ gist.github.com/andypryor/3b1f123b4c8d6ed3975c를 참조하십시오 .
—
Andy
내가 이해하는 것처럼 mp4는 개별 프레임 사이의 시간, 어디서나 프레임 속도를 저장하지 않습니다. ffprobe는 처음 몇 프레임의 프레임 시간을보고 나머지 비디오는 동일하다고 가정합니다. 그래도 실제로 문제를 해결할 아이디어가 없습니다. MP4Box와 같이 ffmpeg 이외의 다른 것을 시도해보십시오. 또는 mkvmerge를 .mkv로 변환하여 다른 방식으로 작동하는지 확인하십시오. (그리고 아마도 mp4 이외의 것으로 ffmpeg muxing을 시도해보십시오. ffmpeg의 mp4 muxer는 완벽하지 않을 수 있습니다.)
—
Peter Cordes
: 표준 비디오 프레임 속도는 초당 30 프레임으로 변환 경우 결국 드리프트 볼, 29.97입니다 filmdoctor.net/2010/06/drop-frame-vs-non-drop-frame
—
비명 훈련
출력 스트림의 tbn이 15k로 너무 작습니다. 90k 여야합니다. 오디오 스트림을 버리는 것이 문제의 원인 인 것 같습니다.
—
Dimitri Podborski
-r 30
? 어쨌든 그 이유는 무엇입니까? 또한 스트림 복사 모드 를 활성화-c:v copy
하면 출력-r 30
이 무시됩니다.