Cut video with ffmpeg. – Stack Overflowより、再エンコードなしに1行のコマンドで先頭と後ろをカットする方法。

コマンドプロンプトでは問題ないが、PowerShellで実行すると標準出力の部分が出力終わるまで入力に渡さないので出力が失敗する。

開始10秒と後ろ10秒をカットしてその間をコピー出力する。同じファイルを2度入力するのでファイル名に注意。
ffmpeg -ss 10 -i video.mp4 -ss 20 -i video.mp4 -c copy -map 1:0 -map 0 -shortest -f nut - | ffmpeg -f nut -i - -map 0 -map -0:0 -c copy out.mp4

  • このコマンドの挙動の理解には-shortest、-map、-f nutを知る必要がある
  • -shortestは複数入力のトラックの中から一番短いファイル時間でカットされる
  • 1番目の-ssで動画の先頭時間の指定、2番目の-ssと1番目の-ssの差し引きが後ろをカットする時間になる
  • -map 1:0 -map 0を使ってそれらを1入力扱いにして、そのトラックに中から -shortestで一番時間の短いところで出力時間が決まる
  • なぜ-map 1:0を先にするかというと、この映像はカットするための時間を決める動画で最終出力には不要になりかつ、トラックを除外しやすい-map 0:0で標準入力するため
  • -f nutはいろいろなコーデックを標準入出力できるので便利
  • 標準入力で-map 0しているのは映像と音声、または字幕などのすべてのデータを元に-shortestで後ろをカットするから
  • -map 0:0で不要なトラックをで除外して出力している

