$ ffprobe -i ./test.mp4 ffprobe version 4.1.8-0+deb10u1 Copyright (c) 2007-2021 the FFmpeg developers built with gcc 8 (Debian 8.3.0-6) configuration: --prefix=/usr --extra-version=0+deb10u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared libavutil 56. 22.100 / 56. 22.100 libavcodec 58. 35.100 / 58. 35.100 libavformat 58. 20.100 / 58. 20.100 libavdevice 58. 5.100 / 58. 5.100 libavfilter 7. 40.101 / 7. 40.101 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 3.100 / 5. 3.100 libswresample 3. 3.100 / 3. 3.100 libpostproc 55. 3.100 / 55. 3.100 Input #0, matroska,webm, from './test.mp4': Metadata: HTTP://YOUTUBE.COM/STREAMING/OTF/DURATIONS/112015: Segment-Count: 6109 : Segment-Durations-Ms: 5067,5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),506 : : ENCODER : Lavf58.20.100 Duration: 08:35:50.04, start: 0.000000, bitrate: 551 kb/s Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv, bt709/unknown/unknown), 1280x720, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 1k tbn, 1k tbc (default) Metadata: DURATION : 08:35:49.996000000 Stream #0:1(eng): Audio: aac (LC), 44100 Hz, stereo, fltp (default) Metadata: HANDLER_NAME : ISO Media file produced by Google Inc. DURATION : 08:35:50.040000000
$ ffmpeg -i IN.mkv -vn -acodec copy OUT.aac
ffmpegのsilenceremoveフィルタを使う
$ ffmpeg -i IN.mkv -vn -af silenceremove=1:0:-50dB -acodec copy OUT.aac
無音部分をカット&コーデックとビットレートを変更
$ ffmpeg -i IN.mkv -vn -af silenceremove=1:0:-50dB -acodec libopus -b:a 32k OUT.opus
soxを使った別解(未確認)
奇数サイズの動画をmp4等に変換しようとするとエラーになる
$ ffmpeg -i infile.webm -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" outfile.mp4 : [libx264 @ 0x55950e5c6e40] width not divisible by 2 (559x353) Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
サイズ調整して変換
$ ffmpeg -i infile.webm -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" outfile.mp4
$ ffprobe ./pfetch.mp4 -hide_banner -show_entries format 2>/dev/null [FORMAT] filename=./pfetch.mp4 nb_streams=1 nb_programs=0 format_name=mov,mp4,m4a,3gp,3g2,mj2 format_long_name=QuickTime / MOV start_time=0.000000 duration=24.240000 size=223463 bit_rate=73750 probe_score=100 TAG:major_brand=isom TAG:minor_version=512 TAG:compatible_brands=isomiso2avc1mp41 TAG:encoder=Lavf58.20.100 [/FORMAT]
指定情報のみ取得(ここでは duration
動画時間)
$ ffprobe ./pfetch.mp4 -hide_banner -show_entries format=duration 2>/dev/null [FORMAT] duration=24.240000 [/FORMAT]
$ ls -1 ./file*.mp4 | xargs -I{} ffprobe {} -hide_banner -show_entries format 2>/dev/null | grep duration | cut -f2 -d= | xargs -I{} echo {}/60|bc 230 120
動画のフレーム数を数える1
$ time ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 'かげきしょうじょ!! 第3話 クマのぬいぐるみ.mp4' 34047 real 0m0.663s user 0m0.546s sys 0m0.091s
動画のフレーム数を数える2
$ time ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 'か げきしょうじょ!! 第3話 クマのぬいぐるみ.mp4' 34047 real 6m1.871s user 5m59.593s sys 0m1.129s
動画のフレーム数を数える3
$ time ffmpeg -i 'かげきしょうじょ!! 第3話 クマのぬいぐるみ.mp4' -map 0:v:0 -c copy -f null - 2>&1 | grep ^frame= frame=34047 fps=21698 q=-1.0 Lsize=N/A time=00:23:40.00 bitrate=N/A speed= 905x real 0m2.184s user 0m1.750s sys 0m0.430s
動画のフレームを数える4
$ time mediainfo --Output="Video;%FrameCount%" 'かげきしょうじょ!! 第3話 クマのぬいぐるみ.mp4' 34047 real 0m0.326s user 0m0.167s sys 0m0.043s
元動画のfpsを確認.今回は20fps
$ ffprobe -i input.mp4 --snip-- Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 2101 kb/s, 20 fps, 20 tbr, 10240 tbn, 40 tbc (default) --snip--
書き出し
$ ffmpeg -i input.mp4 -vf fps=20 out%04d.jpg
$ time ffmpeg -sseof -10 -skip_frame nokey -i 'INPUT.mp4' -update 1 -q:v 1 last.png : real 0m11.865s user 0m32.971s sys 0m1.036s
$ time ffmpeg -sseof -10 -skip_frame nokey -i 'INPUT.mp4' -update 1 -q:v 1 last.png : real 0m12.231s user 0m34.340s sys 0m1.018s
コメント