2021年7月21日 星期三

ffmpeg usage

 將字幕檔包入mkv:

 內封式:(軟字幕,不影響影像,速度快)

$ ffmpeg -i sourceVideo.mkv -i sourceSubtitle.srt -c copy outputVideo.mkv

$ffmpeg -i infile.mp4 -i infile.idx -i infile.sub -map 0:v -map 0:a -c copy -map 1 -c:s:1 dvd_subtitle -metadata:s:s:1 language=ch outfile.mkv

ffmpeg -i input.mkv -i input.ass -i input.srt -c copy output.mkv
ffmpeg -input.mkv -i input.idx -c copy output.mkv 
MP4 只有支援封裝 mov_text 與 dvdsub 格式,
若要將 SRT 字幕插入 MP4 檔內,就必須轉為 mov_text 格式。
ffmpeg -input.mp4 -i input.srt -c copy -c:s mov_text output.mp4 

 

內嵌式:(硬字幕,影響影像,速度慢,可調整字形各種屬性)

$ ffmpeg -i sourceVideo.mp4 -vf "subtitles=sourceSubtitle.srt" outputVideo.mp4
$ ffmpeg -i sourceVideo.mp4 -vf "subtitles=sourceSubtitle.srt:force_style='Fontsize=24'" outputVideo.mp4 

ffmpeg -i 1.mp4 -i 1.sub -i 1.idx -filter_complex "[0:v][2:s]overlay=0:H-h" -c:v libx264 out.mp4
[0:v]指的第一个加载的视频文件1.MP4,
[2:s]指的是加载的1.idx文件,因为索引是2,
然后通过overlay=0:H-h将字幕显示在视频下方。

 從mkv取出第一軌字幕檔

ffmpeg -i Movie.mkv -c copy -map 0:s:0 sub01.srt

 打包mkv檔 (a:audio, v:video, s:subsript)

ffmpeg -i movie.mp4 -i sub.srt -map 0:0 -map 0:1 -map 1 -c:a copy -c:v copy -c:s copy movie.mkv

ffmpeg -i Lupin.mp4 -i Lupin.ass -vcodec copy -acodec copy 2.mkv

 提取字幕 (-vn:不要影, -an:不要音, -codec:s:0 srt 要字幕第一軌)

ffmpeg -i video.mkv -vn -an -codec:s:0 srt subtitle.srt

僅提取视频 (Extract Video)

ffmpeg -i movie.mkv -vcodec copy -an  videoNoAudioSubtitle.mp4

 僅提取音频(Extract Audio)

ffmpeg -i movie.mkv -vn -acodec copy audio.ac3

ffmpeg -i input.mp4 -vn output.mp3
ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3
  • -vn – 表明我們已經在輸出檔案中禁用視訊錄製。
  • -ar – 設定輸出檔案的音訊頻率。通常使用的值是22050 Hz、44100 Hz、48000 Hz。
  • -ac – 設定音訊通道的數目。
  • -ab – 表明音訊位元率。
  • -f – 輸出檔案格式。在我們的例項中,它是 mp3 格式。


 僅提取字幕(Extract Subtitle)

ffmpeg -i movie.mkv -map 0:s:0 sub1.srt

ffmpeg -i input.mp4 -c:s srt output.srt 

ffmpeg -i input.mkv -c:s copy output.ass

刪除字幕 (Delete Subtitle)

ffmpeg -i sourceVideo.mkv  -c copy -sn outputVideo.mkv

更改視訊檔案的解析度

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

ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4

 壓縮並減少輸出檔案的大小

ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4

 壓縮音訊檔案

ffmpeg -i input.mp3 -ab 128 output.mp3

移除視訊流

ffmpeg -i input.mp4 -vn output.mp3 
ffmpeg -i input.mp4 -vn -ab 320 output.mp3

切分視訊檔案為多個部分

ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4 
-t 00:00:30 表示從視訊的開始到視訊的第 30 秒建立一部分視訊。 
-ss 00:00:30 為視訊的下一部分顯示開始時間戳。它意味著第 2 部分將從第 30 秒開始,並將持續到原始視訊檔案的結尾。

Make GIF images from a Video

ffmpeg -ss 00:00:20 -i sample.mp4 -to 10 -r 10 -vf scale=200:-1 Animate.gif 
  • -ss : indicates the starting point of GIF
  • -i : input file
  • sample.mp4 : My video file name
  • -to : End position of the GIF file
  • -r : frame rate. You can increase the value to get more quality GIF file
  • -vf : filter graph. To scale the GIF image in the desired size.

Create GIF from a list of images

convert -delay 120 -loop 0 *.jpg Animate.gif

 Create Video from a list of images

ffmpeg -r 1/10 -i picture-%01d.png -c:v libx264 -r 30 -pix_fmt yuv420p video.mp4

  • -r 1/10 : Display each image for 10 seconds.
  • -i picture-%01d.png : Reads all pictures that starts with name "picture-", following with 1 digit (%01d) and ending with .png. If the images name comes with 2 digits (I.e picture-10.png, picture11.png etc), use (%02d) in the above command.
  • -c:v libx264 : Output video codec (i.e h264).
  • -r 30 : framerate of output video
  • -pix_fmt yuv420p : Output video resolution
  • video.mp4 : Output video file with .mp4 format.

convert your PDF file image format such as PNG or JPG  

convert -density 400 input.pdf picture.png
轉換字幕格式
將 MP4 檔內的 mov_text 字幕轉換 subrip 格式:
ffmpeg -i input.mp4 -c copy -c:s subrip output.mkv

轉換 srt 字幕檔為 ass 格式:
ffmpeg -i input.srt -c:s ass output.ass