解決ffmpeg合併視頻後播放條拖不動,畫面出錯的問題

之前用ffmpeg拼接視頻文件時,遇到一個問題,被師傅解決了,這是師傅寫的文章:
https://juejin.im/post/5e9328ea6fb9a03c917fd8af

師傅用的MAC OS,而我用的windows 8
因此我按師傅的方法嘗試了一下,同時也學到了不少

出錯情況

使用ffmpeg將許多mp4文件合成一個mp4文件
錯誤提示:Non-monotonous DTS in output stream 0:0; previous: 21587350, current: 12740928; changing to 21587351. This may result in incorrect timestamps in the output file.

在播放生成的文件時發現,從某個時間點開始的十分鐘,其畫面都被前面的畫面覆蓋掉,只剩下聲音是對的。

剛纔查到一篇文章,講的貌似就是這個問題的原理及解決方法,詳細看:
https://iyn.me/i/post-32.html

解決過程

  1. 在待處理片段的目錄下,打開git bash
$ for f in ./*.mp4; do ffmpeg -i $f -q 0 "${f%.*}.mts"; done
  1. 後臺打開記事本
$ notepad create_list.py &

編寫如下腳本並執行:

f = open("list.txt",'w')
for i in range(2,33):
	f.write("file crypto1-1-" + str(i) + ".mts" +'\n')
$ python create_list.py
$ cat list.txt
  1. 執行合併操作
$  ffmpeg -f concat -i list.txt -c copy output.mp4

總結

這次提醒了我,以後要多用stackoverflow。師傅說他就是在stackoverflow查到的。

  1. ffmpeg

mp4轉mts

ffmpeg -i xxx.mp4 -q 0 xxx.mts

這裏 -q 0 好像是說 讓輸出的mts與之前的mp4保持VBR一致,總之填上就對了。

視頻合併操作

ffmpeg -f concat -i list.txt -c copy output.mp4

list.txt中的內容形如:
file *.mp4/mts/…

  1. 文件名操作

"${f%.*}.mts" 這裏$f{%.*} 是去掉文件名中 最後一個點及右邊內容
更多文件名操作可以看:https://blog.csdn.net/jiezi2016/article/details/79649382

  1. bash後臺方式跑命令

$ notepad create_list.py &
& 讓notepad後臺運行,讓bash能夠繼續輸入和執行命令,方便操作。原理好像是fork一個新進程去執行 notepad 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章