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で不要なトラックを–で除外して出力している
サイトの内容を愛用させていただいています。
本ページの内容を試そうとした際エラーが発生し、完遂できませんでした。
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
> ffmpeg version N-94960-g53d31e91c5
バージョンが古いので最新版 ffmpeg 4.3.1以降に更新しください。
> No main startcode found.
> pipe:: Invalid data found when processing input
これだけだとコマンドや入力ファイルの状態がわからないので
入力したコマンドとエラー内容を全てコメント欄にはりつけてください。
video.mp4を2カ所正しく指定してますか。
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
確かにパワーシェルではエラーになりますね。
標準出力が全部終わってから入力しているようで同時処理してないです。
ffmpeg -re -i video.mp4 -c copy -f nut – | ffplay -i –
コマンドプロンプトならこれですぐに再生できるのも最後までデコード終わらないと再生が始まりません。