2016-12-07 22 views
0

FFmpeg에서 생성 한 JPEG 파일에 타임 스탬프를 갖고 싶습니다.FFmpeg : strftime을 사용하여 프레임 파일 이름을 가져올 수 없습니다.

ffmpeg -f dshow -framerate 50 -i video="XI100DUSB-HDMI Video" -strftime 1 "%Y-%m-%d_%H-%M-%S_thumb%04d.jpg" 

또한 말한다 :

av_interleaved_write_frame() : 잘못된 인수 내가 잘못 뭐하는 거지

나는 이런 식으로는 FFmpeg를 실행 위의 오류 메시지를 받고 있어요? 감사합니다.

전체는 FFmpeg 출력 :

ffmpeg version 3.2 Copyright (c) 2000-2016 the FFmpeg developers 
    built with gcc 5.4.0 (GCC) 
    configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-libebur128 --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-libopenh264 --enable-li 
bopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib 
    libavutil  55. 34.100/55. 34.100 
    libavcodec  57. 64.100/57. 64.100 
    libavformat 57. 56.100/57. 56.100 
    libavdevice 57. 1.100/57. 1.100 
    libavfilter  6. 65.100/6. 65.100 
    libswscale  4. 2.100/4. 2.100 
    libswresample 2. 3.100/2. 3.100 
    libpostproc 54. 1.100/54. 1.100 
Input #0, dshow, from 'video=XI100DUSB-HDMI Video': 
    Duration: N/A, start: 777552.702000, bitrate: N/A 
    Stream #0:0: Video: rawvideo (YUY2/0x32595559), yuyv422, 1920x1080, 50 fps, 50 tbr, 10000k tbn, 10000k tbc 
[swscaler @ 0000000001c8c940] deprecated pixel format used, make sure you did set range correctly 
[mjpeg @ 0000000001c7ea60] removing common factors from framerate 
Output #0, image2, to '%Y-%m-%d_%H-%M-%S_thumb%04d.jpg': 
    Metadata: 
    encoder   : Lavf57.56.100 
    Stream #0:0: Video: mjpeg, yuvj422p(pc), 1920x1080, q=2-31, 200 kb/s, 50 fps, 50 tbn, 50 tbc 
    Metadata: 
     encoder   : Lavc57.64.100 mjpeg 
    Side data: 
     cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1 
Stream mapping: 
    Stream #0:0 -> #0:0 (rawvideo (native) -> mjpeg (native)) 
Press [q] to stop, [?] for help 
[image2 @ 0000000001c7afe0] Could not get frame filename with strftime 
av_interleaved_write_frame(): Invalid argument 
frame= 1 fps=0.0 q=7.9 Lsize=N/A time=00:00:00.02 bitrate=N/A speed=0.687x 
video:101kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown 
[dshow @ 0000000001c728a0] real-time buffer [XI100DUSB-HDMI Video] [video input] too full or near too full (136% of size: 3041280 [rtbufsize parameter])! frame dropped! 
Conversion failed! 

답변

1

패턴은 % D 날짜에 예약하고, 확장() STRFTIME에 전달되고있다. Advanced Renamer과 같은 다른 도구를 사용하여 시퀀스 색인 숫자를 접미사로 추가해야합니다.

P. FFmpeg가 프레임을 삭제합니다. 추가 -rtbufsize 20M 전에 -i video

+0

고마워 @ 멀비 나는 그것에 대해 생각하지 않았다.하지만 50fps (그렇지 않으면 덮어 쓰기)를 저장하기 때문에 즉시 다른 파일 이름이 필요합니다. 밀리 초는 여전히 지원되지 않습니까? 또는 어떤 종류의 색인을 얻는 다른 직접적인 방법? – clic

+0

rtbufsize와 관련하여 실시간 인코딩의 경우 대기 시간을 최소화하기 위해 -fflags nobuffer를 사용하는 것이 더 좋지 않습니까? – clic

+0

프레임 번호를 순차적으로 지정하고 비디오의 시간을 오버레이하거나 그 바로 아래에 배치하는 것이 좋습니다. 피드는 압축되지 않은 FullHD 프레임입니다. 큰 버퍼가 없으면 프레임을 삭제합니다. 동기화 할 다른 스트림이 없으므로 대기 시간이 문제가되지 않습니다. – Mulvya