1. 程式人生 > 實用技巧 >迷途小書童——ffmpeg常用命令

迷途小書童——ffmpeg常用命令

不錯不錯

從視訊的第10秒開始,擷取長度為30秒的視訊,維持編碼方式不變

ffmpeg -ss 00:00:10 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy output.mp4

ffmpeg常用命令

常用ffmpeg命令

流媒體迷途小書童2周前 (09-29)0評論

軟硬體環境

  • windows 10 64bit
  • ffmpeg3.4.8

下載及安裝

從官網下載編譯好的二進位制檔案http://ffmpeg.org/download.html,並將其路徑加入到系統環境變數中

獲取音訊/視訊檔案資訊

顯示媒體檔案的資訊,執行ffmpeg -i test.mp4

(base) PS C:\Users\Administrator\Desktop> ffmpeg.exe -i .\test.mp4
ffmpeg version N-93125-gdbfd042983 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 8.2.1 (GCC) 20190212
  configuration: --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-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-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  libavutil      56. 26.100 / 56. 26.100
  libavcodec     58. 47.100 / 58. 47.100
  libavformat    58. 26.101 / 58. 26.101
  libavdevice    58.  6.101 / 58.  6.101
  libavfilter     7. 48.100 /  7. 48.100
  libswscale      5.  4.100 /  5.  4.100
  libswresample   3.  4.100 /  3.  4.100
  libpostproc    55.  4.100 / 55.  4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\test.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf57.83.100
  Duration: 00:01:08.40, start: 0.000000, bitrate: 5947 kb/s
    Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 5945 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default)
    Metadata:
      handler_name    : VideoHandler
At least one output file must be specified
(base) PS C:\Users\Administrator\Desktop>

在上面的輸出中可以看到媒體檔案的資訊,以及ffmpeg的資訊,例如版本、配置細節、版權標記、構建引數和庫選項等

轉換視訊格式

mp4轉換成avi

ffmpeg -i test.mp4 test.avi

視訊擷取

從視訊的第10秒開始,擷取長度為30秒的視訊,維持編碼方式不變

ffmpeg -ss 00:00:10 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy output.mp4

視訊拼接

用一個txt檔案將需要拼接在一起的視訊檔案組織起來,格式是

file 'test1.mp4'
file 'test2.mp4'
file 'test3.mp4'

有了上面的文字檔案,就可以使用ffmpeg

進行拼接了,命令是

ffmpeg -f concat -i filelist.txt -v:c copy output.mp4

更改視訊的解析度

將原視訊中的解析度更改為1280×720,音訊編碼方式不變

ffmpeg -i test.mp4 -filter:v scale=1280:720 -c:a copy output.mp4

如果還想更改視訊比例的話,可以這樣

ffmpeg -i test.mp4 -vf scale=1280x720,setdar=16:9 output.mp4

改變音視訊的編碼方式

也就是轉碼,可以指定編碼方式

ffmpeg -i test.avi -c:v libx264 -c:a aac output.mp4

提取視訊中的音訊

使用引數-vn,就是disable video的意思

ffmpeg -i test.mp4 -vn test.mp3

對應的,如果想去掉音訊,使用引數-an

ffmpeg -i test.mp4 -an output.mp4

提取影象

ffmpeg -i test.mp4 -r 1 -f image2 image_%2d.png

其中-r表示幀速度,-r 1就是每一秒提取一張圖片的意思,提取出來的圖片命名格式是image_01.pngimage_02.pngimage_03.png,以此類推

m3u8切片

m3u8非常適合在網路上播放,ffmpeg可以將本地視訊檔案轉化成m3u8索引加ts視訊的組合。這樣,只要將生成的檔案拷貝到類似nginx這樣的web服務上,就可以實現視訊點播了

ffmpeg -i test.mp4 -vcodec libx264 -strict -2 -acodec aac -hls_list_size 0 -f hls index.m3u8

調整視訊播放速度

下面的示例是2倍速的轉換,如果是原來的1/2速度,則引數變為setpts=2*PTS

ffmpeg -i test.mp4 -vf "setpts=0.5*PTS" output.mp4

編輯視訊

可以修改original_network_idtransport_stream_idservice_id等等,streamid代表音視訊pid,可以修改video pidaudio pid

ffmpeg -i test.mp4 -vcodec libx264 -strict -2 -acodec aac -streamid 1:2595 -
mpegts_original_network_id 0x1122 -mpegts_transport_stream_id 0x3344 -
mpegts_service_id 0x02 -mpegts_pmt_start_pid 0x0A20 -mpegts_start_pid
0x0A21 -metadata service_provider="yakir" -metadata service_name="yakir"
-bsf h264_mp4toannexb -f mpegts output.ts

尋求幫助

最後放出終極大招,超級詳細的官方幫助資訊

ffmpeg -h full