5 thoughts on “ffmpeg で先頭と後ろを一度にカットする

  • 和守

    サイトの内容を愛用させていただいています。

    本ページの内容を試そうとした際エラーが発生し、完遂できませんでした。

    win10 x64 pro ver2004

    ffmpeg version N-94960-g53d31e91c5
    built with gcc 9.1.1 (GCC) 20190807

    にて

    No main startcode found.
    pipe:: Invalid data found when processing input

    • admin

      > ffmpeg version N-94960-g53d31e91c5
      バージョンが古いので最新版 ffmpeg 4.3.1以降に更新しください。

      > No main startcode found.
      > pipe:: Invalid data found when processing input

      これだけだとコマンドや入力ファイルの状態がわからないので
      入力したコマンドとエラー内容を全てコメント欄にはりつけてください。

        • 和守

          ffmpegを最新に更新したのちに、
          ffmpeg -ss 10 -i video.mp4 -ss 20 -i video.mp4 -c copy -map 1:0 -map 0 -shortest -f nut – | ffmpeg -f nut -i – -map 0 -map -0:0 -c copy out.mp4
          と、動画ファイルをvideo.mp4へ改名したのち記事のとおりにコピペしてうごかしましたが、やはり同じエラーとなりました。

          なんというか、パワーシェル側の不具合な気がしてきました。

          出力↓
          ffmpeg -ss 10 -i video.mp4 -ss 20 -i video.mp4 -c copy -map 1:0 -map 0 -shortest -f nut – | ffmpeg -f nut -i – -map 0 -map -0:0 -c copy out.mp4
          ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
          built with gcc 10.2.1 (GCC) 20200726
          configuration: –disable-static –enable-shared –enable-gpl –enable-version3 –enable-sdl2 –enable-fontconfig –enable-gnutls –enable-iconv –enable-libass –enable-libdav1d –enable-libbluray –enable-libfreetype –enable-libmp3lame –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libopenjpeg –enable-libopus –enable-libshine –enable-libsnappy –enable-libsoxr –enable-libsrt –enable-libtheora –enable-libtwolame –enable-libvpx –enable-libwavpack –enable-libwebp –enable-libx264 –enable-libx265 –enable-libxml2 –enable-libzimg –enable-lzma –enable-zlib –enable-gmp –enable-libvidstab –enable-libvmaf –enable-libvorbis –enable-libvo-amrwbenc –enable-libmysofa –enable-libspeex –enable-libxvid –enable-libaom –enable-libgsm –disable-w32threads –enable-libmfx –enable-ffnvcodec –enable-cuda-llvm –enable-cuvid –enable-d3d11va –enable-nvenc –enable-nvdec –enable-dxva2 –enable-avisynth –enable-libopenmpt –enable-amf
          libavutil 56. 51.100 / 56. 51.100
          libavcodec 58. 91.100 / 58. 91.100
          libavformat 58. 45.100 / 58. 45.100
          libavdevice 58. 10.100 / 58. 10.100
          libavfilter 7. 85.100 / 7. 85.100
          libswscale 5. 7.100 / 5. 7.100
          libswresample 3. 7.100 / 3. 7.100
          libpostproc 55. 7.100 / 55. 7.100
          Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‘video.mp4’:
          Metadata:
          major_brand : mp42
          minor_version : 0
          compatible_brands: mp42mp41iso4
          creation_time : 2020-07-04T10:01:09.000000Z
          Duration: 00:01:32.93, start: 0.000000, bitrate: 703 kb/s
          Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 640×360, 633 kb/s, 24 fps, 24 tbr, 24k tbn, 48 tbc (default)
          Metadata:
          creation_time : 2020-07-04T10:01:09.000000Z
          handler_name : Vireo Eyes v2.5.3
          encoder : AVC Coding
          Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 65 kb/s (default)
          Metadata:
          creation_time : 2020-07-04T10:01:09.000000Z
          handler_name : Vireo Ears v2.5.3
          Input #1, mov,mp4,m4a,3gp,3g2,mj2, from ‘video.mp4’:
          Metadata:
          major_brand : mp42
          minor_version : 0
          compatible_brands: mp42mp41iso4
          creation_time : 2020-07-04T10:01:09.000000Z
          Duration: 00:01:32.93, start: 0.000000, bitrate: 703 kb/s
          Stream #1:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 640×360, 633 kb/s, 24 fps, 24 tbr, 24k tbn, 48 tbc (default)
          Metadata:
          creation_time : 2020-07-04T10:01:09.000000Z
          handler_name : Vireo Eyes v2.5.3
          encoder : AVC Coding
          Stream #1:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 65 kb/s (default)
          Metadata:
          creation_time : 2020-07-04T10:01:09.000000Z
          handler_name : Vireo Ears v2.5.3
          Output #0, nut, to ‘pipe:’:
          Metadata:
          major_brand : mp42
          minor_version : 0
          compatible_brands: mp42mp41iso4
          encoder : Lavf58.45.100
          Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 640×360, q=2-31, 633 kb/s, 24 fps, 24 tbr, 48k tbn, 24k tbc (default)
          Metadata:
          creation_time : 2020-07-04T10:01:09.000000Z
          X-Language : und
          handler_name : Vireo Eyes v2.5.3
          encoder : AVC Coding
          Stream #0:1: Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 640×360, q=2-31, 633 kb/s, 24 fps, 24 tbr, 48k tbn, 24k tbc (default)
          Metadata:
          creation_time : 2020-07-04T10:01:09.000000Z
          X-Language : und
          handler_name : Vireo Eyes v2.5.3
          encoder : AVC Coding
          Stream #0:2: Audio: aac (LC) ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, fltp, 65 kb/s (default)
          Metadata:
          creation_time : 2020-07-04T10:01:09.000000Z
          X-Language : und
          handler_name : Vireo Ears v2.5.3
          Stream mapping:
          Stream #1:0 -> #0:0 (copy)
          Stream #0:0 -> #0:1 (copy)
          Stream #0:1 -> #0:2 (copy)
          Press [q] to stop, [?] for help
          [nut @ 0000019dde5fe980] Multiple keyframes with same PTS:00:58.13 bitrate=1390.4kbits/s speed= 105x
          Last message repeated 7 times
          frame= 1799 fps=0.0 q=-1.0 Lq=-1.0 size= 12241kB time=00:01:12.90 bitrate=1375.5kbits/s speed= 109x
          video:11611kB audio:594kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.293342%
          ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
          built with gcc 10.2.1 (GCC) 20200726
          configuration: –disable-static –enable-shared –enable-gpl –enable-version3 –enable-sdl2 –enable-fontconfig –enable-gnutls –enable-iconv –enable-libass –enable-libdav1d –enable-libbluray –enable-libfreetype –enable-libmp3lame –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libopenjpeg –enable-libopus –enable-libshine –enable-libsnappy –enable-libsoxr –enable-libsrt –enable-libtheora –enable-libtwolame –enable-libvpx –enable-libwavpack –enable-libwebp –enable-libx264 –enable-libx265 –enable-libxml2 –enable-libzimg –enable-lzma –enable-zlib –enable-gmp –enable-libvidstab –enable-libvmaf –enable-libvorbis –enable-libvo-amrwbenc –enable-libmysofa –enable-libspeex –enable-libxvid –enable-libaom –enable-libgsm –disable-w32threads –enable-libmfx –enable-ffnvcodec –enable-cuda-llvm –enable-cuvid –enable-d3d11va –enable-nvenc –enable-nvdec –enable-dxva2 –enable-avisynth –enable-libopenmpt –enable-amf
          libavutil 56. 51.100 / 56. 51.100
          libavcodec 58. 91.100 / 58. 91.100
          libavformat 58. 45.100 / 58. 45.100
          libavdevice 58. 10.100 / 58. 10.100
          libavfilter 7. 85.100 / 7. 85.100
          libswscale 5. 7.100 / 5. 7.100
          libswresample 3. 7.100 / 3. 7.100
          libpostproc 55. 7.100 / 55. 7.100
          [nut @ 000001d9fbe25280] No main startcode found.
          pipe:: Invalid data found when processing input

          • admin

            確かにパワーシェルではエラーになりますね。
            標準出力が全部終わってから入力しているようで同時処理してないです。

            ffmpeg -re -i video.mp4 -c copy -f nut – | ffplay -i –

            コマンドプロンプトならこれですぐに再生できるのも最後までデコード終わらないと再生が始まりません。

admin へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)