st: 1 편집 목록: 1 ffmpeg로 생성된 파일에서 타임스탬프를 검색할 때 누락된 키프레임: 0

st: 1 편집 목록: 1 ffmpeg로 생성된 파일에서 타임스탬프를 검색할 때 누락된 키프레임: 0

내 mp4에서 concat을 사용하여 새 mp4 파일을 만들었습니다.

ffmpeg -protocol_whitelist file,tcp,http,pipe -f concat -i - -c copy ${videoName%/}.mp4

그런 다음 새로 생성된 파일의 파일 크기를 다음과 같이 줄이고 싶습니다.

ffmpeg -i "$file" -s 1280x720 -c:a copy "$videoName"

하지만 난 봤어

hutber@hutber:/mnt/googledrive/Winchmore Hill/1920/Week_14_6-2_W/Clips$ sd
Gtk-Message: 12:18:37.761: GtkDialog mapped without a transient parent. This is discouraged.
/mnt/googledrive/Winchmore Hill/1920/Week_14_6-2_W/Clips/vlc-record-2020-01-25-20h28m06s-S3510003.MP4-.mp4
/mnt/googledrive/Winchmore Hill/1920/Week_14_6-2_W/Clips/01.26.2020/vlc-record-2020-01-25-20h28m06s-S3510003.MP4-_01.26.2020_12.18_SD.mp4
ffmpeg version N-49161-g50e194e6e1-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
  libavutil      56. 30.100 / 56. 30.100
  libavcodec     58. 53.101 / 58. 53.101
  libavformat    58. 28.101 / 58. 28.101
  libavdevice    58.  7.100 / 58.  7.100
  libavfilter     7. 55.100 /  7. 55.100
  libswscale      5.  4.101 /  5.  4.101
  libswresample   3.  4.100 /  3.  4.100
  libpostproc    55.  4.100 / 55.  4.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6844880] st: 1 edit list: 1 Missing key frame while searching for timestamp: 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6844880] st: 1 edit list 1 Cannot find an index entry before timestamp: 0.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/mnt/googledrive/Winchmore Hill/1920/Week_14_6-2_W/Clips/vlc-record-2020-01-25-20h28m06s-S3510003.MP4-.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: mp41avc1
    creation_time   : 2020-01-25T20:28:19.000000Z
    playback_requirements: QuickTime 6.0 or greater
    playback_requirements-eng: QuickTime 6.0 or greater
    encoder         : vlc 3.0.8 stream output
    encoder-eng     : vlc 3.0.8 stream output
  Duration: 00:00:12.60, start: 0.000000, bitrate: 61318 kb/s
    Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 253 kb/s (default)
    Metadata:
      creation_time   : 2020-01-25T20:28:19.000000Z
      handler_name    : SoundHandler
    Stream #0:1(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160 [SAR 1:1 DAR 16:9], 61056 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2020-01-25T20:28:19.000000Z
      handler_name    : VideoHandler
/mnt/googledrive/Winchmore Hill/1920/Week_14_6-2_W/Clips/01.26.2020/vlc-record-2020-01-25-20h28m06s-S3510003.MP4-_01.26.2020_12.18_SD.mp4: No such file or directory

이것이 도움이 될 경우를 대비해, 여기 제 sh 스크립트가 있습니다. (저는 JS 개발자가 있습니다 :p)

#!/bin/bash
file=$(zenity --file-selection)
currentDateTime=$(date +'%m.%d.%Y_%H.%M')
currentDate=$(date +'%m.%d.%Y')
safeVideoName="${file/ /_}"
safeVideoName="${file/.mp4/}"
safeVideoName="${file/.mp4/}"
filename=${safeVideoName##*/}

fullpath="${safeVideoName%/*}/$currentDate"
videoName="${fullpath}/${filename}_${currentDateTime}_SD.mp4"
echo $file
echo $videoName
mkdir -p $fullpath
ffmpeg -i "$file" -s 1280x720 -c:a copy "$videoName"

답변1

mkdir스크립트에서 매개변수 대체는 인용되지 않습니다.

mkdir -p $fullpath

~해야 한다

mkdir -p "$fullpath"

'키프레임 누락' 메시지문제가 되지 않아야 합니다..

ffmpeg의 마지막 줄에서 볼 수 있듯이:

...: No such file or directory

여기에 문제가 있습니다. bash는 매개변수 대체를 따옴표 없이 구분하기 때문에 mkdir스크립트의 명령은 원하는 디렉토리 대신 두 개의 디렉토리를 생성하려고 시도합니다. 결과적으로 ffmpeg존재하지 않는 디렉토리에 출력 파일이 있다는 것을 알려주게 됩니다.

공백이 하나뿐이므로 이제 두 개의 디렉터리가 있어야 합니다.

  1. /mnt/googledrive/Winchmore
  2. 스크립트가 실행되는 디렉터리에는Hill

삭제하고 싶을 수도 있습니다.

관련 정보