지금까지 내가 찾은 유일한 Linux 명령 줄 도구는 정확한 프레임에서 (또는 프레임 정확도로)자를 수있는 도구는 melt
( sudo apt-get install melt
)입니다.
say inputvid.mp4
로 인코딩 설정을 먼저 확인 ffmpeg
하십시오. (여기서 다시 인코딩하고 싶다고 말하지만 -f mp4
파일로 /dev/null
출력을 버립니다. 나는 stderr을 리디렉션하여 grep 할 수 있습니다. , 명령 프롬프트가 표시 y
되고 ENTER로 응답해야 하므로 프로세스가 진행되고 유용한 정보를 덤프합니다. 이것은 Ubuntu 14의 ffmpeg 3.3.3입니다).
ffmpeg -i inputvid.mp4 -f mp4 /dev/null 2>&1 | grep 'Stream\|encoder'
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 640x360 [SAR 1:1 DAR 16:9], 389 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 95 kb/s (default)
y
File '/dev/null' already exists. Overwrite ? [y/N] Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
encoder : Lavf57.71.100
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p(progressive), 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc (default)
encoder : Lavc57.89.100 libx264
Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 128 kb/s (default)
encoder : Lavc57.89.100 aac
자, 이 비디오의 ffmpeg
선택 libx264
과 aac
인코더를 볼 수 있습니다 . 다음에 이것을 입력 할 수 있습니다 melt
:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac vcodec=libx264
.... melt
프레임 7235와 7349 사이의 조각으로 새 파일로 자릅니다 cut.mp4
. 그런 다음 cut.mp4
루프가 올바르게 있는지 확인 하려면 melt
다시 사용하여 루프를 두 번 재생하고 SDL 창으로 재생하십시오.
melt cut.mp4 cut.mp4 -consumer sdl
... ffmpeg
그리고이 파일에 대한 내용은 다음과 같습니다 .
ffmpeg -i cut.mp4 -f mp4 /dev/null 2>&1 | grep 'Stream\|encoder' encoder : Lavf54.20.4
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 526 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 182 kb/s (default)
y
File '/dev/null' already exists. Overwrite ? [y/N] Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
encoder : Lavf57.71.100
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc (default)
encoder : Lavc57.89.100 libx264
Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s (default)
encoder : Lavc57.89.100 aac
설정을 코딩하는 동영상이 cut.mp4
동일 할 것 inputvid.mp4
비디오 비트 레이트가 389로 변경 제외시켰다 KB / s로 5백26킬로바이트 / s, 또한 오디오 인코딩 설정은 44,100에서 48,000 Hz로 변화 샘플링 레이트를 제외하고는 거의 동일하다; 그러나 다음과 같이 규제 할 수 있습니다.
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac ar=44100 ab=95k vcodec=libx264 vb=389k
... 그러나 이것으로도 최종 비디오 비트 전송률은 337 kb / s입니다. 여전히 루프에서 재생할 때 컷이 잘 반복되고 오디오가 포함되어 있으므로 실제로 프레임이 정확하다고 생각합니다 ...