ffmpeg를 사용하여 현재 시간을 삽입하는 방법은 무엇입니까?

ffmpeg를 사용하여 현재 시간을 삽입하는 방법은 무엇입니까?

저는 SSH를 통한 간단한 라이브 비디오 스트리밍 및 녹화를 위해 ffmpeg및 를 사용하고 있습니다. 이제 현재(서버) 시간을 스트림에 포함시키고 싶습니다. 형식은 중요하지 않습니다. 이상적으로는 .teemplayerYYYY-MM-DD HH:MM:SS

찾았어요이것다음 명령을 제안하는 방법:

ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 \
-vf "drawtext=fontfile=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: \
text='%{localtime\:%T}': [email protected]: x=7: y=700" -vcodec libx264 \
-preset veryfast -f mp4 -pix_fmt yuv420p -y output.mp4

하지만 -vf이 부분을 사용하면 다음과 같은 오류가 발생합니다.

[NULL @ 0x55e4ef96b2a0] Unable to find a suitable output format for 'text=%{localtime:%T}:'
text=%{localtime:%T}:: Invalid argument

나도 시도했다이것테스트하기 위해 명령(Q의 세 번째 코드 블록)을 실행했지만 역시 실패했습니다.

[Parsed_drawtext_0 @ 0x55fb2862a940] Both text and text file provided. Please provide only one
[AVFilterGraph @ 0x55fb28629fc0] Error initializing filter 'drawtext' with args 'text=%{pts:hms:1553359336.166336638}'

마침내 나는 깨달았다이것질문을 하고 약간 수정하여 시도해 보았습니다(이것은 전체 명령을 보여주며 -vf지난 두 예제의 옵션만 조정했습니다).

ffmpeg  -r 20 -s 640x480 -f video4linux2 -i /dev/video0 -vf "drawtext=fontsize=90:fontcolor=white: fontfile=/usr/share/fonts/TTF/DejaVuSans.ttf: text='%{localtime\:%X}'" -f avi -

이로 인해 다음과 같은 오류가 발생합니다.

[NULL @ 0x55ae61d051a0] Unable to find a suitable output format for 'fontfile=/usr/share/fonts/TTF/DejaVuSans.ttf:'
fontfile=/usr/share/fonts/TTF/DejaVuSans.ttf:: Invalid argument

내가 찾은 내용 수정여기조금:

-vf drawtext="fontfile='/usr/share/fonts/cantarell/Cantarell-Light.otf':fontsize=14:fontcolor=white:shadowcolor=black:shadowx=2:shadowy=1:text='%H-%M-%S':x=8:y=8"

보여줘:

[Parsed_drawtext_0 @ 0x55e36db2aa40] Stray % near 'H-%M-%S'

이 댓글을 참고하세요.오직텍스트(예 : ) 가 text='test'제대로 작동합니다..추가됨
1-4 \s 앞의 s는 %오류가 있거나 변경 사항이 없음을 나타냅니다.

ffmpeg버전: ffmpeg version 3.2.12-1~deb9u1데비안 컴퓨터에서.
drawtext 라이브러리로 컴파일되었으며 ffmpeg -filters.

답변1

알았어 내가 해결책을 찾았어FFmpeg 필터 문서.

10.52.2 텍스트 확장

확장이 strftime으로 설정된 경우 필터는 제공된 텍스트에서 strftime() 시퀀스를 인식하고 이에 따라 확장합니다. strftime()에 대한 설명서를 확인하세요. 이 기능은 더 이상 사용되지 않습니다.

라고 되어 있지만 This feature is deprecated.이것은 나에게 잘 작동합니다. 이것이 내 최종 결과입니다 -vf.

-vf drawtext="expansion=strftime:fontfile='/usr/share/fonts/cantarell/Cantarell-Light.otf':fontsize=14:fontcolor=white:shadowcolor=black:shadowx=2:shadowy=1:text='%Y-%m-%d\ %H\\\\:%M\\\\:%S':x=8:y=8"

어쨌든 탈출하려면 이 네 가지가 \\\\필요하다는 점에 유의하세요 :. 이 공간을 탈출하려면 하나면 \충분합니다. 결과는 다음과 같습니다:

예

답변2

첫 번째 옵션이 text='%{localtime\\:T}'잘 작동합니다. OP의 인용문이 잘못되었습니다. 그는 'text=...'… 후속 예제에서는 올바른 위치에 작은따옴표를 추가했음을 알 수 있습니다.

관련 정보