<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mp4 on ポンコツ地方エンジニアの技術ブログ</title><link>https://blog-0847c6.gitlab.io/tags/mp4/</link><description>Recent content in Mp4 on ポンコツ地方エンジニアの技術ブログ</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Thu, 28 Oct 2021 00:00:00 +0900</lastBuildDate><atom:link href="https://blog-0847c6.gitlab.io/tags/mp4/index.xml" rel="self" type="application/rss+xml"/><item><title>ffmpeg で mp4 ファイルを結合する</title><link>https://blog-0847c6.gitlab.io/posts/2021/10/28/ffmpeg/</link><pubDate>Thu, 28 Oct 2021 00:00:00 +0900</pubDate><guid>https://blog-0847c6.gitlab.io/posts/2021/10/28/ffmpeg/</guid><description>&lt;p&gt;たくさんの mp4 ファイルを結合したかったので、ffmpeg を使って結合しました。&lt;/p&gt;
&lt;p&gt;やり方としては、まず以下のように結合ファイルの一覧を記述したテキストファイルを用意します。&lt;br&gt;
ここでは &lt;code&gt;filelist.txt&lt;/code&gt; というファイル名で作成しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;file &amp;#39;001.mp4&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;file &amp;#39;002.mp4&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;file &amp;#39;003.mp4&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そして、以下のようにコマンドを実行すれば結合できます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ffmpeg -f concat -i filelist.txt -c copy sample.mp4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;しかし、動画ファイルがたくさんある場合など、&lt;code&gt;filelist.txt&lt;/code&gt; を手動で作るのが大変なことがあったので、以下のようなスクリプトを作成しました。&lt;br&gt;
ディレクトリ内を再帰的に探索し、ファイル名順で結合します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;dirname &lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;hoge
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;FILELIST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;filelist.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sample.mp4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; pathfile in &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="se"&gt;\f&lt;/span&gt;ind &lt;span class="nv"&gt;$DIR&lt;/span&gt; -name &lt;span class="s1"&gt;&amp;#39;*.mp4&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sort&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; file &lt;span class="se"&gt;\&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;$pathfile&lt;/span&gt;&lt;span class="se"&gt;\&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; &lt;span class="nv"&gt;$FILELIST&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ffmpeg -f concat -i &lt;span class="nv"&gt;$FILELIST&lt;/span&gt; -c copy &lt;span class="nv"&gt;$OUTPUT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm &lt;span class="nv"&gt;$FILELIST&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://torisky.com/ffmpeg%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E5%8B%95%E7%94%BB%E9%80%A3%E7%B5%90%E3%81%AE%E6%96%B9%E6%B3%95/" target="_blank" rel="noopener"
 &gt;https://torisky.com/ffmpeg%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E5%8B%95%E7%94%BB%E9%80%A3%E7%B5%90%E3%81%AE%E6%96%B9%E6%B3%95/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://teratail.com/questions/49217" target="_blank" rel="noopener"
 &gt;https://teratail.com/questions/49217&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://dacelo.space/linux/entry-979.html" target="_blank" rel="noopener"
 &gt;https://dacelo.space/linux/entry-979.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>