
ffmpeg
동영상에 2개의 워터마크를 추가하는 데 사용하고 있습니다 .
그것은 매력처럼 잘 작동합니다. 이 작은 문제가 있습니다. 프로세스를 종료하기 위해 ffmpeg
누르지 않으면 인코딩이 중지되지 않습니다 . CTRL+C내 명령은 다음과 같습니다.
/usr/bin/ffmpeg -i /home/twinuts/sd/videobot/www/in.mp4 -y /
-loop 1 -i /home/twinuts/sd/videobot/www/outro.png /
-loop 1 -i /home/twinuts/sd/videobot/www/newlayer.png /
-filter_complex "[1:v]fade=t=in:st=7:d=1:alpha=1[wm]; /
[2:v]fade=t=out:st=7:d=1:alpha=1[wm2]; /
[0:v][wm]overlay[v];[v][wm2]overlay" /
-codec:v libx264 -codec:a libfdk_aac /
/home/twinuts/sd/videobot/www/videos/newvideo.avi
내 출력 콘솔은 다음과 같습니다.
ffmpeg version git-2015-09-06-db18b3d Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-16)
configuration: --prefix=/usr/ffmpeg_build --extra-cflags=-I/usr/ffmpeg_build/include --extra-ldflags=-L/usr/ffmpeg_build/lib --bindir=/usr/bin --pkg-config-flags=--static --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265
libavutil 55. 0.100 / 55. 0.100
libavcodec 57. 0.100 / 57. 0.100
libavformat 57. 0.100 / 57. 0.100
libavdevice 57. 0.100 / 57. 0.100
libavfilter 6. 0.100 / 6. 0.100
libswscale 4. 0.100 / 4. 0.100
libswresample 2. 0.100 / 2. 0.100
libpostproc 54. 0.100 / 54. 0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/twinuts/sd/videobot/www/in.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.0.100
Duration: 00:00:10.05, start: 0.046440, bitrate: 1607 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1477 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
Input #1, png_pipe, from '/home/twinuts/sd/videobot/www/outro.png':
Duration: N/A, bitrate: N/A
Stream #1:0: Video: png, rgb24(pc), 1280x720, 25 fps, 25 tbr, 25 tbn, 25 tbc
Input #2, png_pipe, from '/home/twinuts/sd/videobot/www/newlayer.png':
Duration: N/A, bitrate: N/A
Stream #2:0: Video: png, rgba(pc), 1280x720, 25 fps, 25 tbr, 25 tbn, 25 tbc
[libx264 @ 0x4afb4a0] using SAR=1/1
[libx264 @ 0x4afb4a0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x4afb4a0] profile High, level 3.1
Output #0, avi, to '/home/twinuts/sd/videobot/www/videos/newvideo.avi':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
ISFT : Lavf57.0.100
Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 25 fps, 25 tbn, 25 tbc (default)
Metadata:
encoder : Lavc57.0.100 libx264
Stream #0:1(und): Audio: aac (libfdk_aac) ([255][0][0][0] / 0x00FF), 44100 Hz, stereo, s16, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
encoder : Lavc57.0.100 libfdk_aac
Stream mapping:
Stream #0:0 (h264) -> overlay:main (graph 0)
Stream #1:0 (png) -> fade (graph 0)
Stream #2:0 (png) -> fade (graph 0)
overlay (graph 0) -> Stream #0:0 (libx264)
Stream #0:1 -> #0:1 (aac (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
Past duration 0.839836 too large 1475kB time=00:00:10.00 bitrate=1207.7kbits/s
frame= 251 fps= 23 q=28.0 size= 1504kB time=00:00:10.00 bitrate=1230.9kbits/s dup=0 drop=110 frame= 251 fps= 22 q=28.0 size= 1504kB time=00:00:10.00 bitrate=1230.9kbits/s dup=0 drop=143 frame= 251 fps= 21 q=28.0 size= 1504kB time=00:00:10.00 bitrate=1230.9kbits/s dup=0 drop=176 frame= 251 fps= 20 q=28.0 size= 1504kB time=00:00:10.00 bitrate=1230.9kbits/s dup=0 drop=201 frame= 251 fps= 20 q=28.0 size= 1504kB time=00:00:10.00 bitrate=1230.9kbits/s dup=0 drop=222 frame= 251 fps= 19 q=28.0 size= 1504kB time=00:00:10.00 bitrate=1230.9kbits/s dup=0 drop=254 frame= 251 fps= 18 q=28.0 size= 1504kB time=00:00:10.00 bitrate=1230.9kbits/s dup=0 drop=287 frame= 251 fps= 18 q=28.0 size= 1504kB time=00:00:10.00 bitrate=1230.9kbits/s dup=0 drop=319 frame= 251 fps= 17 q=28.0 size= 1504kB time=00:00:10.00 bitrate=1230.9kbits/s dup=0 drop=352 frame= 251 fps= 16 q=28.0 size= 1504kB time=00:00:10.00 bitrate=1230.9kbits/s dup=0 drop=385 frame= 251 fps= 16 q=-1.0 Lsize= 1580kB time=00:00:10.05 bitrate=1287.7kbits/s dup=0 drop=392
video:1395kB audio:159kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.686170%
[libx264 @ 0x4afb4a0] frame I:2 Avg QP:18.98 size: 35646
[libx264 @ 0x4afb4a0] frame P:109 Avg QP:20.17 size: 9465
[libx264 @ 0x4afb4a0] frame B:140 Avg QP:20.37 size: 2329
[libx264 @ 0x4afb4a0] consecutive B-frames: 15.9% 23.9% 15.5% 44.6%
[libx264 @ 0x4afb4a0] mb I I16..4: 20.7% 56.8% 22.5%
[libx264 @ 0x4afb4a0] mb P I16..4: 9.9% 12.2% 0.4% P16..4: 42.1% 6.4% 1.7% 0.0% 0.0% skip:27.3%
[libx264 @ 0x4afb4a0] mb B I16..4: 0.7% 0.5% 0.0% B16..8: 25.7% 1.0% 0.0% direct: 1.9% skip:70.2% L0:41.5% L1:56.8% BI: 1.7%
[libx264 @ 0x4afb4a0] 8x8 transform intra:53.7% inter:90.7%
[libx264 @ 0x4afb4a0] coded y,uvDC,uvAC intra: 19.7% 62.5% 15.3% inter: 5.2% 20.7% 0.1%
[libx264 @ 0x4afb4a0] i16 v,h,dc,p: 38% 23% 15% 23%
[libx264 @ 0x4afb4a0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 36% 16% 32% 2% 3% 3% 3% 2% 2%
[libx264 @ 0x4afb4a0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 39% 21% 16% 3% 6% 6% 4% 3% 2%
[libx264 @ 0x4afb4a0] i8c dc,h,v,p: 62% 16% 19% 3%
[libx264 @ 0x4afb4a0] Weighted P-Frames: Y:19.3% UV:19.3%
[libx264 @ 0x4afb4a0] ref P L0: 79.2% 7.0% 11.3% 2.3% 0.1%
[libx264 @ 0x4afb4a0] ref B L0: 91.4% 8.0% 0.6%
[libx264 @ 0x4afb4a0] ref B L1: 96.7% 3.3%
[libx264 @ 0x4afb4a0] kb/s:1138.61
[root@xxx ~]#
PNG 프레임 속도가 mp4와 동일하지 않은 것과 관련이 있는 것 같습니다(대체로 추측). 하지만 어떤 조언이라도 주시면 감사하겠습니다.
답변1
ffmpeg
내 동영상이 영원히 처리되는 이유는 무엇인가요 ?
무슨 일이 일어나고 있는지는 ffmpeg
입력 중 하나(비디오)의 끝에 도달했지만 다른 입력(이 경우 로 설정된 이미지)이 -loop 1
여전히 진행 중이기 때문에 인코딩을 계속한다는 것입니다. 이로 인해 또는 다음
ffmpeg
을 사용하여 수동으로 종료할 때까지 프레임이 삭제됩니다 .qCtrl+C
... drop=110
... drop=143
... drop=176
... drop=201
... drop=222
...
... drop=385
... drop=392
ffmpeg
가장 짧은 비디오 세그먼트를 사용하려면 어떻게 해야 합니까 ?
입력 및 워크플로에 따라 두 가지 옵션이 있습니다.
옵션 을 사용할 수 있습니다 -shortest
(에서ffmpeg
선적 서류 비치):
-shortest (output) Finish encoding when the shortest input stream ends.
또는 shortest
매개변수를 필터에 사용합니다 overlay
(필터 문서):
shortest If set to 1, force the output to terminate when the shortest input terminates. Default value is 0.
필터를 이용해 워터마크 2개를 겹쳐서 쓰고 있는데 overlay
...
이 경우 입력을 관리하기 위해 를 사용하므로 옵션 과 함께 filter_complex
사용합니다 . 따라서 귀하의 명령은 다음과 같습니다:overlay
shortest
/usr/bin/ffmpeg -i /home/twinuts/sd/videobot/www/in.mp4 -y /
-loop 1 -i /home/twinuts/sd/videobot/www/outro.png /
-loop 1 -i /home/twinuts/sd/videobot/www/newlayer.png /
-filter_complex "[1:v]fade=t=in:st=7:d=1:alpha=1[wm]; /
[2:v]fade=t=out:st=7:d=1:alpha=1[wm2]; /
[0:v][wm]overlay=shortest=1[v];[v][wm2]overlay=shortest=1" /
-codec:v libx264 -codec:a libfdk_aac /
/home/twinuts/sd/videobot/www/videos/newvideo.avi
그런 다음 in.mp4
완료되면 종료됩니다.