2023 Oct. 21.
2023 May 02.
2020 May 31.
2020 May 30.
出典
2020年版 デジタル放送録画の圧縮を最適化するFFmpegの使い方 - Simple Life in the digital age
[確認]NHK解説放送のmp4エンコード · Issue #244 · l3tnun/EPGStation · GitHub
https://haruo31.underthetree.jp/2014/11/25/%E5%89%AF%E9%9F%B3%E5%A3%B0%E3%81%AE%E3%81%82%E3%82%8Bm2ts%E3%82%92mp4%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AEffmpeg%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3/
https://centossrv.com/epgrec_una.shtml
EPGStationで使うFFmpeg 4.2.4のオプション設定を考える - Simple Life in the digital age
設定概要
- 前の番組からの切替部以降をファイルの先頭とするために、tsファイルの先頭4秒間を削除する。
- "1/0+ 1/0モード(デュアルモノ)"の場合のみ、ffmpegにオプション"-dual_mono_mode main"を指定する。
EPGStationでは、Mirakurunからの変数AUDIOCOMPONENTTYPEが2の場合がデュアルモノ。
- ffmpegのpresetオプションには"-preset=veryfast"とする。
- ffmpegのcrfオプションは、解像度1440×1080の場合はcrf=22、解像度1920×1080の場合はcrf=25がよい。(デフォルト値は23)
ffmpegコマンド
"1/0+ 1/0モード(デュアルモノ)"の場合
> ffmpeg -ss 4 -analyzeduration 10M -probesize 32M -dual_mono_mode main -i INFILE -movflags faststart -map 0 -ignore_unknown -max_muxing_queue_size 1024 -sn -vf $videoFilter -preset veryfast -aspect 16:9 -c:v libx264 -crf 23 -f mp4 -c:a aac -ar 48000 -ab $audioBitrate -ac 2 OUTFILE videoFilter変数 縦解像度が720以下なら"yadif"。(ディインターレース設定) 縦解像度が720超なら"yadif,scale=-2:720"。(ディインターレース設定と共に、高さが720で、幅が自動計算される) jsで書けば videoHeight = parseInt(process.env.VIDEORESOLUTION, 10) // 文字列を10進数に変換 let videoFilter = 'yadif'; // ディインターレース設定 if (videoHeight > 720) { videoFilter += ',scale=-2:720' // videoFilterの値が'yadif,scale=-2:720'になり、ディインターレース設定設定と共に、高さが720で幅が自動計算される } audioBitrate変数 縦解像度が720以下なら128k 縦解像度が720超なら192k' jsで書けば audioBitrate = videoHeight > 720 ? '192k' : '128k' // 縦解像度に応じた設定
"1/0+ 1/0モード(デュアルモノ)"でない場合
> ffmpeg -ss 4 -analyzeduration 10M -probesize 32M -i INFILE -movflags faststart -map 0 -ignore_unknown -max_muxing_queue_size 1024 -sn -vf $videoFilter -preset veryfast -aspect 16:9 -c:v libx264 -crf 23 -f mp4 -c:a aac -ar 48000 -ab $audioBitrate -ac 2 OUTFILE videoFilter変数、audioBitrate変数は上記と同じ。
主音声・副音声分離保存エンコード実行例
次の2通りのエンコードでは、左チャンネルから日本語、右チャンネルから英語が聞こえるNHK19時ニュースtsファイルはどちらも左右チャンネル共日本語になった。
$ ffmpeg -i INFILE -acodec aac -filter_complex channelsplit -absf aac_adtstoasc
$ ffmpeg -i INFILE -acodec aac -filter_complex channelsplit[FL][FR] -map 0:v -map [FL] -map [FR] -metadata:s:a:0 language=jpn -metadata:s:a:1 language=eng -absf aac_adtstoasc
下記コマンドでのNHKの「世界のドキュメンタリー」のトランスコードは英語のみになった
ffmpeg -ss 4 -analyzeduration 10M -probesize 32M -i INFILE -movflags faststart -vf yadif,scale=-2:720 -preset veryfast -aspect 16:9 -c:v libx264 -crf 23 -f mp4 -c:a aac -ar 48000 -ab 192k -ac 2 OUTFILE
下記コマンドでのNHKの「世界のドキュメンタリー」のトランスコードは日本語のみになった
ffmpeg -ss 4 -i INFILE -preset veryfast -c:v libx264 -crf 22 -f mp4 -map 0:v -map 0:a:0 -map 0:a:1 -ignore_unknown -sn -dn -metadata:s:a:0 title="Japanese" -metadata:s:a:0 language="jpn" -metadata:s:a:1 title="English" -metadata:s:a:1 language="eng" -c:a aac -strict -2 -ar 48000 -ab 192k -ac 2 -loglevel error OUTFILE
下記コマンドでのNHKの「世界のドキュメンタリー」のトランスコードは日本語のみになった
ffmpeg -ss 4 -y -i INFILE -preset veryfast -c:v libx264 -crf 22 -f mp4 -map 0:v -map 0:a:0 -map 0:a:1 -ignore_unknown -sn -dn -metadata:s:a:0 title=main -metadata:s:a:0 language=jpn -metadata:s:a:1 title=sub -metadata:s:a:1 language=jpn -c:a aac -strict -2 -ar 48000 -ab 192k -ac 2 -loglevel error OUTFILE